summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r--ishtar_common/data_importer.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 9dbd45e93..1c99782e3 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -26,8 +26,10 @@ import re
import sys
import zipfile
+from django.apps import apps
from django.conf import settings
from django.contrib.auth.models import User
+from django.contrib.contenttypes.models import ContentType
from django.contrib.gis.geos.error import GEOSException
from django.db.models.fields import FieldDoesNotExist
from django.core.exceptions import FieldError
@@ -831,6 +833,8 @@ class Importer(object):
SLUG = ""
NAME = ""
DESC = ""
+ TYPE = ""
+ MAIN_GEO = False
LINE_FORMAT = []
OBJECT_CLS = None
UNICITY_KEYS = []
@@ -1338,6 +1342,7 @@ class Importer(object):
n2 = n
self.c_errors = False
c_row = []
+ idx_col = 0
for idx_col, val in enumerate(line):
try:
self._row_processing(c_row, idx_col, idx_line, val, data)
@@ -1368,6 +1373,10 @@ class Importer(object):
self.new_objects, self.updated_objects = [], []
self.ambiguous_objects, self.not_find_objects = [], []
+ geodata = {}
+ if self.TYPE == "gis":
+ if "geodata" in data:
+ geodata = data.pop("geodata")
obj, created = self.get_object(self.OBJECT_CLS, data, idx_line=idx_line)
if self.simulate:
return data
@@ -1391,6 +1400,41 @@ class Importer(object):
obj._no_post_save = True
obj.save()
self._add_to_post_save(obj.__class__, obj.pk, idx_line)
+
+ if self.TYPE == "gis":
+ content_type = ContentType.objects.get(
+ app_label=obj.__class__._meta.app_label,
+ model=obj.__class__.__name__.lower()
+ )
+ geodata.update({
+ "source_id": obj.pk,
+ "source_content_type": content_type,
+ })
+ GeoVectorData = apps.get_model("ishtar_common", "GeoVectorData")
+ item = None
+ if "import_key" in geodata:
+ q = GeoVectorData.objects.filter(
+ import_key=geodata["import_key"],
+ source_id=obj.pk,
+ source_content_type=content_type,
+ )
+ if q.count():
+ item = q.all()[0]
+ if item:
+ for k in geodata:
+ setattr(item, k, geodata[k])
+ item.save()
+ else:
+ item = GeoVectorData.objects.create(**geodata)
+ if self.import_instance:
+ item.imports.add(self.import_instance)
+ if self.MAIN_GEO:
+ obj.main_geodata = item
+ obj._post_saved_geo = True
+ obj._no_move = True
+ obj.skip_history_when_saving = True
+ obj.save()
+
n = datetime.datetime.now()
logger.debug("* %s - Item saved" % (str(n - n2)))
n2 = n