summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2025-07-31 18:35:23 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-10-15 19:33:00 +0200
commitfa9a89325a3767a8cc99fca04c8671a193e3378e (patch)
tree70ff91ba2014342da215d3d2ccb13e9558ce1195 /ishtar_common
parent9a380773f208abf5aec6bc7f000cce7e57d2cb8b (diff)
downloadIshtar-fa9a89325a3767a8cc99fca04c8671a193e3378e.tar.bz2
Ishtar-fa9a89325a3767a8cc99fca04c8671a193e3378e.zip
✨ GIS: automatically update import key for geovectordata
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/migrations/0267_gis_import_key_init.py24
-rw-r--r--ishtar_common/models_common.py28
-rw-r--r--ishtar_common/utils_migrations.py21
3 files changed, 72 insertions, 1 deletions
diff --git a/ishtar_common/migrations/0267_gis_import_key_init.py b/ishtar_common/migrations/0267_gis_import_key_init.py
new file mode 100644
index 000000000..b532acd95
--- /dev/null
+++ b/ishtar_common/migrations/0267_gis_import_key_init.py
@@ -0,0 +1,24 @@
+from django.db import migrations
+
+from ishtar_common.utils_migrations import update_import_key
+
+
+def update_importkey(apps, __):
+ updated = 0
+ GeoVectorData = apps.get_model("ishtar_common", "geovectordata")
+ for data in GeoVectorData.objects.all():
+ updated += 1 if update_import_key(data) else 0
+ if updated:
+ print()
+ print(f"* {updated} GeoVectorData import_key updated")
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0266_gis_importchunk'),
+ ]
+
+ operations = [
+ migrations.RunPython(update_importkey)
+ ]
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index dcb4f05a3..96f0f5d86 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -2957,6 +2957,24 @@ class GeoVectorData(Imported, OwnPerms):
self.save()
return True
+ def update_import_key(self):
+ if self.import_key or not self.data_type:
+ return
+ # by default set import key to data type
+ base_import_key = import_key = self.data_type.txt_idx
+ base_q = GeoVectorData.objects.filter(
+ source_content_type_id=self.source_content_type_id,
+ source_id=self.source_id
+ )
+ idx = 0
+ q = base_q.filter(import_key=import_key)
+ while q.count():
+ idx += 1
+ import_key = f"{base_import_key}-{idx}"
+ q = base_q.filter(import_key=import_key)
+ GeoVectorData.objects.filter(pk=self.id).update(import_key=import_key)
+ return True
+
@classmethod
def migrate_srid(cls, new_srid):
fields = (
@@ -2976,7 +2994,15 @@ class GeoVectorData(Imported, OwnPerms):
item.save()
-post_save.connect(post_save_geodata, sender=GeoVectorData)
+def post_save_geovectordata(sender, **kwargs):
+ geovectordata = kwargs["instance"]
+ if not geovectordata.pk:
+ return
+ geovectordata.update_import_key()
+ post_save_geodata(sender, **kwargs)
+
+
+post_save.connect(post_save_geovectordata, sender=GeoVectorData)
def geodata_attached_post_add(model, instance, pk_set):
diff --git a/ishtar_common/utils_migrations.py b/ishtar_common/utils_migrations.py
index 5654a8897..6d75ff885 100644
--- a/ishtar_common/utils_migrations.py
+++ b/ishtar_common/utils_migrations.py
@@ -212,3 +212,24 @@ def migrate_created_field(apps, app_name, model_names):
continue
history_date = q.all()[0].history_date
item.__class__.objects.filter(pk=item.pk).update(created=history_date)
+
+
+def update_import_key(geovectordata): # 0267_gis_import_key
+ if geovectordata.import_key or not geovectordata.data_type:
+ return
+ GeoVectorData = geovectordata.__class__
+ # by default set import key to data type
+ base_import_key = import_key = geovectordata.data_type.txt_idx
+ base_q = GeoVectorData.objects.filter(
+ source_content_type_id=geovectordata.source_content_type_id,
+ source_id=geovectordata.source_id
+ )
+ idx = 0
+ q = base_q.filter(import_key=import_key)
+ while q.count():
+ idx += 1
+ import_key = f"{base_import_key}-{idx}"
+ q = base_q.filter(import_key=import_key)
+ GeoVectorData.objects.filter(pk=geovectordata.id).update(
+ import_key=import_key)
+ return True