80 lines
3.6 KiB
Python
80 lines
3.6 KiB
Python
# 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 ============================='))
|
|
|