summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit08a3f83a4c00a5f7698225b2980fd184da9819e6 (patch)
tree04588dcfc69c8eb7a49cf2cc5dbd9441201e81d1
parent6f5c46f73606fd4afb957f73c355bc61a3f7f393 (diff)
downloadIshtar-08a3f83a4c00a5f7698225b2980fd184da9819e6.tar.bz2
Ishtar-08a3f83a4c00a5f7698225b2980fd184da9819e6.zip
✨ GIS API: manage delayed imports - send error messages from imports
-rw-r--r--ishtar_common/models_imports.py23
-rw-r--r--ishtar_common/views.py15
-rw-r--r--ishtar_common/views_api.py16
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)