From e88cbae28e31e7bbe3c4835b5455a3fedb3f4d87 Mon Sep 17 00:00:00 2001 From: paveenpaul Date: Sat, 16 Nov 2024 10:34:05 +0000 Subject: [PATCH] Update kitchen_counter/conversion/translation/external_conversion.py added script_json["screenplay_name"] = str(self.name_script) in external COnversion --- .../translation/external_conversion.py | 1381 +++++++++-------- 1 file changed, 691 insertions(+), 690 deletions(-) diff --git a/kitchen_counter/conversion/translation/external_conversion.py b/kitchen_counter/conversion/translation/external_conversion.py index 5d959ac..fe3f420 100755 --- a/kitchen_counter/conversion/translation/external_conversion.py +++ b/kitchen_counter/conversion/translation/external_conversion.py @@ -1,690 +1,691 @@ -import sys -import os -import boto3 -import pandas as pd -import datetime -import time -import json -import tempfile - -# django -from django.core.files.base import ContentFile - -# all external imports -from scriptAudit.models import States -from centralisedFileSystem.models import Script, File -from scriptAudit.models import ScriptAuditModel -from mnfapp.models import MNFScriptDatabase, SampleScript, ScriptTranslations -from users.models import UserCredentialsForBlockchain,BlockchainUserInfo -from lpp.models import LPPTASKDatabase - -from centralizePayment.views import auto_refund -from juggernaut.views import update_juggernaut -from juggernaut.models import JuggernautPackage -from auto_email.views import sendmail -from lpp.views import task_assigner -from utils import filesystem, utilities -from conversion.translation.newconversion import ScriptTranslation -from scriptAudit.mnf_script_audit import NeutralAudit -from Blockchain2.DataStorage import uploadDataToIPFSNode -from Blockchain2.decryption import decryptionOfPrivate, decryptionOfUrl, download_file_System,viewDecryptionOfUrl,hash_decrypation -from Blockchain2.Conversion import UploadConversionData, getConversion, deleteConversion,scriptGetUserprojectIds -from Blockchain2.blockchainsetting import OWNER_KEY -from Blockchain2.block_user_info import user_info -from lpp.certificate.createCertificate import certificateGenrate -from MNF.settings import BasePath - -basePath = BasePath() - -"""Converts a screenplay file""" - - -class Conversion: - - def __init__(self, **conversion_params): - self.audit_user = conversion_params['audit_user'] - self.user = conversion_params['user'] - self.file_path = conversion_params['file_path'] - self.original_script_object = MNFScriptDatabase.objects.get( - script_id=conversion_params['original_script_id']) - self.translated_script_object = ScriptTranslations.objects.get( - translation_id=conversion_params['translated_script_id']) - self.sample_id = conversion_params['sample_id'] - self.existing_script = conversion_params['existing_script'] - self.iteration_no = conversion_params['iteration_no'] - self.juggernaut_pages_deduction = conversion_params["juggernaut_pages_deduction"] - self.language_set = conversion_params["language_set"] - self.amount_without_subscrption = conversion_params["amount_without_subscrption"] - self.response = {} - - print("Conversion Process Initializing") - # original_stdout = sys.stdout - - """Initializing Variables""" - # script_id = request.session["script_id"] - # original_script = MNFScriptDatabase.objects.get(script_id=script_id) - # translated_script = ScriptTranslations.objects.get(translation_id=request.session.get("translation_id", None)) - - # Getting all choices of user regarding Full Dialogues Translation - self.full_dialogue_option_choices = [True if value.strip() == "True" else False for value in - str(self.translated_script_object.full_dialogue_option_choices).split(",")] - - # Getting all choices of user regarding Words of Dialogues Translation - self.sentence_dialogue_option_choices = [True if value.strip() == "True" else False for value in - str(self.translated_script_object.sentence_dialogue_option_choices).split(",")] - - # Getting all choices of user regarding translation and transliteration choices of slug, speaker, etc. - self.other_option_choices = [True if value.strip() == "True" else False for value in - str(self.translated_script_object.other_option_choices).split(",")] - - self.name_script = (str(((self.original_script_object.script.name).split("/"))[-1]).split("."))[0] - self.file_extension = (str(self.original_script_object.script.name).split("."))[-1] - - # Dual dialogue - # if dual_dialogue_option := request.POST.get('dual_dialogue_option') == "on": - - # dual_left_language = request.POST.get('dual_left_language') - # dual_left_script = request.POST.get('dual_left_script') - - # # lpp vetting - # if lpp_vetting := request.POST.get('lpp_vetting') == "on": - - # lpp_vetting_type = request.POST.get('radioGroup') - - # if lpp_vetting_type == "radioOption1": - - # pass - - # elif lpp_vetting_type == "radioOption1": - - # pass - - def convert(self): - """Audit Code starts here""" - - print("Conversion Auditing is starting") - original_stdout = sys.stdout - # x = MNFScriptDatabase.objects.get(script_id=request.POST['script_id']) - # scripttt = basePath + "/media/" + original_script.script.name - # exten = (str(self.original_script_object.script.name).split("."))[-1] - # name_script = str(((((scripttt).split("/"))[-1]).split("."))[0]) - print("name of script", self.name_script) - print("sample script", self.sample_id) - print("existing_script", self.existing_script) - - """if file is not a sample script and not a existing script then only audit it""" - if not self.existing_script and not self.original_script_object.sample_script: - print("----Auditing----") - script1 = str(self.file_path) - doc = open(script1, 'rb').read() - file = ContentFile( - doc, - (script1.split("/"))[-1], - ) - language_code = "en" - result = filesystem.new_screenplay_without_audit_in_background( - self.audit_user, - self.audit_user.username, - str(self.name_script), - file, - "script-original", - language_code, - ) - audit_id = result.get("script", {}).get("id") - ScriptAuditModel.objects.update_or_create( - script=Script.objects.get( - id=audit_id - ), - defaults={"status": States.STARTED} - ) - audit = NeutralAudit(audit_id, True) - status = ScriptAuditModel.objects.get( - script=Script.objects.get( - id=audit_id - ) - ) - try: - if self.file_extension == "fdx": - audit.audit_fdx() - else: - audit.audit() - status.status = "SUCCESS" - status.save() - to_email = [self.user.email] - email_code = 'SB1' - #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) - except Exception as e: - print("Error of Audit is:", e) - status.status = "FAILURE" - status.save() - to_email = [self.user.email] - email_code = 'SB2' - #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) - print( - "Script Audit failed due to some internal error." - " If you have made any payment for conversion " - "that will be refunded") - # email for failure - to = self.user.email - key_value = { - "User": self.user.username, - } - sendmail(to_email=[to], email_code="PP21", key_value=key_value) - # auto refund code - try: - auto_refund(self.translated_script_object.central_payment_id) - except Exception as e: - print("No Refund -> ", e) - return self.response - - file_path_ = filesystem.get_file_path(audit_id, "script-csv") - script_data = MNFScriptDatabase.objects.get(script_id=self.original_script_object.script_id) - script_data.audit_id = str(audit_id) - script_data.save() - # to_email = [self.user.email] - # email_code = 'SB1' - #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) - try: - df = pd.read_csv(file_path_, encoding="utf-8") - except UnicodeError: - df = pd.read_csv(file_path_, encoding="utf-16") - pd.set_option('display.max_rows', None) - pd.set_option('display.max_columns', None) - self.list_of_lists = df.values.tolist() - print("Audit Done") - - - - elif self.original_script_object.sample_script: - sample_script = SampleScript.objects.get(sample_id=self.original_script_object.sample_id.sample_id) - if sample_script.audit_id: - audit_id = sample_script.audit_id - file_path_ = filesystem.get_file_path(audit_id, "script-csv") - try: - df = pd.read_csv(file_path_, encoding="utf-8") - except UnicodeError: - df = pd.read_csv(file_path_, encoding="utf-16") - pd.set_option('display.max_rows', None) - pd.set_option('display.max_columns', None) - self.list_of_lists = df.values.tolist() - else: - print("----Auditing----") - script1 = str(self.file_path) - doc = open(script1, 'rb').read() - file = ContentFile( - doc, - (script1.split("/"))[-1], - ) - language_code = "en" - result = filesystem.new_screenplay_without_audit_in_background( - self.audit_user, - self.audit_user.username, - str(self.name_script), - file, - "script-original", - language_code, - ) - audit_id = result.get("script", {}).get("id") - ScriptAuditModel.objects.update_or_create( - script=Script.objects.get( - id=audit_id - ), - defaults={"status": States.STARTED} - ) - audit = NeutralAudit(audit_id, False) - status = ScriptAuditModel.objects.get( - script=Script.objects.get( - id=audit_id - ) - ) - try: - if self.file_extension == "fdx": - audit.audit_fdx() - else: - audit.audit() - status.status = "SUCCESS" - status.save() - to_email = [self.user.email] - email_code = 'SB1' - #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) - except: - status.status = "FAILURE" - status.save() - to_email = [self.user.email] - email_code = 'SB2' - #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) - print( - "Script Audit failed due to some internal error." - " If you have made any payment for conversion " - "that will be refunded") - # email for failure - to = self.user.email - key_value = { - "User": self.user.username, - } - sendmail(to_email=[to], email_code="PP21", key_value=key_value) - # auto refund code - try: - auto_refund(self.translated_script_object.central_payment_id) - except Exception as e: - print("No Refund -> ", e) - return self.response - file_path_ = filesystem.get_file_path( - audit_id, "script-csv") - sample_script.audit_id = str(audit_id) - sample_script.save() - try: - df = pd.read_csv(file_path_, encoding="utf-8") - except UnicodeError: - df = pd.read_csv(file_path_, encoding="utf-16") - pd.set_option('display.max_rows', None) - pd.set_option('display.max_columns', None) - dataframe = df - self.list_of_lists = dataframe.values.tolist() - - - elif self.existing_script: - falser = False - if falser: - # if MNFScriptDatabase.objects.get(script_id=self.original_script_object.script_id).audit_id: - audit_id = MNFScriptDatabase.objects.get(script_id=self.original_script_object.script_id).audit_id - file_path_ = filesystem.get_file_path(audit_id, "script-csv") - try: - df = pd.read_csv(file_path_, encoding="utf-8") - except UnicodeError: - df = pd.read_csv(file_path_, encoding="utf-16") - pd.set_option('display.max_rows', None) - pd.set_option('display.max_columns', None) - dataframe = df - self.list_of_lists = dataframe.values.tolist() - else: - print("----Auditing----") - script1 = str(self.file_path) - doc = open(script1, 'rb').read() - file = ContentFile( - doc, - (script1.split("/"))[-1], - ) - language_code = "en" - unique_str = "_" + str(int(time.time())) - result = filesystem.new_screenplay_without_audit_in_background( - self.audit_user, - self.audit_user.username, - str(self.name_script)+str(unique_str), - file, - "script-original", - language_code, - ) - audit_id = result.get("script", {}).get("id") - ScriptAuditModel.objects.update_or_create( - script=Script.objects.get( - id=audit_id - ), - defaults={"status": States.STARTED} - ) - audit = NeutralAudit(audit_id, False) - status = ScriptAuditModel.objects.get( - script=Script.objects.get( - id=audit_id - ) - ) - try: - if self.file_extension == "fdx": - audit.audit_fdx() - else: - audit.audit() - status.status = "SUCCESS" - status.save() - to_email = [self.user.email] - email_code = 'SB1' - sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) - except: - status.status = "FAILURE" - status.save() - to_email = [self.user.email] - email_code = 'SB2' - sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) - print( - "Script Audit failed due to some internal error." - " If you have made any payment for conversion " - "that will be refunded") - # email for failure - to = self.user.email - key_value = { - "User": self.user.username, - } - sendmail(to_email=[to], email_code="PP21", key_value=key_value) - # auto refund code - try: - auto_refund(self.translated_script_object.central_payment_id) - except Exception as e: - print("No Refund -> ", e) - return self.response - file_path_ = filesystem.get_file_path( - audit_id, "script-csv") - script_data = MNFScriptDatabase.objects.get(script_id=self.original_script_object.script_id) - script_data.audit_id = str(audit_id) - script_data.save() - to_email = [self.user.email] - email_code = 'SB1' - sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) - try: - df = pd.read_csv(file_path_, encoding="utf-8") - except UnicodeError: - df = pd.read_csv(file_path_, encoding="utf-16") - pd.set_option('display.max_rows', None) - pd.set_option('display.max_columns', None) - dataframe = df - self.list_of_lists = dataframe.values.tolist() - - sys.stdout = original_stdout - print("Audit Done") - self.translated_script_object.status = "Audited" - self.translated_script_object.save() - - - """Translation Code Starts here""" - print("list of lists -> ", self.list_of_lists) - dataframe = self.list_of_lists - - args = [self.full_dialogue_option_choices, self.sentence_dialogue_option_choices, self.other_option_choices] - - kwargs = { - "user": self.translated_script_object.user_id, - "iteration_no": self.iteration_no, - 'dataframe': dataframe, - "non_dial_src_lang": self.original_script_object.nondial_src_language, - "non_dial_src_script": self.original_script_object.nondial_src_script, - "non_dial_dest_lang": self.translated_script_object.nondial_dest_language, - "non_dial_dest_script": self.translated_script_object.nondial_dest_script, - "dial_src_lang": self.original_script_object.dial_src_language, - "dial_src_script": self.original_script_object.dial_src_script, - "dial_dest_lang": self.translated_script_object.dial_dest_language, - "dial_dest_script": self.translated_script_object.dial_dest_script, - "translation_id": self.translated_script_object.translation_id, - "script_id": self.original_script_object.script_id - } - - # original_stdout = sys.stdout - - try: - ScriptTranslation(*args, **kwargs) - - except Exception as e: - self.translated_script_object.status = "Failed" - self.translated_script_object.error_desc = str(e) - self.translated_script_object.save() - print("Error in Conversion is:", e) - print("Script translation failed due to some code error. If you have made any payment for conversion" - " that will be refunded") - - # email for failure - to = self.user.email - key_value = { - "User": self.user.username, - } - sendmail(to_email=[to], email_code="PP21", key_value=key_value) - # auto refund code - try: - auto_refund(self.translated_script_object.central_payment_id) - except Exception as e: - print("No Refund due to error", e) - return self.response - - """Translation Code Ends Here""" - - - - sys.stdout = original_stdout - - self.translated_script_object = ScriptTranslations.objects.get( - translation_id=self.translated_script_object.translation_id) - - """Juggernaut Payment Updation""" - try: - if self.juggernaut_pages_deduction: - user_data = JuggernautPackage.objects.filter(user_id = self.user) - if user_data.count() == 1: - pass - else: - self.session = {} - try: - if user_data.count() > 1: - max_beat = 0 - for i in user_data: - if i.conversion_pages >= max_beat: - user_data = i - self.session['user_data'] = str(user_data.id) - except Exception as e: - print("Juggernaut error is",e) - max_beat = 0 - - self.session['user_data'] = str(user_data.id) - update_juggernaut(self, - user_id=self.user.id, - service_name="conversion", - conversion_pages=self.juggernaut_pages_deduction, - associated_project=self.original_script_object, - translation_language=self.language_set) - self.original_script_object = MNFScriptDatabase.objects.get( - script_id=self.original_script_object.script_id) - self.original_script_object.is_juggernaut_used = True - # if script_original.languages_juggernaut != "": - # # script_original.languages_juggernaut = str(script_original.languages_juggernaut) + "," + str( - # # script_translated.dial_dest_language) - # else: - # script_original.languages_juggernaut = str(script_translated.dial_dest_language) - self.original_script_object.save() - except Exception as e: - self.translated_script_object.error_desc = str(e) - self.translated_script_object.save() - print("Error in juggernaut updation is",e) - """Juggernaut Payment Updation Done""" - - - - """Translation Completion mail here""" - if not self.translated_script_object.lpp: - to = self.user.email - key_value = { - "User": self.user.username, - "title": self.original_script_object.script_title - } - sendmail(to_email=[to], email_code="PP18", key_value=key_value) - - """Translation Completion mail done""" - - - # adding file to s3 output folder - - object_name = "OUTPUT/" + (self.translated_script_object.translated_script_path.split("/"))[-1] - filee = basePath + self.translated_script_object.translated_script_path - # Upload the file - - bucket = "conversion-kitchen" - s3_client = boto3.client('s3', - aws_access_key_id="AKIAQVLBBGCB45RMLKVW", - aws_secret_access_key="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", - region_name="ap-south-1" - ) - try: - response = s3_client.upload_file(filee, bucket, object_name) - s3_url = f"https://{bucket}.s3.ap-south-1.amazonaws.com/{object_name}" - - print(response) - except Exception as e: - self.translated_script_object.error_desc = "Error in s3 output upload is " + str(e) - self.translated_script_object.save() - print("Error in s3 output upload is", e) - - - - """Vetting Process if Choosen""" - # sys.stdout = original_stdout - if self.translated_script_object.lpp: - X = LPPTASKDatabase() - X.user_id = self.translated_script_object.user_id - X.usernote = "Kindly check if the translated file is correct as per the Uploaded Document!" - X.translated_script = self.translated_script_object - X.generated_from = "conversion" - temp_amount = self.amount_without_subscrption - X.amoutgiventolpp_action = round((temp_amount / 2), 2) - X.amoutgiventolpp_dialogue = round((temp_amount / 2), 2) - X.save() - task_assigner(int(X.task_id), "conversion") - - - # adding file to s3 output folder - - # object_name = "OUTPUT/" + (self.translated_script_object.translated_script_path.split("/"))[-1] - # filee = basePath + self.translated_script_object.translated_script_path - # # Upload the file - # bucket = "conversion-kitchen" - # s3_client = boto3.client('s3', - # aws_access_key_id="AKIAQVLBBGCB45RMLKVW", - # aws_secret_access_key="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", - # region_name="ap-south-1" - # ) - # try: - # response = s3_client.upload_file(filee, bucket, object_name) - # s3_url = f"https://{bucket}.s3.ap-south-1.amazonaws.com/{object_name}" - - # print(response) - # except Exception as e: - # print("Error is", e) - - - else: - - """Blockchain Upload Starts here""" - # sys.stdout = original_stdout - scriptconversion = {} - try: - print("trying blockchain 1") - current_datetime = datetime.datetime.now() - if UserCredentialsForBlockchain.objects.filter(user=self.user).exists(): - obj = self.translated_script_object - obj2 = self.original_script_object - temp1 = str(obj2.script) - temp2 = str(obj.translated_script_path) - uploaded_script = f"{basePath}/media/{temp1}" - translated_scripttt = f"{basePath}{temp2}" - print("blockchain script conversion 3", uploaded_script, translated_scripttt) - with open(uploaded_script, 'rb') as f: - hash = uploadDataToIPFSNode(f) - scriptconversion["original_scriptFile_hash"] = hash - scriptconversion["original_scriptFile_path"] = uploaded_script - scriptconversion["date_at"] = current_datetime.strftime("%Y-%m-%d %H:%M:%S") - print("blockchain script conversion 4") - with open(translated_scripttt, 'rb') as f1: - hash = uploadDataToIPFSNode(f1) - scriptconversion["translated_scriptFile_hash"] = hash - scriptconversion["translated_scriptFile_path"] = translated_scripttt - print("blockchain script conversion 5") - - if obj.converted_audit_id: - print("audit blockchain") - print("blockchain script conversion 5.1") - # blockchain upload of csv-json data - adit_id = obj.converted_audit_id - - file_to_audit = File.objects.get( - script=adit_id, - type="script-csv" - ) - csv_script_path = file_to_audit.file.path - df = pd.read_csv(csv_script_path) - df = df.loc[:, ["content", "script_element"]] - script_json: dict = json.loads(utilities.csv_to_json(df)) - with tempfile.TemporaryDirectory() as temp_dir: - print("Temporary directory created:", temp_dir) - temp_filename = os.path.join(temp_dir, 'script_json_file.json') - print(temp_filename) - with open(temp_filename, 'w') as json_file: - json.dump(script_json, json_file, indent=4) - script_json = {} - script_path1 = temp_filename - # script_size = file_to_audit_docx.file.size - with open(script_path1, 'rb') as _file: - hash2 = uploadDataToIPFSNode(_file) - script_json["script_file_path"] = script_path1 - script_json["script_file"] = hash2 - script_json["type"] = "script-json" - scriptconversion["script-json"] = script_json - print("blockchain script conversion 5.2") - - blockchain_obj = UserCredentialsForBlockchain.objects.get(user=self.user) - UserId = blockchain_obj.user_id - Project = obj.translation_id - Data = str(scriptconversion) - userPrivateKey = blockchain_obj.privateKey - userkey = decryptionOfPrivate(userPrivateKey) - tx_id, tx_gas_fee = UploadConversionData(OWNER_KEY, blockchain_obj.publicKey, UserId, str(Project), - Data) - - print("Tx id -> ", tx_id,tx_gas_fee) - print(type(tx_id)) - - # user_infos = user_info(tx_hash=tx_id, service="Conversion", gas_fee=2345432345123456) - # addition_result = user_infos.update_info(request) - try: - user_infos = user_info(tx_hash=tx_id, service="Conversion", gas_fee=tx_gas_fee, - script_name=self.name_script) - addition_result = user_infos.update_info(self) - print("Blockchain Result -> ",addition_result) - except Exception as e: - print("Error:", e) - - print("blockchain script conversion 6") - certificatepath = certificateGenrate(self.user.username, "script conversion", hash) - hash = hash_decrypation(hash) - to_email = [self.user.email] - email_code = 'BL1' - key_value = { - "service": "script conversion", - "hash": hash, - "public key": blockchain_obj.publicKey, - "private key": userkey.decode('utf-8'), - "Transaction Hash": tx_id - } - sendmail(to_email=to_email, email_code=email_code,key_value=key_value, filePath=certificatepath) - except Exception as e: - self.translated_script_object.error_desc = "Error in blockchain is " + str(e) - self.translated_script_object.save() - print("Error in blockchain is", e) - - """Blockchain Upload Ends here""" - - - - """Process Completed""" - self.translated_script_object = ScriptTranslations.objects.get( - translation_id=self.translated_script_object.translation_id) - self.translated_script_object.status = "Completed" - - try: - self.translated_script_object.blockchain_txhash = tx_id - self.translated_script_object.translated_script_pdf = s3_url - except: - self.translated_script_object.translated_script_pdf = s3_url - self.translated_script_object.save() - - return self.response - - - - -# from pathlib import Path -# basePath = Path(__file__).resolve().parent.parent -# translation_script = ScriptTranslations.objects.get(translation_id="") -# -# conversion_params = { -# "user": translation_script.user_id, -# "file_path": str(basePath) + "/media/" + translation_script.script_link_id.script.name, -# "original_script_object": translation_script.script_link_id, -# "translated_script_object": translation_script, -# "sample_id": None, -# "existing_scrip": None -# } - -# obj = Conversion(**conversion_params) +import sys +import os +import boto3 +import pandas as pd +import datetime +import time +import json +import tempfile + +# django +from django.core.files.base import ContentFile + +# all external imports +from scriptAudit.models import States +from centralisedFileSystem.models import Script, File +from scriptAudit.models import ScriptAuditModel +from mnfapp.models import MNFScriptDatabase, SampleScript, ScriptTranslations +from users.models import UserCredentialsForBlockchain,BlockchainUserInfo +from lpp.models import LPPTASKDatabase + +from centralizePayment.views import auto_refund +from juggernaut.views import update_juggernaut +from juggernaut.models import JuggernautPackage +from auto_email.views import sendmail +from lpp.views import task_assigner +from utils import filesystem, utilities +from conversion.translation.newconversion import ScriptTranslation +from scriptAudit.mnf_script_audit import NeutralAudit +from Blockchain2.DataStorage import uploadDataToIPFSNode +from Blockchain2.decryption import decryptionOfPrivate, decryptionOfUrl, download_file_System,viewDecryptionOfUrl,hash_decrypation +from Blockchain2.Conversion import UploadConversionData, getConversion, deleteConversion,scriptGetUserprojectIds +from Blockchain2.blockchainsetting import OWNER_KEY +from Blockchain2.block_user_info import user_info +from lpp.certificate.createCertificate import certificateGenrate +from MNF.settings import BasePath + +basePath = BasePath() + +"""Converts a screenplay file""" + + +class Conversion: + + def __init__(self, **conversion_params): + self.audit_user = conversion_params['audit_user'] + self.user = conversion_params['user'] + self.file_path = conversion_params['file_path'] + self.original_script_object = MNFScriptDatabase.objects.get( + script_id=conversion_params['original_script_id']) + self.translated_script_object = ScriptTranslations.objects.get( + translation_id=conversion_params['translated_script_id']) + self.sample_id = conversion_params['sample_id'] + self.existing_script = conversion_params['existing_script'] + self.iteration_no = conversion_params['iteration_no'] + self.juggernaut_pages_deduction = conversion_params["juggernaut_pages_deduction"] + self.language_set = conversion_params["language_set"] + self.amount_without_subscrption = conversion_params["amount_without_subscrption"] + self.response = {} + + print("Conversion Process Initializing") + # original_stdout = sys.stdout + + """Initializing Variables""" + # script_id = request.session["script_id"] + # original_script = MNFScriptDatabase.objects.get(script_id=script_id) + # translated_script = ScriptTranslations.objects.get(translation_id=request.session.get("translation_id", None)) + + # Getting all choices of user regarding Full Dialogues Translation + self.full_dialogue_option_choices = [True if value.strip() == "True" else False for value in + str(self.translated_script_object.full_dialogue_option_choices).split(",")] + + # Getting all choices of user regarding Words of Dialogues Translation + self.sentence_dialogue_option_choices = [True if value.strip() == "True" else False for value in + str(self.translated_script_object.sentence_dialogue_option_choices).split(",")] + + # Getting all choices of user regarding translation and transliteration choices of slug, speaker, etc. + self.other_option_choices = [True if value.strip() == "True" else False for value in + str(self.translated_script_object.other_option_choices).split(",")] + + self.name_script = (str(((self.original_script_object.script.name).split("/"))[-1]).split("."))[0] + self.file_extension = (str(self.original_script_object.script.name).split("."))[-1] + + # Dual dialogue + # if dual_dialogue_option := request.POST.get('dual_dialogue_option') == "on": + + # dual_left_language = request.POST.get('dual_left_language') + # dual_left_script = request.POST.get('dual_left_script') + + # # lpp vetting + # if lpp_vetting := request.POST.get('lpp_vetting') == "on": + + # lpp_vetting_type = request.POST.get('radioGroup') + + # if lpp_vetting_type == "radioOption1": + + # pass + + # elif lpp_vetting_type == "radioOption1": + + # pass + + def convert(self): + """Audit Code starts here""" + + print("Conversion Auditing is starting") + original_stdout = sys.stdout + # x = MNFScriptDatabase.objects.get(script_id=request.POST['script_id']) + # scripttt = basePath + "/media/" + original_script.script.name + # exten = (str(self.original_script_object.script.name).split("."))[-1] + # name_script = str(((((scripttt).split("/"))[-1]).split("."))[0]) + print("name of script", self.name_script) + print("sample script", self.sample_id) + print("existing_script", self.existing_script) + + """if file is not a sample script and not a existing script then only audit it""" + if not self.existing_script and not self.original_script_object.sample_script: + print("----Auditing----") + script1 = str(self.file_path) + doc = open(script1, 'rb').read() + file = ContentFile( + doc, + (script1.split("/"))[-1], + ) + language_code = "en" + result = filesystem.new_screenplay_without_audit_in_background( + self.audit_user, + self.audit_user.username, + str(self.name_script), + file, + "script-original", + language_code, + ) + audit_id = result.get("script", {}).get("id") + ScriptAuditModel.objects.update_or_create( + script=Script.objects.get( + id=audit_id + ), + defaults={"status": States.STARTED} + ) + audit = NeutralAudit(audit_id, True) + status = ScriptAuditModel.objects.get( + script=Script.objects.get( + id=audit_id + ) + ) + try: + if self.file_extension == "fdx": + audit.audit_fdx() + else: + audit.audit() + status.status = "SUCCESS" + status.save() + to_email = [self.user.email] + email_code = 'SB1' + #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) + except Exception as e: + print("Error of Audit is:", e) + status.status = "FAILURE" + status.save() + to_email = [self.user.email] + email_code = 'SB2' + #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) + print( + "Script Audit failed due to some internal error." + " If you have made any payment for conversion " + "that will be refunded") + # email for failure + to = self.user.email + key_value = { + "User": self.user.username, + } + sendmail(to_email=[to], email_code="PP21", key_value=key_value) + # auto refund code + try: + auto_refund(self.translated_script_object.central_payment_id) + except Exception as e: + print("No Refund -> ", e) + return self.response + + file_path_ = filesystem.get_file_path(audit_id, "script-csv") + script_data = MNFScriptDatabase.objects.get(script_id=self.original_script_object.script_id) + script_data.audit_id = str(audit_id) + script_data.save() + # to_email = [self.user.email] + # email_code = 'SB1' + #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) + try: + df = pd.read_csv(file_path_, encoding="utf-8") + except UnicodeError: + df = pd.read_csv(file_path_, encoding="utf-16") + pd.set_option('display.max_rows', None) + pd.set_option('display.max_columns', None) + self.list_of_lists = df.values.tolist() + print("Audit Done") + + + + elif self.original_script_object.sample_script: + sample_script = SampleScript.objects.get(sample_id=self.original_script_object.sample_id.sample_id) + if sample_script.audit_id: + audit_id = sample_script.audit_id + file_path_ = filesystem.get_file_path(audit_id, "script-csv") + try: + df = pd.read_csv(file_path_, encoding="utf-8") + except UnicodeError: + df = pd.read_csv(file_path_, encoding="utf-16") + pd.set_option('display.max_rows', None) + pd.set_option('display.max_columns', None) + self.list_of_lists = df.values.tolist() + else: + print("----Auditing----") + script1 = str(self.file_path) + doc = open(script1, 'rb').read() + file = ContentFile( + doc, + (script1.split("/"))[-1], + ) + language_code = "en" + result = filesystem.new_screenplay_without_audit_in_background( + self.audit_user, + self.audit_user.username, + str(self.name_script), + file, + "script-original", + language_code, + ) + audit_id = result.get("script", {}).get("id") + ScriptAuditModel.objects.update_or_create( + script=Script.objects.get( + id=audit_id + ), + defaults={"status": States.STARTED} + ) + audit = NeutralAudit(audit_id, False) + status = ScriptAuditModel.objects.get( + script=Script.objects.get( + id=audit_id + ) + ) + try: + if self.file_extension == "fdx": + audit.audit_fdx() + else: + audit.audit() + status.status = "SUCCESS" + status.save() + to_email = [self.user.email] + email_code = 'SB1' + #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) + except: + status.status = "FAILURE" + status.save() + to_email = [self.user.email] + email_code = 'SB2' + #sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) + print( + "Script Audit failed due to some internal error." + " If you have made any payment for conversion " + "that will be refunded") + # email for failure + to = self.user.email + key_value = { + "User": self.user.username, + } + sendmail(to_email=[to], email_code="PP21", key_value=key_value) + # auto refund code + try: + auto_refund(self.translated_script_object.central_payment_id) + except Exception as e: + print("No Refund -> ", e) + return self.response + file_path_ = filesystem.get_file_path( + audit_id, "script-csv") + sample_script.audit_id = str(audit_id) + sample_script.save() + try: + df = pd.read_csv(file_path_, encoding="utf-8") + except UnicodeError: + df = pd.read_csv(file_path_, encoding="utf-16") + pd.set_option('display.max_rows', None) + pd.set_option('display.max_columns', None) + dataframe = df + self.list_of_lists = dataframe.values.tolist() + + + elif self.existing_script: + falser = False + if falser: + # if MNFScriptDatabase.objects.get(script_id=self.original_script_object.script_id).audit_id: + audit_id = MNFScriptDatabase.objects.get(script_id=self.original_script_object.script_id).audit_id + file_path_ = filesystem.get_file_path(audit_id, "script-csv") + try: + df = pd.read_csv(file_path_, encoding="utf-8") + except UnicodeError: + df = pd.read_csv(file_path_, encoding="utf-16") + pd.set_option('display.max_rows', None) + pd.set_option('display.max_columns', None) + dataframe = df + self.list_of_lists = dataframe.values.tolist() + else: + print("----Auditing----") + script1 = str(self.file_path) + doc = open(script1, 'rb').read() + file = ContentFile( + doc, + (script1.split("/"))[-1], + ) + language_code = "en" + unique_str = "_" + str(int(time.time())) + result = filesystem.new_screenplay_without_audit_in_background( + self.audit_user, + self.audit_user.username, + str(self.name_script)+str(unique_str), + file, + "script-original", + language_code, + ) + audit_id = result.get("script", {}).get("id") + ScriptAuditModel.objects.update_or_create( + script=Script.objects.get( + id=audit_id + ), + defaults={"status": States.STARTED} + ) + audit = NeutralAudit(audit_id, False) + status = ScriptAuditModel.objects.get( + script=Script.objects.get( + id=audit_id + ) + ) + try: + if self.file_extension == "fdx": + audit.audit_fdx() + else: + audit.audit() + status.status = "SUCCESS" + status.save() + to_email = [self.user.email] + email_code = 'SB1' + sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) + except: + status.status = "FAILURE" + status.save() + to_email = [self.user.email] + email_code = 'SB2' + sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) + print( + "Script Audit failed due to some internal error." + " If you have made any payment for conversion " + "that will be refunded") + # email for failure + to = self.user.email + key_value = { + "User": self.user.username, + } + sendmail(to_email=[to], email_code="PP21", key_value=key_value) + # auto refund code + try: + auto_refund(self.translated_script_object.central_payment_id) + except Exception as e: + print("No Refund -> ", e) + return self.response + file_path_ = filesystem.get_file_path( + audit_id, "script-csv") + script_data = MNFScriptDatabase.objects.get(script_id=self.original_script_object.script_id) + script_data.audit_id = str(audit_id) + script_data.save() + to_email = [self.user.email] + email_code = 'SB1' + sendmail(to_email=to_email, email_code=email_code,key_value={"script_name":self.name_script}) + try: + df = pd.read_csv(file_path_, encoding="utf-8") + except UnicodeError: + df = pd.read_csv(file_path_, encoding="utf-16") + pd.set_option('display.max_rows', None) + pd.set_option('display.max_columns', None) + dataframe = df + self.list_of_lists = dataframe.values.tolist() + + sys.stdout = original_stdout + print("Audit Done") + self.translated_script_object.status = "Audited" + self.translated_script_object.save() + + + """Translation Code Starts here""" + print("list of lists -> ", self.list_of_lists) + dataframe = self.list_of_lists + + args = [self.full_dialogue_option_choices, self.sentence_dialogue_option_choices, self.other_option_choices] + + kwargs = { + "user": self.translated_script_object.user_id, + "iteration_no": self.iteration_no, + 'dataframe': dataframe, + "non_dial_src_lang": self.original_script_object.nondial_src_language, + "non_dial_src_script": self.original_script_object.nondial_src_script, + "non_dial_dest_lang": self.translated_script_object.nondial_dest_language, + "non_dial_dest_script": self.translated_script_object.nondial_dest_script, + "dial_src_lang": self.original_script_object.dial_src_language, + "dial_src_script": self.original_script_object.dial_src_script, + "dial_dest_lang": self.translated_script_object.dial_dest_language, + "dial_dest_script": self.translated_script_object.dial_dest_script, + "translation_id": self.translated_script_object.translation_id, + "script_id": self.original_script_object.script_id + } + + # original_stdout = sys.stdout + + try: + ScriptTranslation(*args, **kwargs) + + except Exception as e: + self.translated_script_object.status = "Failed" + self.translated_script_object.error_desc = str(e) + self.translated_script_object.save() + print("Error in Conversion is:", e) + print("Script translation failed due to some code error. If you have made any payment for conversion" + " that will be refunded") + + # email for failure + to = self.user.email + key_value = { + "User": self.user.username, + } + sendmail(to_email=[to], email_code="PP21", key_value=key_value) + # auto refund code + try: + auto_refund(self.translated_script_object.central_payment_id) + except Exception as e: + print("No Refund due to error", e) + return self.response + + """Translation Code Ends Here""" + + + + sys.stdout = original_stdout + + self.translated_script_object = ScriptTranslations.objects.get( + translation_id=self.translated_script_object.translation_id) + + """Juggernaut Payment Updation""" + try: + if self.juggernaut_pages_deduction: + user_data = JuggernautPackage.objects.filter(user_id = self.user) + if user_data.count() == 1: + pass + else: + self.session = {} + try: + if user_data.count() > 1: + max_beat = 0 + for i in user_data: + if i.conversion_pages >= max_beat: + user_data = i + self.session['user_data'] = str(user_data.id) + except Exception as e: + print("Juggernaut error is",e) + max_beat = 0 + + self.session['user_data'] = str(user_data.id) + update_juggernaut(self, + user_id=self.user.id, + service_name="conversion", + conversion_pages=self.juggernaut_pages_deduction, + associated_project=self.original_script_object, + translation_language=self.language_set) + self.original_script_object = MNFScriptDatabase.objects.get( + script_id=self.original_script_object.script_id) + self.original_script_object.is_juggernaut_used = True + # if script_original.languages_juggernaut != "": + # # script_original.languages_juggernaut = str(script_original.languages_juggernaut) + "," + str( + # # script_translated.dial_dest_language) + # else: + # script_original.languages_juggernaut = str(script_translated.dial_dest_language) + self.original_script_object.save() + except Exception as e: + self.translated_script_object.error_desc = str(e) + self.translated_script_object.save() + print("Error in juggernaut updation is",e) + """Juggernaut Payment Updation Done""" + + + + """Translation Completion mail here""" + if not self.translated_script_object.lpp: + to = self.user.email + key_value = { + "User": self.user.username, + "title": self.original_script_object.script_title + } + sendmail(to_email=[to], email_code="PP18", key_value=key_value) + + """Translation Completion mail done""" + + + # adding file to s3 output folder + + object_name = "OUTPUT/" + (self.translated_script_object.translated_script_path.split("/"))[-1] + filee = basePath + self.translated_script_object.translated_script_path + # Upload the file + + bucket = "conversion-kitchen" + s3_client = boto3.client('s3', + aws_access_key_id="AKIAQVLBBGCB45RMLKVW", + aws_secret_access_key="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", + region_name="ap-south-1" + ) + try: + response = s3_client.upload_file(filee, bucket, object_name) + s3_url = f"https://{bucket}.s3.ap-south-1.amazonaws.com/{object_name}" + + print(response) + except Exception as e: + self.translated_script_object.error_desc = "Error in s3 output upload is " + str(e) + self.translated_script_object.save() + print("Error in s3 output upload is", e) + + + + """Vetting Process if Choosen""" + # sys.stdout = original_stdout + if self.translated_script_object.lpp: + X = LPPTASKDatabase() + X.user_id = self.translated_script_object.user_id + X.usernote = "Kindly check if the translated file is correct as per the Uploaded Document!" + X.translated_script = self.translated_script_object + X.generated_from = "conversion" + temp_amount = self.amount_without_subscrption + X.amoutgiventolpp_action = round((temp_amount / 2), 2) + X.amoutgiventolpp_dialogue = round((temp_amount / 2), 2) + X.save() + task_assigner(int(X.task_id), "conversion") + + + # adding file to s3 output folder + + # object_name = "OUTPUT/" + (self.translated_script_object.translated_script_path.split("/"))[-1] + # filee = basePath + self.translated_script_object.translated_script_path + # # Upload the file + # bucket = "conversion-kitchen" + # s3_client = boto3.client('s3', + # aws_access_key_id="AKIAQVLBBGCB45RMLKVW", + # aws_secret_access_key="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", + # region_name="ap-south-1" + # ) + # try: + # response = s3_client.upload_file(filee, bucket, object_name) + # s3_url = f"https://{bucket}.s3.ap-south-1.amazonaws.com/{object_name}" + + # print(response) + # except Exception as e: + # print("Error is", e) + + + else: + + """Blockchain Upload Starts here""" + # sys.stdout = original_stdout + scriptconversion = {} + try: + print("trying blockchain 1") + current_datetime = datetime.datetime.now() + if UserCredentialsForBlockchain.objects.filter(user=self.user).exists(): + obj = self.translated_script_object + obj2 = self.original_script_object + temp1 = str(obj2.script) + temp2 = str(obj.translated_script_path) + uploaded_script = f"{basePath}/media/{temp1}" + translated_scripttt = f"{basePath}{temp2}" + print("blockchain script conversion 3", uploaded_script, translated_scripttt) + with open(uploaded_script, 'rb') as f: + hash = uploadDataToIPFSNode(f) + scriptconversion["original_scriptFile_hash"] = hash + scriptconversion["original_scriptFile_path"] = uploaded_script + scriptconversion["date_at"] = current_datetime.strftime("%Y-%m-%d %H:%M:%S") + print("blockchain script conversion 4") + with open(translated_scripttt, 'rb') as f1: + hash = uploadDataToIPFSNode(f1) + scriptconversion["translated_scriptFile_hash"] = hash + scriptconversion["translated_scriptFile_path"] = translated_scripttt + print("blockchain script conversion 5") + + if obj.converted_audit_id: + print("audit blockchain") + print("blockchain script conversion 5.1") + # blockchain upload of csv-json data + adit_id = obj.converted_audit_id + + file_to_audit = File.objects.get( + script=adit_id, + type="script-csv" + ) + csv_script_path = file_to_audit.file.path + df = pd.read_csv(csv_script_path) + df = df.loc[:, ["content", "script_element"]] + script_json: dict = json.loads(utilities.csv_to_json(df)) + with tempfile.TemporaryDirectory() as temp_dir: + print("Temporary directory created:", temp_dir) + temp_filename = os.path.join(temp_dir, 'script_json_file.json') + print(temp_filename) + with open(temp_filename, 'w') as json_file: + json.dump(script_json, json_file, indent=4) + script_json = {} + script_path1 = temp_filename + # script_size = file_to_audit_docx.file.size + with open(script_path1, 'rb') as _file: + hash2 = uploadDataToIPFSNode(_file) + script_json["script_file_path"] = script_path1 + script_json["script_file"] = hash2 + script_json["type"] = "script-json" + script_json["screenplay_name"] = str(self.name_script) + scriptconversion["script-json"] = script_json + print("blockchain script conversion 5.2") + + blockchain_obj = UserCredentialsForBlockchain.objects.get(user=self.user) + UserId = blockchain_obj.user_id + Project = obj.translation_id + Data = str(scriptconversion) + userPrivateKey = blockchain_obj.privateKey + userkey = decryptionOfPrivate(userPrivateKey) + tx_id, tx_gas_fee = UploadConversionData(OWNER_KEY, blockchain_obj.publicKey, UserId, str(Project), + Data) + + print("Tx id -> ", tx_id,tx_gas_fee) + print(type(tx_id)) + + # user_infos = user_info(tx_hash=tx_id, service="Conversion", gas_fee=2345432345123456) + # addition_result = user_infos.update_info(request) + try: + user_infos = user_info(tx_hash=tx_id, service="Conversion", gas_fee=tx_gas_fee, + script_name=self.name_script) + addition_result = user_infos.update_info(self) + print("Blockchain Result -> ",addition_result) + except Exception as e: + print("Error:", e) + + print("blockchain script conversion 6") + certificatepath = certificateGenrate(self.user.username, "script conversion", hash) + hash = hash_decrypation(hash) + to_email = [self.user.email] + email_code = 'BL1' + key_value = { + "service": "script conversion", + "hash": hash, + "public key": blockchain_obj.publicKey, + "private key": userkey.decode('utf-8'), + "Transaction Hash": tx_id + } + sendmail(to_email=to_email, email_code=email_code,key_value=key_value, filePath=certificatepath) + except Exception as e: + self.translated_script_object.error_desc = "Error in blockchain is " + str(e) + self.translated_script_object.save() + print("Error in blockchain is", e) + + """Blockchain Upload Ends here""" + + + + """Process Completed""" + self.translated_script_object = ScriptTranslations.objects.get( + translation_id=self.translated_script_object.translation_id) + self.translated_script_object.status = "Completed" + + try: + self.translated_script_object.blockchain_txhash = tx_id + self.translated_script_object.translated_script_pdf = s3_url + except: + self.translated_script_object.translated_script_pdf = s3_url + self.translated_script_object.save() + + return self.response + + + + +# from pathlib import Path +# basePath = Path(__file__).resolve().parent.parent +# translation_script = ScriptTranslations.objects.get(translation_id="") +# +# conversion_params = { +# "user": translation_script.user_id, +# "file_path": str(basePath) + "/media/" + translation_script.script_link_id.script.name, +# "original_script_object": translation_script.script_link_id, +# "translated_script_object": translation_script, +# "sample_id": None, +# "existing_scrip": None +# } + +# obj = Conversion(**conversion_params)