add requests file update

This commit is contained in:
daovietanh99 2024-02-06 12:52:22 +07:00
parent 93aee28494
commit be7184cc7d
2 changed files with 88 additions and 1 deletions

View File

@ -12,7 +12,7 @@ from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes
# from drf_spectacular.types import OpenApiString # from drf_spectacular.types import OpenApiString
import json import json
from ..exception.exceptions import InvalidException, RequiredFieldException, NotFoundException 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.accuracy import shadow_report, MonthReportAccumulate, first_of_list, extract_report_detail_list, IterAvg
from ..utils.file import download_from_S3 from ..utils.file import download_from_S3
from ..utils.process import string_to_boolean from ..utils.process import string_to_boolean
@ -647,6 +647,18 @@ class RequestViewSet(viewsets.ViewSet):
subscription_request = subscription_request.first() 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"]) reviewed_result = json.loads(data["reviewed_result"])
for field in ['retailername', 'sold_to_party', 'purchase_date', 'imei_number']: for field in ['retailername', 'sold_to_party', 'purchase_date', 'imei_number']:
if not field in reviewed_result.keys(): if not field in reviewed_result.keys():

View File

@ -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!'))