diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-07-18 17:10:41 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-07-21 15:10:29 +0200 |
commit | d1435a3d73765fa5e6822fc86bd4d77780641974 (patch) | |
tree | 55ba7c47e5aaddd390f8209993140823f6473fe7 /ishtar_common | |
parent | f713d1010527d171dff95c53f242c009e2b063f8 (diff) | |
download | Ishtar-d1435a3d73765fa5e6822fc86bd4d77780641974.tar.bz2 Ishtar-d1435a3d73765fa5e6822fc86bd4d77780641974.zip |
✨ GIS API: get types API
Diffstat (limited to 'ishtar_common')
-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 |