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.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index 1d59ccde0..7d2d1d623 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -1468,6 +1468,51 @@ class ImportChunk(models.Model):
for chunk in list(q.all()):
q.delete()
+ def is_complete(self):
+ base_q = self.__class__.objects.filter(importer=self.importer, user=self.user,
+ send_datetime=self.send_datetime)
+ chunks = []
+ for idx in range(self.total):
+ q = base_q.filter(number=idx + 1)
+ if not q.count():
+ return False
+ chunks.append(q.all()[0])
+ return chunks
+
+ def create_import(self, chunks):
+ contents = []
+ for chunk in chunks:
+ try:
+ contents += json.loads(chunk.chunk)["features"]
+ except (json.JSONDecodeError, KeyError):
+ return False
+ with tempfile.TemporaryDirectory() as tmp_dir_name:
+ filename = f"{tmp_dir_name}/import.csv"
+ with open(filename, "w") as tf:
+ w = csv.writer(tf)
+ w.writerow(self.importer.get_columns()[1])
+ for content in contents:
+ w.writerow(content)
+ with open(filename, "r") as tf:
+ return Import.objects.create(
+ importer_type=self.importer,
+ user=self.user,
+ name=str(_("Import from QGIS")),
+ imported_file=ContentFile(
+ tf.read(),
+ name=f"import-{self.send_datetime.strftime('%Y-%m-%d-%H%M')}.csv")
+ )
+
+ def associate_chunks(self):
+ chunks = self.is_complete()
+ if not chunks:
+ return
+ new_import = self.create_import(chunks)
+ # delete all chunks - import creation has succeded or data is corrupted
+ for chunk in chunks:
+ chunk.delete()
+ return new_import
+
IMPORT_GEOMETRY = {
"Point": "point_2d",