summaryrefslogtreecommitdiff
path: root/ishtar_common/management/commands/ishtar_maintenance.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/management/commands/ishtar_maintenance.py')
-rw-r--r--ishtar_common/management/commands/ishtar_maintenance.py39
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()