diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-10-14 18:07:32 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-10-15 19:34:46 +0200 |
commit | 08a3f83a4c00a5f7698225b2980fd184da9819e6 (patch) | |
tree | 04588dcfc69c8eb7a49cf2cc5dbd9441201e81d1 | |
parent | 6f5c46f73606fd4afb957f73c355bc61a3f7f393 (diff) | |
download | Ishtar-08a3f83a4c00a5f7698225b2980fd184da9819e6.tar.bz2 Ishtar-08a3f83a4c00a5f7698225b2980fd184da9819e6.zip |
✨ GIS API: manage delayed imports - send error messages from imports
-rw-r--r-- | ishtar_common/models_imports.py | 23 | ||||
-rw-r--r-- | ishtar_common/views.py | 15 | ||||
-rw-r--r-- | ishtar_common/views_api.py | 16 |
3 files changed, 34 insertions, 20 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 2b568df21..3d8cce882 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -1683,7 +1683,8 @@ class BaseImport(models.Model, OwnPerms, SheetItem): def get_imported_images(self): return self.imported_images - def delayed_importation(self, request, session_key): + def delayed_importation(self, request): + session_key = request.session.session_key if request else None if not settings.USE_BACKGROUND_TASK: return self.importation(request=request, session_key=session_key) put_session_message( @@ -2989,6 +2990,24 @@ class Import(BaseImport): continue ImportLineError.objects.get_or_create(import_item=self, line=idx) + def start_import(self, request=None): + if settings.USE_BACKGROUND_TASK: + self.delayed_importation(request) + return + try: + self.importation() + except ImporterError as e: + self.state = "FE" + self.end_date = timezone.now() + self.save() + if request: + put_session_message( + request.session.session_key, + f"{self} - {e}", + "warning", + ) + + def save(self, *args, **kwargs): maj_imported_file = False if getattr(self, "_maj_imported_file", False): @@ -3013,7 +3032,7 @@ class Import(BaseImport): self.initialize() if not self.pre_import_form_is_valid or self.need_matching(): return - self.importation() + self.start_import() def pre_delete_import(sender, **kwargs): diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 107ba7178..a9fbfd7c8 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1975,20 +1975,7 @@ class ImportListView(IshtarMixin, LoginRequiredMixin, ListView): session_key=request.session.session_key, ) elif can_edit and action == "I": - if settings.USE_BACKGROUND_TASK: - imprt.delayed_importation(request, request.session.session_key) - else: - try: - imprt.importation() - except ImporterError as e: - imprt.state = "FE" - imprt.end_date = timezone.now() - imprt.save() - put_session_message( - request.session.session_key, - f"{imprt} - {e}", - "warning", - ) + imprt.start_import(request) elif can_edit and action == "CH": if settings.USE_BACKGROUND_TASK: imprt.delayed_check_modified(request.session.session_key) diff --git a/ishtar_common/views_api.py b/ishtar_common/views_api.py index 93dcdf901..e0226811b 100644 --- a/ishtar_common/views_api.py +++ b/ishtar_common/views_api.py @@ -19,6 +19,7 @@ from django.apps import apps from django.http import Http404 +from django.utils.translation import gettext_lazy as _ import html from urllib.parse import unquote_plus @@ -152,9 +153,16 @@ class GISImportAPI(GISBaseImportView, GISAPIView): if serializer.is_valid(): chunk = serializer.save() new_import = chunk.associate_chunks() + msg = "" + if new_import and new_import.import_immediatly: + if not new_import.pre_import_form_is_valid: + msg = _("Import not started - Pre import form need to be completed") + elif new_import.need_matching(): + msg = _("Import not started - Value matches must be made") chunk_slug = f"{importer_slug}-{data['send_datetime']}-{data['number']}" - return Response( - {"chunk": chunk_slug, "import": new_import.id if new_import else None}, - status=status.HTTP_201_CREATED - ) + return Response({ + "chunk": chunk_slug, + "import": new_import.id if new_import else None, + "message": msg + }, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) |