From 5ad58f60602d957f511837fae69130d4898b5393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Cant=C3=B9?= Date: Mon, 8 Jan 2024 12:13:05 +0100 Subject: [PATCH] allow download of layers --- .../maps/migrations/0007_layer_downloadable.py | 17 +++++++++++++++++ metadata_catalogue/maps/models.py | 12 +++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 metadata_catalogue/maps/migrations/0007_layer_downloadable.py diff --git a/metadata_catalogue/maps/migrations/0007_layer_downloadable.py b/metadata_catalogue/maps/migrations/0007_layer_downloadable.py new file mode 100644 index 0000000..4c9e8c2 --- /dev/null +++ b/metadata_catalogue/maps/migrations/0007_layer_downloadable.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.8 on 2024-01-08 10:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("maps", "0006_alter_map_slug"), + ] + + operations = [ + migrations.AddField( + model_name="layer", + name="downloadable", + field=models.BooleanField(default=False), + ), + ] diff --git a/metadata_catalogue/maps/models.py b/metadata_catalogue/maps/models.py index 792062c..8f8b761 100644 --- a/metadata_catalogue/maps/models.py +++ b/metadata_catalogue/maps/models.py @@ -103,10 +103,16 @@ class Layer(models.Model): "maps.LayerGroup", on_delete=models.SET_NULL, related_name="layers", null=True, blank=True ) group_order = models.IntegerField(default=0) + downloadable = models.BooleanField(default=False) def __str__(self): return f"{self.slug} @ {self.map}" + def get_download_url(self, request): + if self.source and self.downloadable: + return self.source.get_download_url(request) + return None + def save(self, *args, **kwargs): if self.slug is None: if self.source: @@ -158,7 +164,7 @@ class Meta: def get_metadata(self, request): layers = [] for root in self.groups.order_by("order").all(): - layers.append(root.as_layer_tree()) + layers.append(root.as_layer_tree(request)) style_url = request.build_absolute_uri( reverse(f"{settings.MAPS_API_PREFIX}:map_style", kwargs={"map_slug": self.slug}) @@ -220,7 +226,7 @@ class LayerGroup(MP_Node): def __str__(self): return f"{self.name} @ {self.map}" - def as_layer_tree(self): + def as_layer_tree(self, request): current_group = {"id": f"group-{self.id}", "name": self.name, "children": [], "download": self.download_url} for sub_group in self.get_children(): current_group["children"].append(sub_group.as_layer_tree()) @@ -230,7 +236,7 @@ def as_layer_tree(self): { "id": layer.slug, "name": str(layer.name), - "download": None, + "download": layer.get_download_url(request), } )