Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/apps/api/serializers/datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,19 @@ def validate_is_public(self, is_public):
return is_public

def validate(self, attrs):
# Check for duplicate name
if 'name' in attrs:
existing_lookup = Data.objects.filter(name=attrs['name'], created_by=self.context['request'].user)
if self.instance:
existing_lookup = existing_lookup.exclude(pk=self.instance.pk)
if existing_lookup.exists():
raise ValidationError("You already have a dataset by this name, please delete that dataset or rename this one")

# Validate file type
request_sassy_file_name = attrs.get('request_sassy_file_name')
if request_sassy_file_name and not request_sassy_file_name.endswith('.zip'):
raise ValidationError("Only zip files are allowed!")

return attrs

def create(self, validated_data):
Expand Down
1 change: 0 additions & 1 deletion src/apps/api/serializers/submissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

from api.mixins import DefaultUserCreateMixin
from api.serializers import leaderboards
# from api.serializers.profiles import SimpleOrganizationSerializer
from api.serializers.tasks import TaskSerializer
from api.serializers.submission_leaderboard import SubmissionScoreSerializer
from competitions.models import Submission, SubmissionDetails, CompetitionParticipant, Phase
Expand Down
28 changes: 22 additions & 6 deletions src/apps/api/tests/test_datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ def test_dataset_api_checks_duplicate_names_for_same_user(self):
resp = self.client.post(reverse("data-list"), {
'name': 'Test!',
'type': Data.COMPETITION_BUNDLE,
'request_sassy_file_name': faker.file_name(),
'file_name': faker.file_name(),
'request_sassy_file_name': faker.file_name(extension='.zip'),
'file_name': faker.file_name(extension='.zip'),
'file_size': 1000,
})

Expand All @@ -42,7 +42,7 @@ def test_dataset_api_checks_duplicate_names_for_same_user(self):
resp = self.client.put(reverse("data-detail", args=(self.existing_dataset.pk,)), {
'name': 'Test!',
'type': Data.COMPETITION_BUNDLE,
'request_sassy_file_name': faker.file_name(),
'request_sassy_file_name': faker.file_name(extension='.zip'),
'file_size': 1000,
})
assert resp.status_code == 200
Expand Down Expand Up @@ -77,8 +77,8 @@ def test_dataset_api_check_quota(self):
resp = self.client.post(reverse("data-list"), {
'name': 'new-file-test',
'type': Data.COMPETITION_BUNDLE,
'request_sassy_file_name': faker.file_name(),
'file_name': faker.file_name(),
'request_sassy_file_name': faker.file_name(extension='.zip'),
'file_name': faker.file_name(extension='.zip'),
'file_size': file_size,
})

Expand All @@ -90,12 +90,28 @@ def test_dataset_api_check_quota(self):
resp = self.client.post(reverse("data-list"), {
'name': 'new-file-test',
'type': Data.COMPETITION_BUNDLE,
'request_sassy_file_name': faker.file_name(),
'request_sassy_file_name': faker.file_name(extension='.zip'),
'file_name': faker.file_name(),
'file_size': file_size,
})
assert resp.status_code == 201

def test_dataset_api_rejects_non_zip_files(self):
self.client.login(username='creator', password='creator')

# Attempt to upload a non-zip file
resp = self.client.post(reverse("data-list"), {
'name': 'non-zip-test',
'type': Data.COMPETITION_BUNDLE,
'request_sassy_file_name': faker.file_name(extension='.py'),
'file_name': faker.file_name(extension='.py'),
'file_size': 1000,
})

assert resp.status_code == 400
assert "non_field_errors" in resp.data
assert resp.data["non_field_errors"][0] == "Only zip files are allowed!"


class DatasetDetailTests(TestCase):
def setUp(self):
Expand Down
Loading