From 78f4c43b6e2ce3d9cd22256ee5f8039cf5915ecd Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 10 Aug 2023 13:23:16 +0200 Subject: ✨ Imports groups: initialize action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/models_imports.py | 71 +++++++++++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 9 deletions(-) (limited to 'ishtar_common/models_imports.py') diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index d24317c2f..718f76ef3 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -19,6 +19,8 @@ import csv import datetime +import sys + import fiona from fiona import crs as fiona_crs import json @@ -1347,7 +1349,7 @@ class ImportGroup(BaseImport): actions.append(("I", _("Re-import"))) actions.append(("AC", _("Archive"))) if self.state == "AC": - state = "FE" if any([1 for imp in self.imports.all() if imp.error_file]) else "F" + state = "FE" if any(1 for imp in self.imports.all() if imp.error_file) else "F" actions.append((state, _("Unarchive"))) actions.append(("D", _("Delete"))) return actions @@ -1362,6 +1364,37 @@ class ImportGroup(BaseImport): self.end_date = datetime.datetime.now() self.save() + def importation( + self, + session_key=None, + line_to_process=None, + simulate=False, + return_importer_and_data=False, + request=None, + ): + q = self.imports + if not q.count(): + return + self.state = "IP" + self.end_date = datetime.datetime.now() + self.save() + first = self.import_list()[0] + first.importation( + session_key=session_key, + line_to_process=line_to_process, + simulate=simulate, + return_importer_and_data=return_importer_and_data, + request=request + ) + # from the first import if all is good, cascade import + has_error = any(i.error_file.name for i in q.all() if i.error_file.name) + if has_error: + self.state = "FE" + else: + self.state = "F" + self.end_date = datetime.datetime.now() + self.save() + def get_all_imported(self): imported = [] for imp in self.imports.all(): @@ -1376,27 +1409,39 @@ class ImportGroup(BaseImport): if not add: return name = f"{self.name} ({self.importer_type.name})" + imports = [] + imported_file, imported_images = None, None + if self.imported_file: + imported_file = ContentFile(self.imported_file.read()) + imported_file.name = self.imported_file.name.split(os.sep)[-1] + if self.imported_images: + imported_images = ContentFile(self.imported_images.read()) + imported_images.name = self.imported_images.name.split(os.sep)[-1] + for import_type_relation in self.importer_type.importer_types.all(): import_type = import_type_relation.importer_type imp = Import.objects.create( name=name, importer_type=import_type, - group=self + group=self, ) + imports.append(imp) modified = False # TODO: only get the relevant sheet - if self.imported_file: - imported_file = ContentFile(self.imported_file.read()) - imported_file.name = self.imported_file.name + if imported_file: imp.imported_file = imported_file modified = True - if import_type.archive_required and self.imported_images: - imported_image = ContentFile(self.imported_images.read()) - imported_image.name = self.imported_images.name - imp.imported_images = imported_image + if import_type.archive_required and imported_images: + imp.imported_images = imported_images modified = True if modified: imp.save() + previous = None + for imp in reversed(imports): + if previous: + imp.next_import = previous + imp.save() + previous = imp class Import(BaseImport): @@ -1472,6 +1517,9 @@ class Import(BaseImport): ) group = models.ForeignKey(ImportGroup, blank=True, null=True, on_delete=models.CASCADE, verbose_name=_("Group"), related_name="imports") + next_import = models.ForeignKey( + "Import", blank=True, null=True, on_delete=models.SET_NULL, + verbose_name=_("Next import"), related_name="imports") class Meta: verbose_name = _("Import - Import") @@ -1967,6 +2015,11 @@ class Import(BaseImport): ) self.end_date = datetime.datetime.now() self.save() + if self.next_import and not importer.errors: + return self.next_import.importation( + session_key=session_key, line_to_process=line_to_process, simulate=simulate, + return_importer_and_data=return_importer_and_data, request=request + ) if return_importer_and_data: return importer, data -- cgit v1.2.3