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