1818from django .core .files .uploadedfile import SimpleUploadedFile
1919from django .db import transaction , IntegrityError
2020from django .db .models import Count
21- from django .utils import timezone
21+ from django .utils import dateparse , timezone
2222
2323from rest_framework_expiring_authtoken .authentication import (
2424 ExpiringTokenAuthentication ,
@@ -2004,6 +2004,8 @@ def get_submissions_for_challenge(request, challenge_pk):
20042004 return Response (response_data , status = status .HTTP_400_BAD_REQUEST )
20052005
20062006 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 )
20072009
20082010 valid_submission_status = [
20092011 Submission .SUBMITTED ,
@@ -2015,17 +2017,41 @@ def get_submissions_for_challenge(request, challenge_pk):
20152017 Submission .FINISHED ,
20162018 Submission .SUBMITTING ,
20172019 ]
2018-
2019- if submission_status not in valid_submission_status :
2020+ if submission_status and submission_status not in valid_submission_status :
20202021 response_data = {
20212022 "error" : "Invalid submission status {}" .format (submission_status )
20222023 }
20232024 return Response (response_data , status = status .HTTP_400_BAD_REQUEST )
20242025
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 )
20252042 submissions_done_in_challenge = Submission .objects .filter (
2026- challenge_phase__challenge = challenge .id , status = submission_status
2043+ challenge_phase__challenge = challenge .id
20272044 )
20282045
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+
20292055 serializer = SubmissionSerializer (
20302056 submissions_done_in_challenge , many = True , context = {"request" : request }
20312057 )
0 commit comments