summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2025-07-18 17:10:41 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-10-15 19:32:59 +0200
commitc72cd53a2f43379b8119c972221ccdb162afc924 (patch)
treeac64e405acfbb95ed807cfb5d6468afb79c6e91f
parent38b9fcbf5be37b98cb1df4391b6514b31bc55070 (diff)
downloadIshtar-c72cd53a2f43379b8119c972221ccdb162afc924.tar.bz2
Ishtar-c72cd53a2f43379b8119c972221ccdb162afc924.zip
✨ GIS API: get types API
-rw-r--r--ishtar_common/urls.py5
-rw-r--r--ishtar_common/views_api.py23
2 files changed, 28 insertions, 0 deletions
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 08474a869..f062700e4 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -381,6 +381,11 @@ urlpatterns = [
views_api.GISImportAPI.as_view(),
name="api-gis-sources",
),
+ path(
+ "api/gis/type/<app>/<model>/",
+ views_api.GISTypeAPI.as_view(),
+ name="api-gis-type",
+ ),
re_path(r"^profile(?:/(?P<pk>[0-9]+))?/$", views.ProfileEdit.as_view(), name="profile"),
re_path(
r"^save-search/(?P<app_label>[a-z-]+)/(?P<model>[a-z-]+)/$",
diff --git a/ishtar_common/views_api.py b/ishtar_common/views_api.py
index 052a764bc..a8d6b9648 100644
--- a/ishtar_common/views_api.py
+++ b/ishtar_common/views_api.py
@@ -17,11 +17,15 @@
# See the file COPYING for details.
+from django.apps import apps
+from django.http import Http404
+
from urllib.parse import unquote_plus
from rest_framework import serializers
from rest_framework.response import Response
+from ishtar_common.models_common import GeneralType
from ishtar_common.models_imports import ImporterType
from ishtar_common.rest import GISAPIView
from ishtar_common.views_item import get_item
@@ -54,6 +58,25 @@ class GISSourceAPI(GISAPIView):
return Response(serializer.data)
+class GenericTypeSerializer(serializers.Serializer):
+ label = serializers.CharField(max_length=500)
+ txt_idx = serializers.CharField(max_length=200)
+
+
+class GISTypeAPI(GISAPIView):
+ def get(self, request, app, model, format=None):
+ try:
+ model = apps.get_model(app, model)
+ except LookupError:
+ raise Http404()
+ if not issubclass(model, GeneralType):
+ raise Http404()
+ serializer = GenericTypeSerializer(
+ model.objects.filter(available=True), many=True
+ )
+ return Response(serializer.data)
+
+
class GISImportAPI(GISAPIView):
PAGE_LEN = 50