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
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Generated by Django 5.2.5 on 2025-10-09 12:30

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("datasets", "0012_tabulardataset_unit"),
]

operations = [
migrations.AlterField(
model_name="rasterdataset",
name="name",
field=models.CharField(max_length=155),
),
migrations.AlterField(
model_name="tabulardataset",
name="name",
field=models.CharField(max_length=155),
),
migrations.AlterField(
model_name="vectordataset",
name="name",
field=models.CharField(max_length=155),
),
migrations.AlterUniqueTogether(
name="rasterdataset",
unique_together={("name", "type")},
),
migrations.AlterUniqueTogether(
name="tabulardataset",
unique_together={("name", "type")},
),
migrations.AlterUniqueTogether(
name="vectordataset",
unique_together={("name", "type")},
),
]
9 changes: 6 additions & 3 deletions vbos/datasets/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def delete_raster_file(sender, instance, **kwargs):


class RasterDataset(models.Model):
name = models.CharField(max_length=155, unique=True)
name = models.CharField(max_length=155)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
cluster = models.ForeignKey(
Expand All @@ -97,10 +97,11 @@ def __str__(self):

class Meta:
ordering = ["id"]
unique_together = ["name", "type"]


class VectorDataset(models.Model):
name = models.CharField(max_length=155, unique=True)
name = models.CharField(max_length=155, unique=False)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
cluster = models.ForeignKey(
Expand All @@ -115,6 +116,7 @@ def __str__(self):

class Meta:
ordering = ["id"]
unique_together = ["name", "type"]


class VectorItem(models.Model):
Expand All @@ -138,7 +140,7 @@ class Meta:


class TabularDataset(models.Model):
name = models.CharField(max_length=155, unique=True)
name = models.CharField(max_length=155, unique=False)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
cluster = models.ForeignKey(
Expand All @@ -154,6 +156,7 @@ def __str__(self):

class Meta:
ordering = ["id"]
unique_together = ["name", "type"]


class TabularItem(models.Model):
Expand Down
137 changes: 137 additions & 0 deletions vbos/datasets/test/test_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
from django.db.models.deletion import ProtectedError
from django.db.utils import IntegrityError
from django.test import TestCase
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.exceptions import ValidationError

from vbos.datasets.models import (
Cluster,
RasterDataset,
RasterFile,
TabularDataset,
VectorDataset,
)


class TestRasterModels(TestCase):
def setUp(self):
self.valid_file = SimpleUploadedFile(
"rainfall.tiff", b"file_content", content_type="image/tiff"
)
self.r_1 = RasterFile.objects.create(name="Rainfall COG", file=self.valid_file)
self.r_2 = RasterFile.objects.create(
name="Coastline COG", file="raster/coastline.tiff"
)
self.dataset = RasterDataset.objects.create(
name="Rainfall",
cluster=Cluster.objects.create(name="Environment"),
file=self.r_1,
)

def test_deletion(self):
# RasterFile can't be deleted if it's associates with a dataset
with self.assertRaises(ProtectedError):
self.r_1.delete()

# name should be unique
raster = RasterFile(name="Rainfall COG 2", file="raster/coastline.tiff")
with self.assertRaises(ValidationError):
raster.full_clean()

# file path should be unique
raster = RasterFile(name="Rainfall COG", file="newfile.tif")
with self.assertRaises(ValidationError):
raster.full_clean()

# modify dataset
self.dataset.file = self.r_2
self.dataset.save()
# delete file
self.r_1.delete()
self.assertEqual(RasterFile.objects.count(), 1)
# delete dataset
self.dataset.delete()
self.assertEqual(RasterDataset.objects.count(), 0)
# delete remaining file
self.r_2.delete()
self.assertEqual(RasterFile.objects.count(), 0)

# test file extension validation
invalid_file = SimpleUploadedFile(
"test.jpg", b"file_content", content_type="image/jpeg"
)
raster = RasterFile(name="Test", file=invalid_file)
with self.assertRaises(ValidationError):
raster.full_clean()

RasterFile.objects.all().delete()

def test_unique_name_type(self):
self.cluster = Cluster.objects.create(name="Administrative")
r_2 = RasterFile.objects.create(
name="Population Density COG", file="raster/pop.tiff"
)
RasterDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
file=r_2,
)
RasterDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
file=r_2,
type="estimated_damage",
)
with self.assertRaises(IntegrityError):
RasterDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
file=r_2,
)


class TestTabularDatasetModel(TestCase):
def test_unique_name_type(self):
self.cluster = Cluster.objects.create(name="Administrative")
TabularDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
)
TabularDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
type="estimated_damage",
)
with self.assertRaises(IntegrityError):
TabularDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
)


class TestVectorDatasetModel(TestCase):
def test_unique_name_type(self):
self.cluster = Cluster.objects.create(name="Administrative")
VectorDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
)
VectorDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
type="estimated_damage",
)
with self.assertRaises(IntegrityError):
VectorDataset.objects.create(
name="Population",
cluster=self.cluster,
source="Government",
)
61 changes: 0 additions & 61 deletions vbos/datasets/test/test_raster_models.py

This file was deleted.