summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-11-29 14:18:53 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-08 09:58:49 +0200
commit1a17119bdaf50f31bc98a3fe0071fefce98102a0 (patch)
tree2ecb4c21cf72e96219aac5bceb37c35e88704a6d
parent02e938c90ee265cb869265dbdabcb19fa4dc25b7 (diff)
downloadIshtar-1a17119bdaf50f31bc98a3fe0071fefce98102a0.tar.bz2
Ishtar-1a17119bdaf50f31bc98a3fe0071fefce98102a0.zip
commands - ishtar_maintenance: task - fix operation missing parcels
-rw-r--r--ishtar_common/management/commands/ishtar_maintenance.py46
1 files changed, 42 insertions, 4 deletions
diff --git a/ishtar_common/management/commands/ishtar_maintenance.py b/ishtar_common/management/commands/ishtar_maintenance.py
index 1b9a9be53..1eeab179a 100644
--- a/ishtar_common/management/commands/ishtar_maintenance.py
+++ b/ishtar_common/management/commands/ishtar_maintenance.py
@@ -113,6 +113,32 @@ def task_main_image(quiet=False, log=False):
sys.stdout.write(f"{nb} main image fixed for {model.__name__}\n")
+def task_missing_parcels(quiet=False):
+ Parcel = apps.get_model("archaeological_operations", "Parcel")
+ q = Parcel.objects.filter(context_record__isnull=False, operation=None)
+ nb = q.count()
+ if not nb:
+ if not quiet:
+ sys.stdout.write("No parcel to fix.\n")
+ return
+ for idx, parcel in enumerate(q.all()):
+ if not quiet:
+ sys.stdout.write(f"\r[{percent(idx, nb)}] {idx + 1}/{nb}")
+ # assume all context record associated to this parcel are of the same operation
+ cr = parcel.context_record.all()[0]
+ if parcel.operation:
+ continue
+ parcel.operation = cr.operation
+ parcel.skip_history_when_saving = True
+ parcel.save()
+ if not quiet:
+ sys.stdout.write("\n")
+
+
+def percent(current, total):
+ return f"{(current + 1) / total * 100:.1f}".rjust(4, "0") + "%"
+
+
def get_time():
return datetime.datetime.now().isoformat().split(".")[0]
@@ -126,21 +152,33 @@ TASKS = {
"help": "regenerate cached label on all tables if necessary",
"action": task_check_cached_label,
},
+ "operation_missing_parcels": {
+ "help": "fix lost parcel association on operation from context records.",
+ "action": task_missing_parcels,
+ },
}
class Command(BaseCommand):
- help = "Launch maintenance tasks: \n" + "\n".join(
- [f"* {t}: {TASKS[t]['help']}" for t in TASKS.keys()]
- )
+ help = "Launch maintenance tasks"
+
+ def parser_error(self, message=""):
+ sys.stderr.write(f"{message}\n")
+ self.parser.print_help()
+ sys.exit(2)
def create_parser(self, *args, **kwargs):
parser = super(Command, self).create_parser(*args, **kwargs)
parser.formatter_class = RawTextHelpFormatter
+ self.parser = parser
+ parser.error = self.parser_error
return parser
def add_arguments(self, parser):
- parser.add_argument("task")
+ task_help = "\n".join(
+ [f"{k} - {TASKS[k]['help']}" for k in sorted(TASKS.keys())]
+ )
+ parser.add_argument("task", help=task_help)
parser.add_argument(
"--quiet", dest="quiet", action="store_true", help="Quiet output"
)