diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-08-10 13:23:16 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-02-05 10:51:51 +0100 |
commit | 90e033d2d9cfdf56a76b4d6561069a362d4675cb (patch) | |
tree | 1b679c0e2ddb57ff8aa616d8a9717f3ef35c597e /ishtar_common/models_imports.py | |
parent | 2caa3b4d350b62e9556a340f02bde711d380e383 (diff) | |
download | Ishtar-90e033d2d9cfdf56a76b4d6561069a362d4675cb.tar.bz2 Ishtar-90e033d2d9cfdf56a76b4d6561069a362d4675cb.zip |
✨ Imports groups: initialize action
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r-- | ishtar_common/models_imports.py | 71 |
1 files changed, 62 insertions, 9 deletions
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 |