diff options
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 |
commit | c72cd53a2f43379b8119c972221ccdb162afc924 (patch) | |
tree | ac64e405acfbb95ed807cfb5d6468afb79c6e91f | |
parent | 38b9fcbf5be37b98cb1df4391b6514b31bc55070 (diff) | |
download | Ishtar-c72cd53a2f43379b8119c972221ccdb162afc924.tar.bz2 Ishtar-c72cd53a2f43379b8119c972221ccdb162afc924.zip |
✨ GIS API: get types API
-rw-r--r-- | ishtar_common/urls.py | 5 | ||||
-rw-r--r-- | ishtar_common/views_api.py | 23 |
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 |