from multiprocessing import Process import os from centralisedFileSystem.models import Script from scriptAudit.models import ScriptAuditModel, States # from scriptAudit.tasks import NeutralAuditTask from scriptAudit.mnf_script_audit import NeutralAudit from datetime import datetime from django.core.files.base import ContentFile from utils.filesystem import new_screenplay, create_script_docx,get_file_path,new_screenplay_without_audit_in_background from .mnf_script_audit import NeutralAudit # from narration.vectorcode.code.vector_generation import vector_gen from time import sleep import time from django.conf import settings from django.template.loader import render_to_string from django.utils.html import strip_tags from django.core.mail import EmailMultiAlternatives def update_audit_status(script_id : str, status : str) -> None: ScriptAuditModel.objects.update_or_create( script = Script.objects.get( id = script_id ), defaults={"status" : status} ) def audit_in_background(script_id : str) -> None: # --------------------------------------------------- # for running audit without celery # try: update_audit_status(script_id, States.STARTED) except: update_audit_status(script_id, States.FAILURE) audit = NeutralAudit(script_id) process1 = Process(target=audit.audit_in_background()) process1.start() process1.join() # status = ScriptAuditModel.objects.get( # script = Script.objects.get( # id = script_id # )) # if status.status == "SUCCESS": # to_email = [request.user.email] # email_code = 'SB1' # sendmail(to_email=to_email , email_code=email_code ) # elif status.status == "FAILURE": # to_email = [request.user.email] # email_code = 'SB2' # sendmail(to_email=to_email , email_code=email_code ) # del audit # --------------------------------------------------- # --------------------------------------------------- # for running audit with celery # # uncomment only on AWS # NeutralAuditTask().delay( # script_id = script_id, # ) # --------------------------------------------------- def generate_script_id_for_pitchdeck(path,request): input_file = os.path.basename(path) input_file1 = os.path.splitext(input_file)[0] now = datetime.now() screenplay_name = input_file1 +"_"+ str(now) author = "mynextfilm-user" language = "en" script_file = path script_ext = script_file.split(".")[-1] script_file_name = screenplay_name + "." + script_ext print(script_file_name) with open(path, "rb") as script_file: file = ContentFile(script_file.read(), script_file_name, ) result = new_screenplay( request.user, author, screenplay_name, file, "script-original", language, ) script_id = result.get("script", {}).get("id") print("\n\n\n\nSCRIPT____ID :",script_id,"\n\n\n\n") return script_id def check_status_and_trigger_vector(script_id,v_id): """ this function is used to check the status of the script audit , if the status is SUCCESS this will generate a docx audited file and send it to vector generation this function accepts 2 parameters 1.script_id --> audit id 2.v_id vector id """ print("vector_id:",v_id) audit_completed = False while not audit_completed: status = ScriptAuditModel.objects.get( script = Script.objects.get( id = script_id )) print("waiting for audit to get complete") if status.status == "SUCCESS": try: a_path = get_file_path(str(script_id), "script-docx") vector_gen(a_path,v_id) audit_completed = True break except: create_script_docx(script_id) a_path = get_file_path(str(script_id), "script-docx") print("Audited script path is fetched") vector_gen(a_path,v_id) audit_completed = True break elif status.status == "FAILURE": print("Audit Failed") audit_completed = True def generate_script_id(path,request,id): """ the below function is used to generate script id and the function accepts a docx file path as a parameter """ input_file = os.path.basename(path) input_file1 = os.path.splitext(input_file)[0] now = datetime.now() screenplay_name = input_file1 +"_"+ str(id) author = "mynextfilm-user" language = "en" script_file = path script_ext = script_file.split(".")[-1] script_file_name = screenplay_name + "." + script_ext print(script_file_name) with open(path, "rb") as script_file: file = ContentFile(script_file.read(), script_file_name, ) result = new_screenplay_without_audit_in_background( request.user, author, screenplay_name, file, "script-original", language, ) script_id = result.get("script", {}).get("id") print("\n\n\n\nSCRIPT____ID :",script_id,"\n\n\n\n") try: update_audit_status(script_id, States.STARTED) except: update_audit_status(script_id, States.FAILURE) try: naudit = NeutralAudit(script_id) naudit.audit() ScriptAuditModel.objects.update_or_create( script = Script.objects.get( id = script_id ), defaults={"status" : "SUCCESS"} ) except: ScriptAuditModel.objects.update_or_create( script = Script.objects.get( id = script_id ), defaults={"status" : "FAILURE"} ) return script_id """ this below function is called when you want call audit + vector by giving the vectors """ def audit_vector_integration(path,v_id,request): print("vector_id:",v_id) script_id = generate_script_id(path,request,v_id) audit_completed = False status = ScriptAuditModel.objects.get( script = Script.objects.get( id = script_id )) if status.status == "SUCCESS": try: a_path = get_file_path(str(script_id), "script-docx") except: create_script_docx(script_id) a_path = get_file_path(str(script_id), "script-docx") print("Audited script path is fetched") vector_gen(a_path,v_id) elif status.status == "FAILURE": print("Audit Failed") # def audit_vector_integration_(path,id,request): # print("vector_id:",id) # script_id = generate_script_id(path,request,id) # audit_completed = False # while not audit_completed: # scripts = Script.objects.filter(screenplay__user=request.user) # for script in scripts: # if ScriptAuditModel.objects.filter(script=script).exists(): # audit_status_objects = ScriptAuditModel.objects.filter(script=script) # for audit_status_object in audit_status_objects: # script_audit_status = audit_status_object.status # if script_audit_status == States.SUCCESS: # try: # a_path = get_file_path(str(script_id), "script-docx") # except: # create_script_docx(script_id) # a_path = get_file_path(str(script_id), "script-docx") # print("Audited script path is fetched") # vector_gen(a_path,id) # elif script_audit_status == States.FAILURE: # raise Exception("Script Audit procress failed") # break # elif script_audit_status == States.STARTED or script_audit_status == States.PENDING: # # Wait for some time before checking the audit status again # sleep(10) # else: # raise Exception("Unexpected script audit status") # # If the loop breaks without returning, it means the audit status is FAILURE # raise Exception("Script audit failed") def send_email_to_user(user,screenplay_name,subject,message):# removed flag = 1 subject = subject + "." from_email = settings.EMAIL_HOST_USER to = user.email context = { "Name": user, "story_name": screenplay_name, "message" : message, } html_content = render_to_string( "audit/coree_email.html", context ) text_content = strip_tags(html_content) msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) msg.attach_alternative(html_content, "text/html") msg.send()