diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-02-23 10:57:48 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:21:00 +0100 |
commit | 55f311f240402612feb72766925131e585040833 (patch) | |
tree | bd23b4e1c01800deabf75dfd1a82b532ea150da1 /ishtar_common | |
parent | ef1d582c2e55bd12a5d2169ecb445b280f0afe9c (diff) | |
download | Ishtar-55f311f240402612feb72766925131e585040833.tar.bz2 Ishtar-55f311f240402612feb72766925131e585040833.zip |
Geodata redesign: fix operation migration
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/management/commands/migrate_to_geo_v4.py | 14 | ||||
-rw-r--r-- | ishtar_common/models.py | 4 | ||||
-rw-r--r-- | ishtar_common/utils.py | 24 |
3 files changed, 37 insertions, 5 deletions
diff --git a/ishtar_common/management/commands/migrate_to_geo_v4.py b/ishtar_common/management/commands/migrate_to_geo_v4.py index 64ab25c16..8daf921d9 100644 --- a/ishtar_common/management/commands/migrate_to_geo_v4.py +++ b/ishtar_common/management/commands/migrate_to_geo_v4.py @@ -13,7 +13,7 @@ from django.core.management.base import BaseCommand from ishtar_common.utils import ugettext_lazy as _ from ishtar_common import models_common, models -from archaeological_operations.models import Operation +from archaeological_operations.models import Operation, ArchaeologicalSite log_path = os.sep.join([settings.ROOT_PATH, "logs"]) @@ -55,6 +55,9 @@ def migrate(quiet=False, log=True): changed.append(["geovectordata", data.name, data.pk, "Création commune"]) town.main_geodata = data town.save() + if not quiet and nb: + sys.stdout.write(f"\r[{get_time()}] Towns migrated\n") + sys.stdout.flush() # manage operation vector sources operation_content_type = ContentType.objects.get( @@ -130,10 +133,13 @@ def migrate(quiet=False, log=True): operation.save() changed.append( ["geovectordata", data.name, data.pk, "Point opération"]) + if not quiet and nb: + sys.stdout.write(f"\r[{get_time()}] Operation migrated\n") + sys.stdout.flush() if log and changed: - filename = f"geo_migration-created-{get_time().replace(':', '')}.txt" + filename = f"geo_migration-created-{get_time().replace(':', '')}.csv" path = os.sep.join([log_path, filename]) with open(path, "w+") as fle: writer = csv.writer(fle) @@ -141,9 +147,7 @@ def migrate(quiet=False, log=True): for change in changed: writer.writerow(change) if not quiet: - sys.stdout.write(f"log: {path} written.") - if not quiet: - sys.stdout.write("\n") + sys.stdout.write(f"[{get_time()}] Log: {path} written\n") def percent(current, total): diff --git a/ishtar_common/models.py b/ishtar_common/models.py index e86b8a55d..833851b5c 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -53,6 +53,8 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.contrib.gis.db import models from django.contrib.gis.db.models.aggregates import Union +from django.contrib.gis.geos.polygon import Polygon +from django.contrib.gis.geos.collections import MultiPolygon from django.contrib.postgres.fields import JSONField from django.contrib.postgres.indexes import GinIndex from django.contrib.sites.models import Site @@ -2315,6 +2317,8 @@ class Area(HierarchicalType): geo.origin = origins[0] if len(set(providers)) == 1: # no ambiguous provider geo.provider = providers[0] + if isinstance(poly, Polygon): + poly = MultiPolygon(poly,) geo.multi_polygon = poly geo.save() if get_geo: diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 53727b6d3..fc302166b 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -846,6 +846,30 @@ def _post_save_geo(sender, **kwargs): if not instance: return + if getattr(instance, "_post_saved_geo", False): + return + + instance._post_saved_geo = True + + modified = False + if getattr(instance, "post_save_geo", False): + instance.post_save_geo(save=False) + modified = True + + if hasattr(instance, "need_update") and instance.need_update: + instance.need_update = False + modified = True + + if modified: + instance.skip_history_when_saving = True + instance._post_saved_geo = True + instance._cached_label_checked = False + instance.save() + if hasattr(instance, "cascade_update"): + instance.cascade_update() + cache_key, __ = get_cache(sender, ["post_save_geo", instance.pk]) + cache.set(cache_key, None, settings.CACHE_TASK_TIMEOUT) + return # TODO to delete |