summaryrefslogtreecommitdiff
path: root/ishtar_common/models_imports.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r--ishtar_common/models_imports.py71
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