diff --git a/cope2n-api/fwd_api/management/commands/migrate-requestfile-update-reason.py b/cope2n-api/fwd_api/management/commands/migrate-requestfile-update-reason.py new file mode 100644 index 0000000..3b1ec06 --- /dev/null +++ b/cope2n-api/fwd_api/management/commands/migrate-requestfile-update-reason.py @@ -0,0 +1,41 @@ +from django.core.management.base import BaseCommand +from tqdm import tqdm +from fwd_api.models import SubscriptionRequestFile +from fwd_api.models.SemiAutoCorrection import SemiAutoCorrection +from fwd_api.exception.exceptions import InvalidException + +# Mapping dictionary for reasons +REASON_MAP = { + 'Invalid image': 'invalid_image', + 'Missing information': 'missing_information', + 'Too blurry text': 'too_blurry_text', + 'Too small text': 'too_small_text', + 'Handwritten': 'handwritten', + 'Recheck': 'recheck', +} + +class Command(BaseCommand): + help = 'Replace the reason field in SubscriptionRequestFile and SemiAutoCorrection based on the provided mapping dictionary' + + def handle(self, *args, **options): + # Process SubscriptionRequestFile instances + self.update_reasons(SubscriptionRequestFile, "SubscriptionRequestFile") + + # Process SemiAutoCorrection instances + self.update_reasons(SemiAutoCorrection, "SemiAutoCorrection") + + self.stdout.write(self.style.SUCCESS('All applicable reasons updated successfully!')) + + def update_reasons(self, model, model_name): + instances = model.objects.exclude(reason__isnull=True).exclude(reason='').iterator() + for instance in tqdm(instances, desc=f"Updating reasons in {model_name}"): + try: + original_reason = instance.reason + new_reason = REASON_MAP.get(original_reason) + if new_reason is not None: + instance.reason = new_reason + instance.save() + self.stdout.write(self.style.SUCCESS(f"Updated reason for {model_name} ID {instance.id}: {original_reason} -> {new_reason}")) + except Exception as e: + self.stdout.write(self.style.ERROR(f"Updated reason failed for {model_name} ID {instance.id} due to {e}")) + \ No newline at end of file