# 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.utils.accuracy import predict_result_to_ready import traceback import copy import csv class Command(BaseCommand): help = 'Refactor database for image level' def add_arguments(self, parser): # Add your command-line arguments here parser.add_argument('test', type=str, help='Value for the argument') def process_request(self, request, predict_result, user_feedback, reviewed_result, row): with open('countries.csv', 'w', encoding='UTF8') as of: writer = csv.writer(of) writer.writerow(['requestId','redemptionNumber','userSubmitResults','OCRResults','revisedResults_by_SDSRV','accuracy','processingTime','processingTime (by request)']) if len(request.request_id.split(".")[0].split("_")) < 2: return images = SubscriptionRequestFile.objects.filter(request=request) for i, image in enumerate(images): try: if not request.predict_result: raise KeyError(f"Key predict_result not found in {request.request_id}") if request.predict_result.get("status", 200) != 200: raise AttributeError(f"Failed request: {request.request_id}") for field in ['retailername', 'purchase_date', 'imei_number']: if image.feedback_result[field] == user_feedback: print(image.feedback_result) # _predict_result = copy.deepcopy(predict_result_to_ready(request.predict_result)) # _feedback_result = copy.deepcopy(request.feedback_result) # _reviewed_result = copy.deepcopy(request.reviewed_result) # if image.doc_type == "invoice": # _predict_result[field] = predict_result # _predict_result["imei_number"] = [] # if _feedback_result: # _feedback_result[field] = user_feedback # _feedback_result["imei_number"] = [] # else: # None # if _reviewed_result: # _reviewed_result[field] = reviewed_result # _reviewed_result["imei_number"] = [] # else: # None # else: # _predict_result = {"retailername": None, "sold_to_party": None, "purchase_date": [], "imei_number": [predict_result]} # _feedback_result = {"retailername": None, "sold_to_party": None, "purchase_date": None, "imei_number": [user_feedback]} if _feedback_result else None # _reviewed_result = {"retailername": None, "sold_to_party": None, "purchase_date": None, "imei_number": [reviewed_result]} if _reviewed_result else None # image.predict_result = _predict_result # image.feedback_result = _feedback_result # image.reviewed_result = _reviewed_result # image.save() else: writer.writerow(row) except Exception as e: self.stdout.write(self.style.ERROR(f"Request: {request.request_id} failed with {e}")) print(traceback.format_exc()) continue def handle(self, *args, **options): test = options['test'] #open csv file with open(test, 'r') as csvfile: reader = csv.reader(csvfile) for row in reader: self.process_request(SubscriptionRequest.objects.filter(request_id=row[0]), row[3], row[2], row[4], row) self.stdout.write(self.style.SUCCESS('Sample Django management command executed successfully!'))