diff options
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  | 
