From da30e4a7383e769e9838b198bb431f237d56694c Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 22 Jul 2025 10:52:02 +0200 Subject: ✨ GIS API: import data from QGIS view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/views_api.py | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) (limited to 'ishtar_common/views_api.py') diff --git a/ishtar_common/views_api.py b/ishtar_common/views_api.py index a8d6b9648..99ee48b41 100644 --- a/ishtar_common/views_api.py +++ b/ishtar_common/views_api.py @@ -22,11 +22,11 @@ from django.http import Http404 from urllib.parse import unquote_plus -from rest_framework import serializers +from rest_framework import serializers, status from rest_framework.response import Response from ishtar_common.models_common import GeneralType -from ishtar_common.models_imports import ImporterType +from ishtar_common.models_imports import ImporterType, ImportChunk from ishtar_common.rest import GISAPIView from ishtar_common.views_item import get_item @@ -77,13 +77,21 @@ class GISTypeAPI(GISAPIView): return Response(serializer.data) -class GISImportAPI(GISAPIView): +class GISBaseImportView: + def get_importer(self, request, importer_slug): + user = request.user + q = ImporterType.q_qgis_importers(user.ishtaruser).filter(slug=importer_slug) + if not user.ishtaruser or not q.count(): + return + return q.all()[0] + + +class GISExportAPI(GISBaseImportView, GISAPIView): PAGE_LEN = 50 def get(self, request, importer_slug, page=1, format=None): - user = self.request.user - q = ImporterType.q_qgis_importers(user.ishtaruser).filter(slug=importer_slug) - if not user.ishtaruser or not q.count(): + importer = self.get_importer(request, importer_slug) + if not importer: return Response([]) query = None if request.GET and request.GET["query"]: @@ -91,7 +99,7 @@ class GISImportAPI(GISAPIView): dct = {"query": query, "length": self.PAGE_LEN} if page > 1: dct["start"] = (page - 1) * self.PAGE_LEN + 1 - importer = q.all()[0] + importer_class = importer.get_importer_class() cols, col_names = importer.get_columns(importer_class=importer_class) obj_name = importer_class.OBJECT_CLS.__name__.lower() @@ -102,3 +110,26 @@ class GISImportAPI(GISAPIView): col_types=importer.get_columns_types(), **dct ) + + +class ImportChunkSerializer(serializers.ModelSerializer): + class Meta: + model = ImportChunk + exclude = [] + + +class GISImportAPI(GISBaseImportView, GISAPIView): + def post(self, request, importer_slug, format=None): + importer = self.get_importer(request, importer_slug) + if not importer: + return Response({"error": "Importer not found"}, + status=status.HTTP_400_BAD_REQUEST) + data = request.data + data.importer = importer + data.user = request.user.ishtaruser + serializer = ImportChunkSerializer(data=data) + if serializer.is_valid(): + serializer.save() + chunk_slug = f"{importer_slug}-{serializer.send_datetime}-{serializer.number}" + return Response({"chunk": chunk_slug}, status=status.HTTP_201_CREATED) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) -- cgit v1.2.3