From 637ef00f73967aa281d1cfec8ac5d67c0e100f4f Mon Sep 17 00:00:00 2001 From: TannedCung Date: Fri, 14 Jun 2024 19:37:42 +0700 Subject: [PATCH] Add: migrate script --- ...igrate-datebase-remove-None-string-imei.py | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 cope2n-api/fwd_api/management/commands/migrate-datebase-remove-None-string-imei.py diff --git a/cope2n-api/fwd_api/management/commands/migrate-datebase-remove-None-string-imei.py b/cope2n-api/fwd_api/management/commands/migrate-datebase-remove-None-string-imei.py new file mode 100644 index 0000000..663b01d --- /dev/null +++ b/cope2n-api/fwd_api/management/commands/migrate-datebase-remove-None-string-imei.py @@ -0,0 +1,80 @@ +from django.core.management.base import BaseCommand +from tqdm import tqdm +from fwd_api.models import SubscriptionRequestFile, SubscriptionRequest +from fwd_api.exception.exceptions import InvalidException +from fwd_api.utils.accuracy import predict_result_to_ready +import traceback +import copy +from django.utils import timezone + +KEY = "imei_number" +VALUE = "None" +EXPECTED_VALUE = [] + +class Command(BaseCommand): + help = 'Refactor database for image level' + + def add_arguments(self, parser): + # Add your command-line arguments here + parser.add_argument('start', type=str, help='start date, sample: 2023-01-02T00:00:00+0700') + parser.add_argument('end', type=str, help='end date, sample: 2023-01-03T00:00:00+0700') + + def process_request(self, request, result): + if len(request.request_id.split(".")[0].split("_")) < 2: + return + images = SubscriptionRequestFile.objects.filter(request=request) + if not request.predict_result: + # self.stdout.write(self.style.WARNING(f"Key predict_result not found in {request.request_id}")) + return + if request.predict_result.get("status", 200) != 200: + # self.stdout.write(self.style.WARNING(f"Not a sucess request {request.request_id}")) + return + + for i, image in enumerate(images): + try: + if isinstance(image.reviewed_result, dict): + # print(f"[INFO]: dict ... {request.predict_result}") + _imeis = image.reviewed_result.get(KEY, []) + if _imeis is None: + continue + if len(_imeis) >= 1: + sub_imei = _imeis[0] + if sub_imei is None or VALUE in sub_imei or isinstance(sub_imei, list): + expected_value = copy.deepcopy(str(image.reviewed_result[KEY])) + expected_value = expected_value.replace("[", "").replace("]", "").replace(VALUE, "").replace('"', '').replace("'", "") + if expected_value == "": + expected_value = [] + else: + expected_value = [expected_value] + image.reviewed_result[KEY] = expected_value + image.save() + result['total'] += 1 + print(f"{image.reviewed_result[KEY]} -> {expected_value}") + except Exception as e: + self.stdout.write(self.style.ERROR(f"Request: {request.request_id} failed with {e}")) + print(traceback.format_exc()) + result['failed'] += 1 + continue + + def handle(self, *args, **options): + start = options['start'] + end = options['end'] + result = {'total':0, + 'failed':0} + if start or end: + try: + start_date = timezone.datetime.strptime(start, '%Y-%m-%dT%H:%M:%S%z') # We care only about day precision only + end_date = timezone.datetime.strptime(end, '%Y-%m-%dT%H:%M:%S%z') + except Exception as e: + print(f"[INFO]: start: {start}") + print(f"[INFO]: end: {end}") + raise InvalidException(excArgs="Date format") + subcription_iter = SubscriptionRequest.objects.filter(created_at__range=(start_date, end_date)) + else: + subcription_iter = SubscriptionRequest.objects.all() + + # file = open("modified.txt", "w") + for request in tqdm(subcription_iter.iterator()): + self.process_request(request, result) + # file.close() + self.stdout.write(self.style.SUCCESS('Sample Django management command executed successfully! total/failed: {}/{}'.format(result['total'], result['failed']))) \ No newline at end of file