diff options
| -rw-r--r-- | ishtar_common/management/commands/ishtar_maintenance.py | 46 | 
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"          ) | 
