diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-16 18:18:13 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-17 12:12:19 +0200 | 
| commit | 57ce249c3e853e0f8292a18ceeae2509a9feadc3 (patch) | |
| tree | 03a3b1633cc09ad0814e96d6e98a75d9a5b6c7b7 /ishtar_common/management/commands/ishtar_maintenance.py | |
| parent | 3d567dac887b3768432483e1840279e0aed61317 (diff) | |
| download | Ishtar-57ce249c3e853e0f8292a18ceeae2509a9feadc3.tar.bz2 Ishtar-57ce249c3e853e0f8292a18ceeae2509a9feadc3.zip  | |
✨ ishtar_maintenance: fix_geographic_items task - 🐛 Geodata: fix default attachment for find, context records, warehouse, container
Diffstat (limited to 'ishtar_common/management/commands/ishtar_maintenance.py')
| -rw-r--r-- | ishtar_common/management/commands/ishtar_maintenance.py | 39 | 
1 files changed, 36 insertions, 3 deletions
diff --git a/ishtar_common/management/commands/ishtar_maintenance.py b/ishtar_common/management/commands/ishtar_maintenance.py index e4943ea8d..106575570 100644 --- a/ishtar_common/management/commands/ishtar_maintenance.py +++ b/ishtar_common/management/commands/ishtar_maintenance.py @@ -18,7 +18,7 @@ from django.core.management.base import BaseCommand, CommandError  from django.template.defaultfilters import slugify  from ishtar_common import models_common -from ishtar_common.utils import create_default_areas +from ishtar_common.utils import create_default_areas, BColors  APPS = (      "ishtar_common", @@ -184,6 +184,33 @@ def _end_task(changed_nb, msg, quiet, store_results, log, log_name, csv_cols):              sys.stdout.write(f"log: {path} written.\n") +def task_fix_geographic_items(options): +    quiet = options.get("quiet", False) +    filtr = options.get("filter", "") +    model_filter = options.get('model', "").lower() +    for model in apps.get_models(): +        if not issubclass(model, models_common.GeographicItem) or not hasattr(model, "post_save_geo"): +            continue +        if model_filter and model_filter not in (model.__name__.lower(), model._meta.model_name.lower()): +            continue +        q = model.objects.exclude( +            main_geodata__source_content_type__app_label=model._meta.app_label, +            main_geodata__source_content_type__model=model._meta.model_name, +        )  # main geo is set for the current model -> do not change +        if filtr: +            q = q.filter(**filtr) +        nb = q.count() +        total = 0 +        for idx, item in enumerate(q.all()): +            if not quiet: +                msg = BColors.format("OKBLUE", f"\r→ {model.__name__}: {idx + 1}/{nb}" + " " * 20) +                sys.stdout.write(msg) +            total += 1 if item.post_save_geo() else 0 +        if not quiet: +            msg = BColors.format("OKGREEN", f"\n* {total} geographic(s) item(s) fixed for {model.__name__}\n") +            sys.stdout.write(msg) + +  def task_main_image(options):      quiet = options.get("quiet", False)      filtr = options.get("filter", "") @@ -300,6 +327,10 @@ TASKS = {          "help": "create default areas from department and states",          "action": task_default_areas,      }, +    "fix_geographic_items": { +        "help": "check and fix geographic association and main geographic iem", +        "action": task_fix_geographic_items, +    },      "fix_main_image": {          "help": "for items with images and no main image, put the first one created as a main image",          "action": task_main_image, @@ -393,11 +424,13 @@ class Command(BaseCommand):          quiet = options["quiet"]          if not quiet: -            sys.stdout.write(f"[{get_time()}] Processing task {options['task']}\n") +            msg = BColors.format("HEADER", f"[{get_time()}] Processing task {options['task']}\n") +            sys.stdout.write(msg)          errors = TASKS[options["task"]]["action"](options)          if not errors:              if not quiet: -                sys.stdout.write(f"\n[{get_time()}] Task {options['task']} finished\n") +                msg = BColors.format("HEADER", f"[{get_time()}] Task {options['task']} finished\n") +                sys.stdout.write(msg)              if options["test"]:                  return              sys.exit()  | 
