1- import datetime
2-
31from django .core .exceptions import ObjectDoesNotExist
42from django .db .models import Q
53from django .utils import timezone
64from rest_framework import status , viewsets
75from rest_framework .decorators import action
86from rest_framework .exceptions import PermissionDenied
97from rest_framework .response import Response
10- from scheduler .models import Attendance , SectionOccurrence
118
129from ..models import Student
1310from ..serializers import AttendanceSerializer , StudentSerializer
@@ -29,6 +26,10 @@ def get_queryset(self):
2926
3027 @action (detail = True , methods = ["patch" ])
3128 def drop (self , request , pk = None ):
29+ """
30+ Drops a student form a course.
31+ PATCH: Drop a given student. Check for student ban if coordinator made request
32+ """
3233 student = get_object_or_error (self .get_queryset (), pk = pk )
3334 is_coordinator = student .course .coordinator_set .filter (
3435 user = request .user
@@ -44,8 +45,10 @@ def drop(self, request, pk=None):
4445 student .course .whitelist .remove (student .user )
4546 student .save ()
4647 logger .info (
47- f"<Drop> User { log_str (request .user )} dropped Section"
48- f" { log_str (student .section )} for Student user { log_str (student .user )} "
48+ "<Drop> User %s dropped section %s for Student %s." ,
49+ log_str (request .user ),
50+ log_str (student .section ),
51+ log_str (student .user ),
4952 )
5053 # filter attendances and delete future attendances
5154 now = timezone .now ().astimezone (timezone .get_default_timezone ())
@@ -57,14 +60,21 @@ def drop(self, request, pk=None):
5760 )
5861 ).delete ()
5962 logger .info (
60- f"<Drop> Deleted { num_deleted } attendances for user"
61- f" { log_str (student .user )} in Section { log_str (student .section )} after"
62- f" { now .date ()} "
63+ "<Drop> Deleted %s attendances for user %s in Section %s after %s" ,
64+ num_deleted ,
65+ log_str (student .user ),
66+ log_str (student .section ),
67+ now .date (),
6368 )
6469 return Response (status = status .HTTP_204_NO_CONTENT )
6570
6671 @action (detail = True , methods = ["get" , "put" ])
6772 def attendances (self , request , pk = None ):
73+ """
74+ Method for updating attendances.
75+ GET: Gets the attendances for a student
76+ PUT: Updates the attendances for a student
77+ """
6878 student = get_object_or_error (self .get_queryset (), pk = pk )
6979 if request .method == "GET" :
7080 return Response (
@@ -86,21 +96,26 @@ def attendances(self, request, pk=None):
8696 )
8797 except ObjectDoesNotExist :
8898 logger .error (
89- "<Attendance:Failure> Could not record attendance for User"
90- f" { log_str (request .user )} , used non-existent attendance id"
91- f" { request .data ['id' ]} "
99+ (
100+ "<Attendance:Failure> Could not record attendance for User %s, used"
101+ " non-existent attendance ID %s"
102+ ),
103+ log_str (request .user ),
104+ request .data ["id" ],
92105 )
93106 return Response (status = status .HTTP_400_BAD_REQUEST )
94107
95108 if serializer .is_valid ():
96109 attendance = serializer .save ()
97110 logger .info (
98- f"<Attendance:Success> Attendance { log_str (attendance )} recorded for"
99- f" User { log_str (request .user )} "
111+ "<Attendance:Success> Attendance %s recorded for User %s" ,
112+ log_str (attendance ),
113+ log_str (request .user ),
100114 )
101115 return Response (status = status .HTTP_204_NO_CONTENT )
102116 logger .error (
103- "<Attendance:Failure> Could not record attendance for User"
104- f" { log_str (request .user )} , errors: { serializer .errors } "
117+ "<Attendance:Failure> Could not record attendance for User %s, errors: %s" ,
118+ log_str (request .user ),
119+ serializer .errors ,
105120 )
106121 return Response (serializer .errors , status = status .HTTP_422_UNPROCESSABLE_ENTITY )
0 commit comments