summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2025-09-10 18:58:56 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-10-15 19:33:00 +0200
commit7c5cdd8c6028bce79039ab0e0c9dedb20c1854a7 (patch)
tree8cd20c40d4078aa5ccb64b392b781ee4e3a48e6e /ishtar_common/data_importer.py
parent6bd0c6466ade34b7e91afb3440cdbd6b2dc62f79 (diff)
downloadIshtar-7c5cdd8c6028bce79039ab0e0c9dedb20c1854a7.tar.bz2
Ishtar-7c5cdd8c6028bce79039ab0e0c9dedb20c1854a7.zip
🐛 fix base_finds geo data import from finds
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r--ishtar_common/data_importer.py54
1 files changed, 34 insertions, 20 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 2e782d5e4..7ecf800ba 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -39,11 +39,12 @@ from django.template.defaultfilters import slugify
from django.utils.translation import gettext_lazy as _
from ishtar_common.utils import (
+ BColors,
get_all_field_names,
get_current_profile,
get_file_from_link,
+ IMPORT_GEOMETRY,
update_data,
- BColors
)
@@ -1325,14 +1326,24 @@ class Importer(object):
self.ambiguous_objects, self.not_find_objects = [], []
geodata, main_geodata = {}, {}
+ self.geo_prefix = "base_finds" if self.OBJECT_CLS.__name__ == "Find" else ""
if self.TYPE in ("gis", "qgs"):
profile = get_current_profile()
default_srs = profile.srs if profile.srs else None
- if "geodata" in data:
- geodata = self._manage_geodata(default_srs, geodata, data)
- if "main_geodata" in data:
- main_geodata = self._manage_geodata(default_srs, main_geodata, data, key="main_geodata")
+ alt_data = data
+ if self.geo_prefix and self.geo_prefix in data:
+ alt_data = data[self.geo_prefix]
+ if "geodata" in alt_data:
+ geodata = self._manage_geodata(default_srs, geodata, alt_data)
+ # do not import if not geometry is set
+ geom_fields = list(IMPORT_GEOMETRY.values()) + ["x", "z"]
+ if not any(1 for k in geom_fields
+ if (k in geodata) and geodata[k]):
+ geodata = {}
+ if "main_geodata" in alt_data:
+ main_geodata = self._manage_geodata(default_srs, main_geodata, alt_data, key="main_geodata")
# TODO: main_geodata not used?
+
obj, created = self.get_object(self.OBJECT_CLS, data, idx_line=idx_line)
if self.simulate:
return data
@@ -1367,9 +1378,12 @@ class Importer(object):
self._add_to_post_save(obj.__class__, obj.pk, idx_line)
GeoVectorData = apps.get_model("ishtar_common", "GeoVectorData")
- if self.TYPE in ("gis", "qgs") and not isinstance(obj, GeoVectorData):
+ if self.TYPE in ("gis", "qgs") and geodata and not isinstance(obj, GeoVectorData):
# create GIS data and attach to the created object if the object is not GIS
- if not obj and not self.c_errors:
+ geo_obj = obj
+ if self.OBJECT_CLS.__name__ == "Find":
+ geo_obj = obj.get_first_base_find()
+ if not geo_obj and not self.c_errors:
self.c_errors = True
self.errors.append(
(
@@ -1380,11 +1394,11 @@ class Importer(object):
)
return
content_type = ContentType.objects.get(
- app_label=obj.__class__._meta.app_label,
- model=obj.__class__.__name__.lower()
+ app_label=geo_obj.__class__._meta.app_label,
+ model=geo_obj.__class__.__name__.lower()
)
geodata.update({
- "source_id": obj.pk,
+ "source_id": geo_obj.pk,
"source_content_type": content_type,
})
item = None
@@ -1392,7 +1406,7 @@ class Importer(object):
if "import_key" in geodata:
q = GeoVectorData.objects.filter(
import_key=geodata["import_key"],
- source_id=obj.pk,
+ source_id=geo_obj.pk,
source_content_type=content_type,
)
if q.count():
@@ -1417,15 +1431,15 @@ class Importer(object):
if self.import_instance and created:
item.imports.add(self.import_instance)
if self.MAIN_GEO:
- obj._timestamp = self.timestamp
- obj.main_geodata = item
- obj._post_saved_geo = True
- obj._no_move = True
- obj.skip_history_when_saving = True
- obj._queue = "low_priority"
- if hasattr(obj, "no_post_process"):
- obj.no_post_process(history=True)
- obj.save()
+ geo_obj._timestamp = self.timestamp
+ geo_obj.main_geodata = item
+ geo_obj._post_saved_geo = True
+ geo_obj._no_move = True
+ geo_obj.skip_history_when_saving = True
+ geo_obj._queue = "low_priority"
+ if hasattr(geo_obj, "no_post_process"):
+ geo_obj.no_post_process(history=True)
+ geo_obj.save()
n = datetime.datetime.now()
logger.debug("* %s - Item saved" % (str(n - n2)))