diff options
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r-- | ishtar_common/models_imports.py | 45 |
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", |