# myapp/management/commands/mycustomcommand.py 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 TEST_IMEI_VALUES = ["357822611219904", "RFAW2022FED", "5AWH14MT400396N", "0HU33NIW200044K", "0GJG4DBW200318X", "358975990917032", "350731691693549", "R52W70BHDWX", "R52W70BHDWX", "350073345090297", "0PBL3NHW500023N"] TEST_RETAILER_VALUES = ["Best Denki", "Arrow Communication"] KEY = "invoice_no" 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: 2024-01-25T00:00:00+0800') def process_request(self, request, test_requests, supicious_requests): if len(request.request_id.split(".")[0].split("_")) < 2: return 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"Key predict_result not found in {request.request_id}")) return imeis = [] retailername = None for content in request.predict_result["content"]["document"][0]["content"]: if content["label"] == "retailername": retailername = content["value"] elif content["label"] == "imei_number": imeis = content["value"] if retailername in TEST_RETAILER_VALUES and any(imei in TEST_IMEI_VALUES for imei in imeis): request.is_test_request= True request.save() test_requests.append(request.request_id) elif any(imei in TEST_IMEI_VALUES for imei in imeis): request.is_test_request= True request.save() test_requests.append(request.request_id) elif retailername in TEST_RETAILER_VALUES: supicious_requests.append(request.request_id) def handle(self, *args, **options): start = options['start'] end = options['end'] test_requests = [] supicious_requests = [] 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() for request in tqdm(subcription_iter.iterator()): self.process_request(request, test_requests, supicious_requests) self.stdout.write(self.style.SUCCESS('Sample Django management command executed successfully!')) self.stdout.write(self.style.SUCCESS(f'Test request: \n {test_requests} \n =============================')) self.stdout.write(self.style.SUCCESS(f'Supicious request: \n {supicious_requests} \n ============================='))