import pandas as pd from conversion.translation.newconversion import ScriptTranslation # django from django.core.files.base import ContentFile # all external imports from scriptAudit.mnf_script_audit import NeutralAudit from scriptAudit.models import States from utils import filesystem from auto_email.views import sendmail from centralizePayment.views import auto_refund from centralisedFileSystem.models import Script from scriptAudit.models import ScriptAuditModel from mnfapp.models import MNFScriptDatabase, SampleScript, ScriptTranslations """Converts a screenplay file""" class Conversion: def __init__(self, **conversion_params): self.user = conversion_params['user'] self.file_path = conversion_params['file_path'] self.original_script_object = conversion_params['original_script_object'] self.translated_script_object = conversion_params['translated_script_object'] self.sample_id = conversion_params.get('sample_id', None) self.existing_script = conversion_params.get('existing_script', None) self.iteration_no = conversion_params.get('iteration_no', None) 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.file_extension = (str(self.original_script_object.script.name).split("."))[-1] self.name_script = (str(self.original_script_object.script.name).split("."))[0] # 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") # 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.user, self.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) 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) 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) 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.user, self.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) except: status.status = "FAILURE" status.save() to_email = [self.user.email] email_code = 'SB2' sendmail(to_email=to_email, email_code=email_code) 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: 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" result = filesystem.new_screenplay_without_audit_in_background( self.user, self.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) except: status.status = "FAILURE" status.save() to_email = [self.user.email] email_code = 'SB2' sendmail(to_email=to_email, email_code=email_code) 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) 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 # # """Juggernaut Payment Updation""" # # sys.stdout = original_stdout # if self.juggernaut_pages_deduction: # # script_translated = ScriptTranslations.objects.get( # # translation_id=request.session.get('translation_id', None)) # update_juggernaut(request, user_id=self.user.id, service_name="conversion", # conversion_pages=request.session['juggernaut_pages_deduction'], # associated_project=original_script, # translation_language=request.session['language_set']) # original_script.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) # original_script.save() # """Juggernaut Payment Updation Done""" # # """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 = ScriptTranslations.objects.get(translation_id=request.session.get('translation_id', None)) # obj2 = MNFScriptDatabase.objects.get(script_id=script_id) # 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") # 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") # blockchain_obj = UserCredentialsForBlockchain.objects.get(user=self.user) # UserId = blockchain_obj.user_id # Project = request.session.get('translation_id', None) # 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) # # 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) # addition_result = user_infos.update_info(request) # 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: # print("Error in blockchain is", e) # # """Blockchain Upload Ends here""" # # """Translation Completion mail here""" # to = self.user.email # key_value = { # "User": self.user.username, # "title": original_script.script_title # } # sendmail(to_email=[to], email_code="PP18", key_value=key_value) # # """Translation Completion mail done""" # # """Vetting Process if Choosen""" # # sys.stdout = original_stdout # if translated_script.lpp: # # obj = ScriptTranslations.objects.get(translation_id=request.session.get('translation_id', None)) # # obj.lpp = True # # obj.save() # X = LPPTASKDatabase() # X.user_id = translated_script.user_id # X.usernote = "Kindly check if the translated file is correct as per the Uploaded Document!" # X.translated_script = translated_script # X.generated_from = "conversion" # temp_amount = request.session["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") # # """Vetting Process Done""" # # translated_script = ScriptTranslations.objects.get(translation_id=request.session.get("translation_id", None)) # translated_script.status = "Completed" # translated_script.save() # # keys_to_delete = [] # for key, value in request.session.items(): # if key not in ['_auth_user_id', '_auth_user_backend', '_auth_user_hash', '_session_init_timestamp_']: # keys_to_delete.append(key) # # print("Keys to be deleted is ->", keys_to_delete) # for key in keys_to_delete: # del request.session[key] # # return JsonResponse({}, status=200) # 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)