Skip to content

Commit e8a5657

Browse files
committed
Improve validation and tests
1 parent 123782e commit e8a5657

File tree

4 files changed

+30
-8
lines changed

4 files changed

+30
-8
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ coverage.xml
5454
*.log
5555
.static_storage/
5656
.media/
57+
.media/raster/*
5758
local_settings.py
5859

5960
# Flask stuff:

media/raster/cog.tif

-781 KB
Binary file not shown.

vbos/datasets/models.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.contrib.gis.db import models
2+
from django.core.validators import FileExtensionValidator
23
from django.db.models.fields.files import default_storage
34
from django.db.models.signals import pre_delete
45
from django.dispatch import receiver
@@ -7,7 +8,14 @@
78
class RasterFile(models.Model):
89
name = models.CharField(max_length=155)
910
created = models.DateTimeField(auto_now_add=True)
10-
file = models.FileField(upload_to="raster/")
11+
file = models.FileField(
12+
upload_to="raster/",
13+
validators=[
14+
FileExtensionValidator(
15+
allowed_extensions=["tiff", "tif", "geotiff", "gtiff"]
16+
)
17+
],
18+
)
1119

1220
def __str__(self):
1321
return self.name
Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,44 @@
11
from django.db.models.deletion import ProtectedError
22
from django.test import TestCase
3+
from django.core.files.uploadedfile import SimpleUploadedFile
4+
from django.core.exceptions import ValidationError
35

46
from vbos.datasets.models import RasterDataset, RasterFile
7+
from genericpath import exists
58

69

710
class TestRasterModels(TestCase):
811
def setUp(self):
9-
self.r_1 = RasterFile.objects.create(
10-
name="Rainfall COG", file="raster/rainfall.tiff"
12+
self.valid_file = SimpleUploadedFile(
13+
"rainfall.tif", b"file_content", content_type="image/tiff"
1114
)
15+
self.r_1 = RasterFile.objects.create(name="Rainfall COG", file=self.valid_file)
1216
self.r_2 = RasterFile.objects.create(
1317
name="Coastline COG", file="raster/coastline.tiff"
1418
)
1519
self.dataset = RasterDataset.objects.create(name="Rainfall", file=self.r_1)
1620

17-
def test_deletion_restriction(self):
21+
def test_deletion(self):
22+
# RasterFile can't be deleted if it's associates with a dataset
1823
with self.assertRaises(ProtectedError):
1924
self.r_1.delete()
20-
self.r_2.delete()
21-
self.assertEqual(RasterFile.objects.count(), 1)
22-
23-
def test_deletion(self):
25+
# modify dataset
2426
self.dataset.file = self.r_2
2527
self.dataset.save()
28+
# delete file
2629
self.r_1.delete()
2730
self.assertEqual(RasterFile.objects.count(), 1)
31+
# delete dataset
2832
self.dataset.delete()
2933
self.assertEqual(RasterDataset.objects.count(), 0)
34+
# delete remaining file
3035
self.r_2.delete()
3136
self.assertEqual(RasterFile.objects.count(), 0)
37+
38+
# test file extension validation
39+
invalid_file = SimpleUploadedFile(
40+
"test.jpg", b"file_content", content_type="image/jpeg"
41+
)
42+
raster = RasterFile(name="Test", file=invalid_file)
43+
with self.assertRaises(ValidationError):
44+
raster.full_clean()

0 commit comments

Comments
 (0)