1
- import datetime
2
-
3
1
from django .core .exceptions import ObjectDoesNotExist
4
2
from django .db .models import Q
5
3
from django .utils import timezone
6
4
from rest_framework import status , viewsets
7
5
from rest_framework .decorators import action
8
6
from rest_framework .exceptions import PermissionDenied
9
7
from rest_framework .response import Response
10
- from scheduler .models import Attendance , SectionOccurrence
11
8
12
9
from ..models import Student
13
10
from ..serializers import AttendanceSerializer , StudentSerializer
@@ -29,6 +26,10 @@ def get_queryset(self):
29
26
30
27
@action (detail = True , methods = ["patch" ])
31
28
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
+ """
32
33
student = get_object_or_error (self .get_queryset (), pk = pk )
33
34
is_coordinator = student .course .coordinator_set .filter (
34
35
user = request .user
@@ -44,8 +45,10 @@ def drop(self, request, pk=None):
44
45
student .course .whitelist .remove (student .user )
45
46
student .save ()
46
47
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 ),
49
52
)
50
53
# filter attendances and delete future attendances
51
54
now = timezone .now ().astimezone (timezone .get_default_timezone ())
@@ -57,14 +60,21 @@ def drop(self, request, pk=None):
57
60
)
58
61
).delete ()
59
62
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 (),
63
68
)
64
69
return Response (status = status .HTTP_204_NO_CONTENT )
65
70
66
71
@action (detail = True , methods = ["get" , "put" ])
67
72
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
+ """
68
78
student = get_object_or_error (self .get_queryset (), pk = pk )
69
79
if request .method == "GET" :
70
80
return Response (
@@ -86,21 +96,26 @@ def attendances(self, request, pk=None):
86
96
)
87
97
except ObjectDoesNotExist :
88
98
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" ],
92
105
)
93
106
return Response (status = status .HTTP_400_BAD_REQUEST )
94
107
95
108
if serializer .is_valid ():
96
109
attendance = serializer .save ()
97
110
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 ),
100
114
)
101
115
return Response (status = status .HTTP_204_NO_CONTENT )
102
116
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 ,
105
120
)
106
121
return Response (serializer .errors , status = status .HTTP_422_UNPROCESSABLE_ENTITY )
0 commit comments