Add download AC submissions

This commit is contained in:
cuom1999 2020-07-26 00:11:03 -05:00
parent e8ef46ffcf
commit 859c8f62ed
3 changed files with 27 additions and 1 deletions

View file

@ -119,6 +119,7 @@ urlpatterns = [
url(r'^/pdf$', problem.ProblemPdfView.as_view(), name='problem_pdf'), url(r'^/pdf$', problem.ProblemPdfView.as_view(), name='problem_pdf'),
url(r'^/pdf/(?P<language>[a-z-]+)$', problem.ProblemPdfView.as_view(), name='problem_pdf'), url(r'^/pdf/(?P<language>[a-z-]+)$', problem.ProblemPdfView.as_view(), name='problem_pdf'),
url(r'^/clone', problem.ProblemClone.as_view(), name='problem_clone'), url(r'^/clone', problem.ProblemClone.as_view(), name='problem_clone'),
url(r'^/downloadAC$', problem.download_submissions, name='download_submissions'),
url(r'^/submit$', problem.problem_submit, name='problem_submit'), url(r'^/submit$', problem.problem_submit, name='problem_submit'),
url(r'^/resubmit/(?P<submission>\d+)$', problem.problem_submit, name='problem_submit'), url(r'^/resubmit/(?P<submission>\d+)$', problem.problem_submit, name='problem_submit'),

View file

@ -4,6 +4,7 @@ import shutil
from datetime import timedelta from datetime import timedelta
from operator import itemgetter from operator import itemgetter
from random import randrange from random import randrange
import zipfile, tempfile
from django.conf import settings from django.conf import settings
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@ -676,4 +677,22 @@ class ProblemClone(ProblemMixin, PermissionRequiredMixin, TitleMixin, SingleObje
problem.language_limits.set(language_limits) problem.language_limits.set(language_limits)
problem.types.set(types) problem.types.set(types)
return HttpResponseRedirect(reverse('admin:judge_problem_change', args=(problem.id,))) return HttpResponseRedirect(reverse('admin:judge_problem_change', args=(problem.id,)))
def download_submissions(request, problem):
submissions = Submission.objects.filter(problem__code=problem, result='AC')
with tempfile.SpooledTemporaryFile() as tmp:
with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as archive:
for submission in submissions:
file_name = str(submission.id) + '.' + str(submission.language.key)
archive.writestr(file_name, submission.source.source)
# Reset file pointer
tmp.seek(0)
# Write file data to response
response = HttpResponse(tmp.read(), content_type='application/x-zip-compressed')
response['Content-Disposition'] = 'attachment; filename="%s"' % (str(problem) + '_submissions.zip')
return response

View file

@ -126,6 +126,12 @@
{% endif %} {% endif %}
<div><a href="{{ url('chronological_submissions', problem.code) }}">{{ _('All submissions') }}</a></div> <div><a href="{{ url('chronological_submissions', problem.code) }}">{{ _('All submissions') }}</a></div>
<div><a href="{{ url('ranked_submissions', problem.code) }}">{{ _('Best submissions') }}</a></div> <div><a href="{{ url('ranked_submissions', problem.code) }}">{{ _('Best submissions') }}</a></div>
{% if request.user.is_superuser %}
<div>
<a href="{{ url('download_submissions', problem.code) }}"> {{ _('Download AC submissions') }} </a>
</div>
{% endif %}
{% if editorial and editorial.is_public and {% if editorial and editorial.is_public and
not (request.user.is_authenticated and request.profile.current_contest) %} not (request.user.is_authenticated and request.profile.current_contest) %}
<hr> <hr>