diff options
-rw-r--r-- | ishtar_common/data_importer.py | 39 | ||||
-rw-r--r-- | ishtar_common/models_imports.py | 2 |
2 files changed, 26 insertions, 15 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index df6b52c7c..3b7e4305e 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -1110,6 +1110,28 @@ class Importer(object): self._add_to_post_save(cls, obj.pk, idx_line) return obj + def _manage_geodata(self, default_srs, geodata, data, key="geodata"): + if key not in data: # no GIS information provided + return geodata + geodata.update(data.pop(key)) + + # manage geodata SRS + has_srs_field = False + for gk in geodata: + if gk.startswith("spatial_reference_system") and geodata[gk]: + has_srs_field = True + if isinstance(geodata[gk], dict) and "srid" in geodata[gk]: + srid = geodata[gk]["srid"] + if isinstance(srid, (str, int)): + SpatialReferenceSystem = apps.get_model("ishtar_common", "SpatialReferenceSystem") + q = SpatialReferenceSystem.objects.filter(srid=geodata[gk]["srid"]) + if q.count(): + geodata[gk] = q.all()[0] + break + if default_srs and not has_srs_field: + geodata["spatial_reference_system"] = default_srs + return geodata + def _line_processing(self, idx_line, line): self.timestamp = int(datetime.datetime.now().timestamp()) for item in self.to_be_close: @@ -1196,22 +1218,11 @@ class Importer(object): if self.TYPE == "gis": profile = get_current_profile() default_srs = profile.srs if profile.srs else None - if "geodata" in data: - geodata.update(data.pop("geodata")) - if default_srs and not [ - 1 for k in geodata if k.startswith("spatial_reference_system") and - geodata[k] - ]: - geodata["spatial_reference_system"] = default_srs - + geodata = self._manage_geodata(default_srs, geodata, data) if "main_geodata" in data: - main_geodata.update(data.pop("main_geodata")) - if default_srs and not [ - 1 for k in main_geodata if k.startswith("spatial_reference_system") - and main_geodata[k] - ]: - main_geodata["spatial_reference_system"] = default_srs + main_geodata = self._manage_geodata(default_srs, main_geodata, 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 diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index b56f69bb4..8033d7c45 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -589,7 +589,7 @@ class ImporterDefault(models.Model): if target != "-": targets += target.split("__") value = default_value.value - # explicit key or id is not set - try to get the value + # explicit key or id is not set (try to get the value) if targets[-1] not in ("srid", "txt_idx", "slug", "id", "pk"): value = default_value.get_value() dct = generate_dict_from_list(targets, value) |