Skip to content

Commit 523e894

Browse files
authored
[Backend] Add submitted before/after for challenge submissions (#4456)
* [Documentation] Fix host challenge doc * Add submitted before and after filters to submission API * Revert extra change
1 parent 39e2f2e commit 523e894

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

apps/jobs/views.py

+30-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from django.core.files.uploadedfile import SimpleUploadedFile
1919
from django.db import transaction, IntegrityError
2020
from django.db.models import Count
21-
from django.utils import timezone
21+
from django.utils import dateparse, timezone
2222

2323
from 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

Comments
 (0)