Skip to content

Commit f4e84dd

Browse files
authored
Merge pull request #2273 from codalab/submission_zip
Submission Upload - uploading non zip error improved
2 parents 7a3283d + 634d0f9 commit f4e84dd

3 files changed

Lines changed: 29 additions & 7 deletions

File tree

src/apps/api/serializers/datasets.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,19 @@ def validate_is_public(self, is_public):
4646
return is_public
4747

4848
def validate(self, attrs):
49+
# Check for duplicate name
4950
if 'name' in attrs:
5051
existing_lookup = Data.objects.filter(name=attrs['name'], created_by=self.context['request'].user)
5152
if self.instance:
5253
existing_lookup = existing_lookup.exclude(pk=self.instance.pk)
5354
if existing_lookup.exists():
5455
raise ValidationError("You already have a dataset by this name, please delete that dataset or rename this one")
56+
57+
# Validate file type
58+
request_sassy_file_name = attrs.get('request_sassy_file_name')
59+
if request_sassy_file_name and not request_sassy_file_name.endswith('.zip'):
60+
raise ValidationError("Only zip files are allowed!")
61+
5562
return attrs
5663

5764
def create(self, validated_data):

src/apps/api/serializers/submissions.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
from api.mixins import DefaultUserCreateMixin
1010
from api.serializers import leaderboards
11-
# from api.serializers.profiles import SimpleOrganizationSerializer
1211
from api.serializers.tasks import TaskSerializer
1312
from api.serializers.submission_leaderboard import SubmissionScoreSerializer
1413
from competitions.models import Submission, SubmissionDetails, CompetitionParticipant, Phase

src/apps/api/tests/test_datasets.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ def test_dataset_api_checks_duplicate_names_for_same_user(self):
3030
resp = self.client.post(reverse("data-list"), {
3131
'name': 'Test!',
3232
'type': Data.COMPETITION_BUNDLE,
33-
'request_sassy_file_name': faker.file_name(),
34-
'file_name': faker.file_name(),
33+
'request_sassy_file_name': faker.file_name(extension='.zip'),
34+
'file_name': faker.file_name(extension='.zip'),
3535
'file_size': 1000,
3636
})
3737

@@ -42,7 +42,7 @@ def test_dataset_api_checks_duplicate_names_for_same_user(self):
4242
resp = self.client.put(reverse("data-detail", args=(self.existing_dataset.pk,)), {
4343
'name': 'Test!',
4444
'type': Data.COMPETITION_BUNDLE,
45-
'request_sassy_file_name': faker.file_name(),
45+
'request_sassy_file_name': faker.file_name(extension='.zip'),
4646
'file_size': 1000,
4747
})
4848
assert resp.status_code == 200
@@ -77,8 +77,8 @@ def test_dataset_api_check_quota(self):
7777
resp = self.client.post(reverse("data-list"), {
7878
'name': 'new-file-test',
7979
'type': Data.COMPETITION_BUNDLE,
80-
'request_sassy_file_name': faker.file_name(),
81-
'file_name': faker.file_name(),
80+
'request_sassy_file_name': faker.file_name(extension='.zip'),
81+
'file_name': faker.file_name(extension='.zip'),
8282
'file_size': file_size,
8383
})
8484

@@ -90,12 +90,28 @@ def test_dataset_api_check_quota(self):
9090
resp = self.client.post(reverse("data-list"), {
9191
'name': 'new-file-test',
9292
'type': Data.COMPETITION_BUNDLE,
93-
'request_sassy_file_name': faker.file_name(),
93+
'request_sassy_file_name': faker.file_name(extension='.zip'),
9494
'file_name': faker.file_name(),
9595
'file_size': file_size,
9696
})
9797
assert resp.status_code == 201
9898

99+
def test_dataset_api_rejects_non_zip_files(self):
100+
self.client.login(username='creator', password='creator')
101+
102+
# Attempt to upload a non-zip file
103+
resp = self.client.post(reverse("data-list"), {
104+
'name': 'non-zip-test',
105+
'type': Data.COMPETITION_BUNDLE,
106+
'request_sassy_file_name': faker.file_name(extension='.py'),
107+
'file_name': faker.file_name(extension='.py'),
108+
'file_size': 1000,
109+
})
110+
111+
assert resp.status_code == 400
112+
assert "non_field_errors" in resp.data
113+
assert resp.data["non_field_errors"][0] == "Only zip files are allowed!"
114+
99115

100116
class DatasetDetailTests(TestCase):
101117
def setUp(self):

0 commit comments

Comments
 (0)