From be7184cc7d0c64f2e765d558edff6d098141338c Mon Sep 17 00:00:00 2001 From: daovietanh99 Date: Tue, 6 Feb 2024 12:52:22 +0700 Subject: [PATCH] add requests file update --- cope2n-api/fwd_api/api/accuracy_view.py | 14 +++- .../management/commands/migrate-csv.py | 75 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 cope2n-api/fwd_api/management/commands/migrate-csv.py diff --git a/cope2n-api/fwd_api/api/accuracy_view.py b/cope2n-api/fwd_api/api/accuracy_view.py index e1b8f69..301ba29 100644 --- a/cope2n-api/fwd_api/api/accuracy_view.py +++ b/cope2n-api/fwd_api/api/accuracy_view.py @@ -12,7 +12,7 @@ from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes # from drf_spectacular.types import OpenApiString import json from ..exception.exceptions import InvalidException, RequiredFieldException, NotFoundException -from ..models import SubscriptionRequest, Report, ReportFile +from ..models import SubscriptionRequest, Report, ReportFile, SubscriptionRequestFile from ..utils.accuracy import shadow_report, MonthReportAccumulate, first_of_list, extract_report_detail_list, IterAvg from ..utils.file import download_from_S3 from ..utils.process import string_to_boolean @@ -647,6 +647,18 @@ class RequestViewSet(viewsets.ViewSet): subscription_request = subscription_request.first() + file_query = Q(request=request_id) + + subscription_request_files = SubscriptionRequestFile.objects.filter(file_query) + + for subscription_request_file in subscription_request_files: + if subscription_request_file.doc_type == 'invoice': + subscription_request_file.reviewed_result = reviewed_result + subscription_request_file.reviewed_result['imei_number'] = [] + elif subscription_request_file.doc_type == 'imei': + subscription_request_file.reviewed_result = {"retailername": None, "sold_to_party": None, "purchase_date": [], "imei_number": [reviewed_result["imei_number"][subscription_request_file.index_in_request]]} + subscription_request_file.save() + reviewed_result = json.loads(data["reviewed_result"]) for field in ['retailername', 'sold_to_party', 'purchase_date', 'imei_number']: if not field in reviewed_result.keys(): diff --git a/cope2n-api/fwd_api/management/commands/migrate-csv.py b/cope2n-api/fwd_api/management/commands/migrate-csv.py new file mode 100644 index 0000000..5400bdb --- /dev/null +++ b/cope2n-api/fwd_api/management/commands/migrate-csv.py @@ -0,0 +1,75 @@ +# 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!'))