Skip to content

Commit 30f5fa4

Browse files
author
pixl.dt
committed
Fix for issue #123
Make the testrun controller check whether the input file is a zip by extension only and saves that information in the model. Change a downloaded zipped input file's name, so it has a .zip extension.
1 parent 40b2df4 commit 30f5fa4

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
lines changed

oioioi/testrun/controllers.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import shutil
22
import tempfile
3-
from zipfile import is_zipfile
43

54
from django import forms
65
from django.conf import settings
@@ -209,6 +208,8 @@ def create_testrun(
209208
# pylint: disable=maybe-no-member
210209
submission.source_file.save(submit_file.name, submit_file)
211210
input_file = form_data['input']
211+
# Same method as in validate_zip
212+
submission.input_is_zip = input_file.name.upper().endswith(".ZIP")
212213
submission.input_file.save(input_file.name, input_file)
213214
if commit:
214215
submission.save()
@@ -279,7 +280,7 @@ def render_submission(self, request, submission):
279280
context={
280281
'submission': submission_template_context(request, sbm_testrun),
281282
'supported_extra_args': self.get_supported_extra_args(submission),
282-
'input_is_zip': is_zipfile(sbm_testrun.input_file),
283+
'input_is_zip': sbm_testrun.input_is_zip,
283284
},
284285
)
285286

@@ -294,9 +295,7 @@ def _render_testrun_report(
294295

295296
input_is_zip = False
296297
if testrun_report:
297-
input_is_zip = is_zipfile(
298-
testrun_report.submission_report.submission.programsubmission.testrunprogramsubmission.input_file
299-
)
298+
input_is_zip = testrun_report.submission_report.submission.programsubmission.testrunprogramsubmission.input_is_zip
300299

301300
return render_to_string(
302301
template,
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.16 on 2022-12-20 19:57
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('testrun', '0008_auto_20201214_0012'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='testrunprogramsubmission',
15+
name='input_is_zip',
16+
field=models.BooleanField(default=False),
17+
),
18+
]

oioioi/testrun/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def make_custom_input_filename(instance, filename):
2727
class TestRunProgramSubmission(ProgramSubmission):
2828
__test__ = False
2929
input_file = FileField(upload_to=make_custom_input_filename)
30+
input_is_zip = models.BooleanField(default=False)
3031

3132

3233
def make_custom_output_filename(instance, filename):

oioioi/testrun/views.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ def download_input_file_view(request, submission_id):
127127
submission = get_submission_or_error(
128128
request, submission_id, TestRunProgramSubmission
129129
)
130-
return stream_file(submission.input_file, name='input.in')
130+
name='input.in'
131+
if submission.input_is_zip:
132+
name+='.zip'
133+
return stream_file(submission.input_file, name=name)
131134

132135

133136
@enforce_condition(contest_exists & can_enter_contest)

0 commit comments

Comments
 (0)