Skip to content

Commit

Permalink
use slug instead of uuid for maps
Browse files Browse the repository at this point in the history
  • Loading branch information
nicokant committed Dec 18, 2023
1 parent fa7a20b commit c1da98c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 33 deletions.
14 changes: 6 additions & 8 deletions metadata_catalogue/maps/api.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from uuid import UUID

from ninja import Router

from . import models, schema
Expand All @@ -9,26 +7,26 @@

# https://github.com/vitalik/django-ninja/issues/803 - by_alias is needed for dashed properties
@maps_router.get(
"/maps/{map_uuid}/metadata/",
"/maps/{map_slug}/metadata/",
response=schema.MapMetadata,
url_name="map_metadata",
by_alias=True,
exclude_none=True,
)
def get_map_metadata(request, map_uuid: UUID):
def get_map_metadata(request, map_slug: str):
try:
m = models.Map.objects.get(uuid=map_uuid)
m = models.Map.objects.get(slug=map_slug)
return m.get_metadata(request)
except models.Map.DoesNotExist:
return {}


@maps_router.get(
"/maps/{map_uuid}/style/", response=schema.MapStyle, url_name="map_style", by_alias=True, exclude_none=True
"/maps/{map_slug}/style/", response=schema.MapStyle, url_name="map_style", by_alias=True, exclude_none=True
)
def get_map_style(request, map_uuid: UUID):
def get_map_style(request, map_slug: str):
try:
m = models.Map.objects.get(uuid=map_uuid)
m = models.Map.objects.get(slug=map_slug)
return m.get_style(request)
except models.Map.DoesNotExist:
return {}
9 changes: 4 additions & 5 deletions metadata_catalogue/maps/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
# Generated by Django 4.2.8 on 2023-12-18 08:16
# Generated by Django 4.2.8 on 2023-12-18 14:06

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import metadata_catalogue.maps.models
import uuid


class Migration(migrations.Migration):
Expand Down Expand Up @@ -36,7 +35,7 @@ class Migration(migrations.Migration):
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("name", models.CharField(max_length=250)),
("slug", models.SlugField(null=True)),
("slug", models.SlugField()),
("extra", models.JSONField(blank=True, default=metadata_catalogue.maps.models.empty_json)),
("style", models.JSONField(blank=True, default=metadata_catalogue.maps.models.empty_json)),
(
Expand Down Expand Up @@ -129,9 +128,9 @@ class Migration(migrations.Migration):
fields=[
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("title", models.CharField(max_length=150)),
("slug", models.SlugField()),
("subtitle", models.CharField(blank=True, max_length=250, null=True)),
("description", models.TextField(blank=True)),
("uuid", models.UUIDField(default=uuid.uuid4)),
("zoom", models.IntegerField(blank=True, null=True)),
("extra", models.JSONField(blank=True, default=metadata_catalogue.maps.models.empty_json)),
(
Expand Down Expand Up @@ -198,7 +197,7 @@ class Migration(migrations.Migration):
),
migrations.AddConstraint(
model_name="map",
constraint=models.UniqueConstraint(models.F("uuid"), name="map unique uuid"),
constraint=models.UniqueConstraint(models.F("slug"), name="map unique slug"),
),
migrations.AddConstraint(
model_name="layersource",
Expand Down
38 changes: 18 additions & 20 deletions metadata_catalogue/maps/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import uuid

from django.db import models
from django.urls import reverse
from polymorphic.models import PolymorphicModel
Expand All @@ -19,18 +17,15 @@ def empty_json():

class LayerSource(PolymorphicModel):
name = models.CharField(max_length=250)
slug = models.SlugField(null=True)
slug = models.SlugField()
extra = models.JSONField(default=empty_json, blank=True)
owner = models.ForeignKey("users.User", on_delete=models.SET_NULL, null=True, blank=True)
style = models.JSONField(default=empty_json, blank=True)

def get_slug(self):
if self.slug:
return self.slug
else:
self.slug = slugify(self.name)
self.save(update_fields=["slug"])
return self.slug
def save(self, *args, **kwargs):
if self.slug is None:
self.slug = slugify(self.title)
super().save(*args, **kwargs)

@property
def type(self):
Expand Down Expand Up @@ -103,19 +98,24 @@ def __str__(self):

class Map(models.Model):
title = models.CharField(max_length=150)
slug = models.SlugField()
subtitle = models.CharField(max_length=250, null=True, blank=True)
description = models.TextField(blank=True)
uuid = models.UUIDField(default=uuid.uuid4)
# center =
zoom = models.IntegerField(null=True, blank=True)
extra = models.JSONField(default=empty_json, blank=True)
owner = models.ForeignKey("users.User", on_delete=models.SET_NULL, null=True, blank=True)

def save(self, *args, **kwargs):
if self.slug is None:
self.slug = slugify(self.title)
super().save(*args, **kwargs)

def __str__(self):
return self.title

class Meta:
constraints = [models.UniqueConstraint("uuid", name="map unique uuid")]
constraints = [models.UniqueConstraint("slug", name="map unique slug")]

def get_metadata(self, request):
layers = []
Expand All @@ -124,7 +124,7 @@ def get_metadata(self, request):

return {
"style": request.build_absolute_uri(
reverse(f"{settings.MAPS_API_PREFIX}:map_style", kwargs={"map_uuid": self.uuid})
reverse(f"{settings.MAPS_API_PREFIX}:map_style", kwargs={"map_slug": self.slug})
),
"subtitle": self.subtitle,
"description": self.description,
Expand All @@ -138,7 +138,7 @@ def get_style(self, request):
for style in self.layers_style.order_by("order"):
source = LayerSource.objects.filter(id=style.source_id).get_real_instances()[0] if style.source else None
if source and source.type:
sources[source.get_slug()] = {
sources[source.slug] = {
"type": source.type,
"url": source.get_source_url(request),
"attribution": source.attribution,
Expand All @@ -147,12 +147,10 @@ def get_style(self, request):

layers.append(
{
"id": source.get_slug(),
"id": source.slug,
"type": source.type,
"source": None if not source or not source.type else source.get_slug(),
"source-layer": None
if not source or not source.type or source.type != "vector"
else source.get_slug(),
"source": None if not source or not source.type else source.slug,
"source-layer": None if not source or not source.type or source.type != "vector" else source.slug,
**source.style,
**style.style,
}
Expand Down Expand Up @@ -194,7 +192,7 @@ def as_layer_tree(self):
for layer_item in self.layer_items.select_related("layer").order_by("-order", "-layer__name"):
current_group["children"].append(
{
"id": layer_item.layer.get_slug(),
"id": layer_item.layer.slug,
"name": str(layer_item.layer.name),
"download": None,
}
Expand Down

0 comments on commit c1da98c

Please sign in to comment.