18
18
from django .core .files .uploadedfile import SimpleUploadedFile
19
19
from django .db import transaction , IntegrityError
20
20
from django .db .models import Count
21
- from django .utils import timezone
21
+ from django .utils import dateparse , timezone
22
22
23
23
from rest_framework_expiring_authtoken .authentication import (
24
24
ExpiringTokenAuthentication ,
@@ -2004,6 +2004,8 @@ def get_submissions_for_challenge(request, challenge_pk):
2004
2004
return Response (response_data , status = status .HTTP_400_BAD_REQUEST )
2005
2005
2006
2006
submission_status = request .query_params .get ("status" , None )
2007
+ submitted_after = request .query_params .get ("submitted_after" , None )
2008
+ submitted_before = request .query_params .get ("submitted_before" , None )
2007
2009
2008
2010
valid_submission_status = [
2009
2011
Submission .SUBMITTED ,
@@ -2015,17 +2017,41 @@ def get_submissions_for_challenge(request, challenge_pk):
2015
2017
Submission .FINISHED ,
2016
2018
Submission .SUBMITTING ,
2017
2019
]
2018
-
2019
- if submission_status not in valid_submission_status :
2020
+ if submission_status and submission_status not in valid_submission_status :
2020
2021
response_data = {
2021
2022
"error" : "Invalid submission status {}" .format (submission_status )
2022
2023
}
2023
2024
return Response (response_data , status = status .HTTP_400_BAD_REQUEST )
2024
2025
2026
+ # expected format: YYYY-MM-DDTHH:MM:SSZ
2027
+ if submitted_after :
2028
+ submitted_after = dateparse .parse_datetime (submitted_after )
2029
+ if not submitted_after :
2030
+ response_data = {
2031
+ "error" : "Invalid datetime format for 'submitted_after'"
2032
+ }
2033
+ return Response (response_data , status = status .HTTP_400_BAD_REQUEST )
2034
+
2035
+ if submitted_before :
2036
+ submitted_before = dateparse .parse_datetime (submitted_before )
2037
+ if not submitted_before :
2038
+ response_data = {
2039
+ "error" : "Invalid datetime format for 'submitted_before'"
2040
+ }
2041
+ return Response (response_data , status = status .HTTP_400_BAD_REQUEST )
2025
2042
submissions_done_in_challenge = Submission .objects .filter (
2026
- challenge_phase__challenge = challenge .id , status = submission_status
2043
+ challenge_phase__challenge = challenge .id
2027
2044
)
2028
2045
2046
+ if submission_status :
2047
+ submissions_done_in_challenge = submissions_done_in_challenge .filter (status = submission_status )
2048
+
2049
+ if submitted_after :
2050
+ submissions_done_in_challenge = submissions_done_in_challenge .filter (submitted_at__gt = submitted_after )
2051
+
2052
+ if submitted_before :
2053
+ submissions_done_in_challenge = submissions_done_in_challenge .filter (submitted_at__lt = submitted_before )
2054
+
2029
2055
serializer = SubmissionSerializer (
2030
2056
submissions_done_in_challenge , many = True , context = {"request" : request }
2031
2057
)
0 commit comments