openai audit changes

This commit is contained in:
Ubuntu 2025-05-15 12:14:29 +00:00
parent 3ab7d8efcc
commit 97f5af0a48
4 changed files with 684 additions and 130 deletions

View File

@ -0,0 +1,77 @@
import csv
import pandas as pd
import os
from openai import OpenAI
import sys
def classify_lines(input_file_path, audit_ai_csv) -> list[str]:
from scriptAudit.utils import remove_empty_content,remove_leading_numbers, remove_numeric_only_content,remove_emptyline_rows,merge_consecutive_action_lines,merge_consecutive_dialogue_lines
from scriptAudit.utils import insert_blank_lines,add_fade_in_out,remove_asterisks, merge_consecutive_action_lines_new,extract_labeled_lines, remove_trailing_speaker
with open(input_file_path, "r") as f:
raw_lines = [line.strip() for line in f.readlines() if line.strip()]
chunked_results = []
client = OpenAI(api_key=os.getenv('openai_key'))
prompt = (
"You are a screenplay assistant. For each line below, classify it using one of these labels: "
"slugline, speaker, dialogue, action, parenthetical, transition. Return each line followed by its label in curly braces.\n\n"
)
for i in range(0, len(raw_lines), 20):
chunk = raw_lines[i:i + 20]
final_prompt = prompt + "\n".join(chunk)
response = client.responses.create(
model="gpt-4o",
input=[
{
"role": "developer",
"content": """You are a screenplay auditor. For each line below, classify it using one of these labels:
slugline, speaker, dialogue, action, parenthetical, transition, special_term, title. Return each line followed by its label in curly braces.\n\n
**Examples:**
INT. ROOM NIGHT {slugline}
KITCHEN DAY {slugline}
JOHN {speaker}
(quietly) {parenthetical}
JOHN (O.S.) {speaker}
JOHN (angrily) {speaker}
I knew youd come. {dialogue}
She turns away from the window. {action}
FADE OUT. {transition}
THE END {title}
(V.O.) {special_term}
John CONT'D {speaker}"""
},
{
"role": "user",
"content": "I need you to classify the lines below. Please provide the classification in the format: 'line {label}'\n\n" + "\n".join(chunk)
}
]
)
classified = response.output_text.splitlines()
chunked_results.extend(classified)
extracted = extract_labeled_lines(chunked_results)
with open(audit_ai_csv, mode='w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(["content", "script_element"])
writer.writerows(extracted)
print("Classification completed.")
df = pd.read_csv(audit_ai_csv)
df = remove_empty_content(df)
df = remove_asterisks(df)
df = remove_leading_numbers(df)
df = remove_numeric_only_content(df)
df = remove_emptyline_rows(df)
df = remove_trailing_speaker(df)
# df = merge_consecutive_action_lines(df)
df = merge_consecutive_action_lines_new(df)
df = merge_consecutive_dialogue_lines(df)
df = insert_blank_lines(df)
df = add_fade_in_out(df)
return df

View File

@ -15,7 +15,7 @@ import datetime
import pytz import pytz
import subprocess import subprocess
import warnings import warnings
from scriptAudit.audit_ai import classify_lines
@ -1544,8 +1544,14 @@ class NeutralAudit:
if self.gen_int_files: if self.gen_int_files:
df.to_csv(csv_after_examined_speaker_pos_after_mix, index = False) df.to_csv(csv_after_examined_speaker_pos_after_mix, index = False)
with open(self.base_file_path + "time_taken.txt", "a") as file007:
file007.write("AFTER sf.examine_speaker_pos 39 : Before update_audit_df :audit\n")
audit_df = self.update_audit_df(df, audit_df) audit_df = self.update_audit_df(df, audit_df)
with open(self.base_file_path + "time_taken.txt", "a") as file007:
file007.write("AFTER sf.examine_speaker_pos 39 : After update_audit_df :audit\n")
### ###
df = sf.examine_speaker_next_lines(df, audit_df) df = sf.examine_speaker_next_lines(df, audit_df)
with open(self.base_file_path + "time_taken.txt", "a") as file007: with open(self.base_file_path + "time_taken.txt", "a") as file007:
@ -2737,6 +2743,91 @@ class NeutralAudit:
return character_scripts_dict return character_scripts_dict
def audit_ai_script(self):
with open(self.base_file_path + "time_taken.txt", "a") as file007:
file007.write("INSIDE OPPENAI AUDIT\n")
self.audit_model_obj.error_msg ="INIDE AUDIT AI"
self.audit_model_obj.save()
input_txt = self.base_file_path + "temp.txt"
audit_ai_csv = self.base_file_path + "audit_ai.csv"
post_processed_audit_ai_csv = self.base_file_path + "post_processed_df.csv"
print("AI audit in Process")
try:
post_processed_df = classify_lines(input_txt,audit_ai_csv)
print("AI audit done")
self.audit_model_obj.status = States.SUCCESS
self.audit_model_obj.error_msg ="AI AUDIT COMPLETED"
self.audit_model_obj.save()
with open(self.base_file_path + "time_taken.txt", "a") as file007:
file007.write("OPPENAI AUDIT Complete\n")
except Exception as exp:
print("AI audit error",exp)
self.audit_model_obj.status = States.FAILURE
self.audit_model_obj.results = exp
self.audit_model_obj.error_msg ="AI AUDIT FAILED"
self.audit_model_obj.save()
with open(self.base_file_path + "time_taken.txt", "a") as file007:
file007.write("OPPENAI AUDIT FAILED\n")
return False
# print(end_time)
language_check_df = sf.check_and_copy_rows(post_processed_df)
try:
script_language, dialogue_language = sf.language_detector_for_csv(language_check_df)
print("script_language",script_language)
print("dialogue_language",dialogue_language)
unique_script_languages = ', '.join(set(lang[0] for lang in script_language))
unique_dialogue_languages = ', '.join(set(lang[0] for lang in dialogue_language))
print("unique_script_languages",unique_script_languages)
print("unique_dialogue_languages",unique_dialogue_languages)
print("langauage detection worked")
except Exception as exp:
print(repr(exp))
unique_script_languages = "ENGLISH-"
unique_dialogue_languages = "ENGLISH-"
print("Langauuge detectedion csv didnt work-")
merged_df = pd.DataFrame(post_processed_df)
merged_df.to_csv(post_processed_audit_ai_csv, index=False)
print("post processed df saved")
audited_docx_path = self.base_file_path + "AI_csv_to_docx_audited.docx"
docx = sf.csv_to_docx(merged_df)
print("docx saved")
docx.save(audited_docx_path)
print("\n\n dot to comma changes in slug")
audited_file_name = self.script_name + ".csv"
req_file = ContentFile(
(merged_df.to_csv(index=False, path_or_buf=None)).encode("utf-8"),
audited_file_name,
)
File.objects.create(
script=Script.objects.get(id=self.script_id),
type="script-csv",
file=req_file,
)
docx_file = ContentFile(
open(audited_docx_path, 'rb').read(),
"from_audited_csv_to_document.docx",
)
File.objects.create(
script=Script.objects.get(id=self.script_id),
type="script-docx",
file=docx_file,
)
print("script-docx object created")
with open(self.base_file_path + "time_taken.txt", "a") as file007:
file007.write("OPPENAI AUDIT PROCESS COMPLETE\n")
return audited_docx_path, unique_script_languages, unique_dialogue_languages
def audit_in_background(self): def audit_in_background(self):
# # commenting os.fork to make code run in foreground # # commenting os.fork to make code run in foreground
# if os.fork() != 0: # if os.fork() != 0:

View File

@ -2,20 +2,23 @@ from multiprocessing import Process
import os import os
from centralisedFileSystem.models import Script from centralisedFileSystem.models import Script
from scriptAudit.models import ScriptAuditModel, States from scriptAudit.models import ScriptAuditModel, States
# from scriptAudit.tasks import NeutralAuditTask
from scriptAudit.mnf_script_audit import NeutralAudit from scriptAudit.mnf_script_audit import NeutralAudit
from datetime import datetime from datetime import datetime
from django.core.files.base import ContentFile 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 utils.filesystem import new_screenplay, create_script_docx,get_file_path,new_screenplay_without_audit_in_background
from .mnf_script_audit import NeutralAudit from .mnf_script_audit import NeutralAudit
# from narration.vectorcode.code.vector_generation import vector_gen
from time import sleep from time import sleep
import time import time
import pandas as pd
import re
import uuid
from django.conf import settings from django.conf import settings
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.html import strip_tags from django.utils.html import strip_tags
from django.core.mail import EmailMultiAlternatives from django.core.mail import EmailMultiAlternatives
from PyPDF2 import PdfReader, PdfWriter
def update_audit_status(script_id : str, status : str) -> None: def update_audit_status(script_id : str, status : str) -> None:
@ -101,31 +104,32 @@ def check_status_and_trigger_vector(script_id,v_id):
1.script_id --> audit id 1.script_id --> audit id
2.v_id vector id 2.v_id vector id
""" """
print("vector_id:",v_id) pass
audit_completed = False # print("vector_id:",v_id)
while not audit_completed: # audit_completed = False
status = ScriptAuditModel.objects.get( # while not audit_completed:
script = Script.objects.get( # status = ScriptAuditModel.objects.get(
id = script_id # script = Script.objects.get(
)) # id = script_id
# ))
print("waiting for audit to get complete") # print("waiting for audit to get complete")
if status.status == "SUCCESS": # if status.status == "SUCCESS":
try: # try:
a_path = get_file_path(str(script_id), "script-docx") # a_path = get_file_path(str(script_id), "script-docx")
vector_gen(a_path,v_id) # vector_gen(a_path,v_id)
audit_completed = True # audit_completed = True
break # break
except: # except:
create_script_docx(script_id) # create_script_docx(script_id)
a_path = get_file_path(str(script_id), "script-docx") # a_path = get_file_path(str(script_id), "script-docx")
print("Audited script path is fetched") # print("Audited script path is fetched")
vector_gen(a_path,v_id) # vector_gen(a_path,v_id)
audit_completed = True # audit_completed = True
break # break
elif status.status == "FAILURE": # elif status.status == "FAILURE":
print("Audit Failed") # print("Audit Failed")
audit_completed = True # audit_completed = True
@ -269,3 +273,226 @@ def send_email_to_user(user,screenplay_name,subject,message):# removed flag = 1
msg.attach_alternative(html_content, "text/html") msg.attach_alternative(html_content, "text/html")
msg.send() msg.send()
def split_pdf_into_chunks(input_pdf_path, chunk_size=3):
chunk_uuid = f"chunk_{uuid.uuid4().hex[:8]}"
chunk_folder = os.path.join("/content", chunk_uuid)
os.makedirs(chunk_folder, exist_ok=True)
reader = PdfReader(input_pdf_path)
total_pages = len(reader.pages)
file_paths = []
for start in range(0, total_pages, chunk_size):
writer = PdfWriter()
for page_num in range(start, min(start + chunk_size, total_pages)):
writer.add_page(reader.pages[page_num])
chunk_path = os.path.join(chunk_folder, f"chunk_{start // chunk_size + 1}.pdf")
with open(chunk_path, "wb") as f:
writer.write(f)
file_paths.append(chunk_path)
return file_paths
def split_text_file_by_lines(input_txt_path, lines_per_chunk=45):
chunk_uuid = f"chunk_{uuid.uuid4().hex[:8]}"
chunk_folder = os.path.join("/content", chunk_uuid)
os.makedirs(chunk_folder, exist_ok=True)
with open(input_txt_path, "r", encoding="utf-8") as f:
lines = f.readlines()
file_paths = []
for i in range(0, len(lines), lines_per_chunk):
chunk_lines = lines[i:i + lines_per_chunk]
chunk_path = os.path.join(chunk_folder, f"chunk_{i // lines_per_chunk + 1}.txt")
with open(chunk_path, "w", encoding="utf-8") as f:
f.writelines(chunk_lines)
file_paths.append(chunk_path)
if len(file_paths) == 10:
break
print(f"✅ Created {len(file_paths)} chunks in {chunk_folder}")
return file_paths
def extract_labeled_lines(response_text):
pattern = re.compile(r"(.*?)(?:\s*)\{(.*?)\}")
rows = []
for line in response_text.strip().split("\n"):
matches = pattern.findall(line.strip())
for content, label in matches:
rows.append([content.strip(), label.strip()])
return rows
def remove_empty_content(df):
df = df.dropna(subset=['content'])
df = df[df['content'].str.strip() != '']
return df
def remove_leading_numbers(df: pd.DataFrame) -> pd.DataFrame:
def clean_content(text):
if isinstance(text, str):
return re.sub(r'^\s*\d+\.\s*', '', text)
return text
df['content'] = df['content'].apply(clean_content)
return df
def remove_numeric_only_content(df: pd.DataFrame) -> pd.DataFrame:
def is_numeric_only(text):
if isinstance(text, str):
return re.fullmatch(r'\s*\d+\s*', text) is not None
return False
return df[~df['content'].apply(is_numeric_only)].reset_index(drop=True)
def remove_emptyline_rows(df: pd.DataFrame) -> pd.DataFrame:
def is_only_empty_line_repeats(text):
if not isinstance(text, str):
return False
return re.fullmatch(r'(\s*\(empty line\)\s*)+', text.strip(), flags=re.IGNORECASE) is not None
return df[~df['content'].apply(is_only_empty_line_repeats)].reset_index(drop=True)
def merge_consecutive_action_lines(df: pd.DataFrame) -> pd.DataFrame:
merged_rows = []
prev_row = None
for _, row in df.iterrows():
if (
prev_row is not None and
row['script_element'] == 'action' and
prev_row['script_element'] == 'action'
):
prev_row['content'] += " " + row['content']
else:
if prev_row is not None:
merged_rows.append(prev_row)
prev_row = row.copy()
if prev_row is not None:
merged_rows.append(prev_row)
return pd.DataFrame(merged_rows).reset_index(drop=True)
def merge_consecutive_action_lines_new(df: pd.DataFrame) -> pd.DataFrame:
merged_rows = []
prev_row = None
for _, row in df.iterrows():
current_is_action = row['script_element'] == 'action'
previous_is_action = prev_row is not None and prev_row['script_element'] == 'action'
if (
current_is_action and
previous_is_action and
not prev_row['content'].strip().endswith(('.', '!', '?'))
):
# Merge into previous action
prev_row['content'] += ' ' + row['content'].strip()
else:
if prev_row is not None:
merged_rows.append(prev_row)
prev_row = row.copy()
if prev_row is not None:
merged_rows.append(prev_row)
return pd.DataFrame(merged_rows).reset_index(drop=True)
def merge_consecutive_dialogue_lines(df: pd.DataFrame) -> pd.DataFrame:
merged_rows = []
prev_row = None
for _, row in df.iterrows():
if (
prev_row is not None and
row['script_element'] == 'dialogue' and
prev_row['script_element'] == 'dialogue'
):
prev_row['content'] += " " + row['content']
else:
if prev_row is not None:
merged_rows.append(prev_row)
prev_row = row.copy()
if prev_row is not None:
merged_rows.append(prev_row)
return pd.DataFrame(merged_rows).reset_index(drop=True)
def insert_blank_lines(df: pd.DataFrame) -> pd.DataFrame:
insert_after = {"slugline", "dialogue", "action", "transition"}
new_rows = []
for _, row in df.iterrows():
new_rows.append(row)
if row['script_element'] in insert_after:
new_rows.append(pd.Series({'content': '', 'script_element': 'blank'}))
return pd.DataFrame(new_rows).reset_index(drop=True)
def add_fade_in_out(df: pd.DataFrame) -> pd.DataFrame:
first_slugline_idx = df[df['script_element'] == 'slugline'].index.min()
if pd.isna(first_slugline_idx):
return df
df_trimmed = df.loc[first_slugline_idx:].reset_index(drop=True)
fade_in_row = pd.DataFrame([{'content': 'FADE IN', 'script_element': 'transition'}])
df_trimmed = pd.concat([fade_in_row, df_trimmed], ignore_index=True)
fade_out_row = pd.DataFrame([{'content': 'FADE OUT', 'script_element': 'transition'}])
df_trimmed = pd.concat([df_trimmed, fade_out_row], ignore_index=True)
return df_trimmed
def remove_asterisks(df: pd.DataFrame) -> pd.DataFrame:
df['content'] = df['content'].astype(str).str.replace(r'\*+', '', regex=True)
return df
def merge_consecutive_action_lines_new(df: pd.DataFrame) -> pd.DataFrame:
merged_rows = []
prev_row = None
for _, row in df.iterrows():
current_is_action = row['script_element'] == 'action'
previous_is_action = prev_row is not None and prev_row['script_element'] == 'action'
if (
current_is_action and
previous_is_action and
not prev_row['content'].strip().endswith(('.', '!', '?'))
):
# Merge into previous action
prev_row['content'] += ' ' + row['content'].strip()
else:
if prev_row is not None:
merged_rows.append(prev_row)
prev_row = row.copy()
if prev_row is not None:
merged_rows.append(prev_row)
return pd.DataFrame(merged_rows).reset_index(drop=True)
def extract_labeled_lines(response_lines: list[str]):
pattern = re.compile(r"(.*?)(?:\s*)\{(.*?)\}")
rows = []
for line in response_lines:
matches = pattern.findall(line.strip())
for content, label in matches:
rows.append([content.strip(), label.strip()])
return rows
def remove_trailing_speaker(df: pd.DataFrame) -> pd.DataFrame:
if not df.empty and df.iloc[-1]['script_element'] == 'speaker':
return df.iloc[:-1].reset_index(drop=True)
return df.reset_index(drop=True)

View File

@ -33,6 +33,8 @@ from auto_email.views import sendmail
from MNF import settings from MNF import settings
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import User from django.contrib.auth.models import User
from Blockchain2.models import MNFServersFile
from django.core.files import File as File2
@ -66,6 +68,7 @@ class Get_Counter(LoginRequiredMixin,APIView):
if current_site in ["qa.mynextfilm.net", if current_site in ["qa.mynextfilm.net",
"https://qa.mynextfilm.net", "https://qa.mynextfilm.net",
"example.com"
]: ]:
testing_on_dev = True testing_on_dev = True
@ -143,6 +146,8 @@ class Get_Counter(LoginRequiredMixin,APIView):
def run_audit_in_counter(msg): def run_audit_in_counter(msg):
print("################AUDIT DATA IS HERE\n\#######\n\n\n")
print(msg)
user = msg["user"] user = msg["user"]
s3_url = msg["s3-file-path"] s3_url = msg["s3-file-path"]
screenplay_name = msg["screenplay_name"] screenplay_name = msg["screenplay_name"]
@ -152,7 +157,11 @@ def run_audit_in_counter(msg):
script_file_name = msg["script_file_name"] script_file_name = msg["script_file_name"]
language = "en" language = "en"
local_file_path = s3_url local_file_path = s3_url
number_of_pages = msg["number_of_pages"]
script_id = msg["script_id"] #new
script = Script.objects.get(id=script_id) #new
file_instance = File.objects.get(script=script) #new
with open(local_file_path, 'rb') as file: with open(local_file_path, 'rb') as file:
file_content = file.read() file_content = file.read()
@ -161,20 +170,20 @@ def run_audit_in_counter(msg):
file_content, file_content,
script_file_name, script_file_name,
) )
file_instance.file.save(script_file_name, file, save=True) #new
user = User.objects.get(username=user) user = User.objects.get(username=user)
result = filesystem.new_screenplay_without_audit_in_background( # result = filesystem.new_screenplay_without_audit_in_background(
user, # user,
author, # author,
screenplay_name, # screenplay_name,
file, # file,
"script-original", # "script-original",
language, # language,
) # )
script_id = result.get("script", {}).get("id") # script_id = result.get("script", {}).get("id")
file_to_original = File.objects.get( file_to_original = File.objects.get(
script=script_id, script=script_id,
@ -191,19 +200,14 @@ def run_audit_in_counter(msg):
id = script_id id = script_id
)) ))
audit_only.only_audit = True audit_only.only_audit = True
audit_only.number_of_pages = number_of_pages
audit_only.save() audit_only.save()
try: try:
audit = NeutralAudit(script_id) audit = NeutralAudit(script_id)
audit.audit_in_background() audit.audit_in_background()
ScriptAuditModel.objects.update_or_create( print("audit in background ran")
script = Script.objects.get(
id = script_id
),
defaults={"status" : "SUCCESS"}
)
except Exception as exp: except Exception as exp:
@ -220,14 +224,49 @@ def run_audit_in_counter(msg):
script = Script.objects.get( script = Script.objects.get(
id = script_id id = script_id
)) ))
print("status is here",status.status)
if status.status == "FAILURE":
print("######Error from Audit############\n")
status.error_msg = "AIAUDITinProgress"
new_docx_script, unique_script_languages, unique_dialogue_languages = audit.audit_ai_script()
with open(new_docx_script, 'rb') as file:
file_content = file.read()
file = ContentFile(
file_content,
script_file_name,
)
file_instance.file.save(script_file_name, file, save=True)
file_to_original = File.objects.get(
script=script_id,
type="script-original"
)
print("Save new docx script as script orginal")
# update_audit_status(script_id, States.SUCCESS)
status.status = States.SUCCESS
status.error_msg = "AIAUDIT-Complete"
status.screenplay_language = unique_script_languages
status.dialogue_language = unique_dialogue_languages
status.save()
blockchain_obj = UserCredentialsForBlockchain.objects.get(user=user) blockchain_obj = UserCredentialsForBlockchain.objects.get(user=user)
status.User_preference = blockchain_obj.FileSecureOn
status.save()
script_original= {} script_original= {}
audit_data={} audit_data={}
script_original["status"] = "STARTED" script_original["status"] = "STARTED"
script_original["script_id"] = script_id script_original["script_id"] = script_id
with open(file_to_original.file.path, 'rb') as file: with open(file_to_original.file.path, 'rb') as file:
hash = uploadDataToIPFSNode(file) hash = uploadDataToIPFSNode(file)
django_file = File2(file)
filename = os.path.basename(file_to_original.file.path)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-original",
)
files.public_file.save(filename, django_file)
script_original["script_file"] = hash script_original["script_file"] = hash
script_original["type"] = "script-original" script_original["type"] = "script-original"
script_original["script_file_path"] = file_to_original.file.path script_original["script_file_path"] = file_to_original.file.path
@ -255,6 +294,13 @@ def run_audit_in_counter(msg):
script_path1 = file_to_audit_docx.file.path script_path1 = file_to_audit_docx.file.path
with open(script_path1, 'rb') as _file: with open(script_path1, 'rb') as _file:
hash2_docx = uploadDataToIPFSNode(_file) hash2_docx = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path1)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-docx",
)
files.public_file.save(filename, django_file)
script_docx["script_file_path"] = script_path1 script_docx["script_file_path"] = script_path1
script_docx["script_file"] = hash2_docx script_docx["script_file"] = hash2_docx
script_docx["type"] = "script-docx" script_docx["type"] = "script-docx"
@ -287,6 +333,13 @@ def run_audit_in_counter(msg):
script_size = file_to_audit_docx.file.size script_size = file_to_audit_docx.file.size
with open(script_path1, 'rb') as _file: with open(script_path1, 'rb') as _file:
hash2_docx = uploadDataToIPFSNode(_file) hash2_docx = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path1)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-docx",
)
files.public_file.save(filename, django_file)
script_docx["script_file_path"] = script_path1 script_docx["script_file_path"] = script_path1
script_docx["script_file"] = hash2_docx script_docx["script_file"] = hash2_docx
script_docx["type"] = "script-docx" script_docx["type"] = "script-docx"
@ -312,6 +365,13 @@ def run_audit_in_counter(msg):
# script_size = file_to_audit_docx.file.size # script_size = file_to_audit_docx.file.size
with open(script_path1, 'rb') as _file: with open(script_path1, 'rb') as _file:
hash2 = uploadDataToIPFSNode(_file) hash2 = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path1)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-pdf",
)
files.public_file.save(filename, django_file)
script_pdf["script_file_path"] = script_path1 script_pdf["script_file_path"] = script_path1
script_pdf["script_file"] = hash2 script_pdf["script_file"] = hash2
script_pdf["type"] = "script-pdf" script_pdf["type"] = "script-pdf"
@ -336,6 +396,13 @@ def run_audit_in_counter(msg):
# script_size = file_to_audit_docx.file.size # script_size = file_to_audit_docx.file.size
with open(script_path1, 'rb') as _file: with open(script_path1, 'rb') as _file:
hash2 = uploadDataToIPFSNode(_file) hash2 = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path1)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-json",
)
files.public_file.save(filename, django_file)
script_json["script_file_path"] = script_path1 script_json["script_file_path"] = script_path1
script_json["script_file"] = hash2 script_json["script_file"] = hash2
script_json["type"] = "script-json" script_json["type"] = "script-json"
@ -351,47 +418,64 @@ def run_audit_in_counter(msg):
print("script_file_path_is_here",script_path) print("script_file_path_is_here",script_path)
with open(script_path, 'rb') as _file: with open(script_path, 'rb') as _file:
hash1 = uploadDataToIPFSNode(_file) hash1 = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-csv",
)
files.public_file.save(filename, django_file)
script_csv["script_file"] = hash1 script_csv["script_file"] = hash1
script_csv["script_file_path"] = script_path script_csv["script_file_path"] = script_path
script_csv["type"] = "script-csv" script_csv["type"] = "script-csv"
audit_data["script-csv"]= script_csv audit_data["script-csv"]= script_csv
except Exception as exp: except Exception as exp:
print(exp) print(exp)
Response,gasprice = UploadScriptAuditData(OWNER_KEY,blockchain_obj.publicKey,blockchain_obj.user_id,script_id,str(audit_data))
print("tx_hash",Response) if status.User_preference != "MNF":
transactioni_id = str(Response)
status.transaction_hash =str(transactioni_id) Response,gasprice = UploadScriptAuditData(OWNER_KEY,blockchain_obj.publicKey,blockchain_obj.user_id,script_id,str(audit_data))
status.save() print("tx_hash",Response)
to_email = [user.email] transactioni_id = str(Response)
print("####### #### to_email",to_email) status.transaction_hash =str(transactioni_id)
key_value_aud = { "Script Name" : str(screenplay_name), status.save()
"Audited script url" : f"{settings.SITE_DOMAIN}/audit/audits1", to_email = [user.email]
"User's profile url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",} print("####### #### to_email",to_email)
email_code = 'SB1' key_value_aud = { "Script Name" : str(screenplay_name),
sendmail(to_email=to_email , email_code=email_code, key_value = key_value_aud ) "Audited script url" : f"{settings.SITE_DOMAIN}/audit/audits1",
print("$$$$### after sendmail") "User's profile url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",}
# user_infos = user_info(tx_hash=Response,service="Script Audit",gas_fee=gasprice) email_code = 'SB1'
# addition_result = user_infos.update_info(request) sendmail(to_email=to_email , email_code=email_code, key_value = key_value_aud )
hash2_docx = hash_decrypation(hash2_docx) print("$$$$### after sendmail")
tx_id = Response # user_infos = user_info(tx_hash=Response,service="Script Audit",gas_fee=gasprice)
certificate = certificateGenrate(user.username,"script audit",tx_id,projectname=script_file_name,matic=gasprice) # addition_result = user_infos.update_info(request)
to_email = [user.email] hash2_docx = hash_decrypation(hash2_docx)
email_code = 'BL1' tx_id = Response
# key_value = { certificate = certificateGenrate(user.username,"script audit",tx_id,projectname=script_file_name,matic=gasprice)
# "service":"Audited Script", to_email = [user.email]
# "hash": hash2_docx, email_code = 'BL1'
# "public key":blockchain_obj.publicKey, # key_value = {
# "Transaction Hash": tx_id, # "service":"Audited Script",
# } # "hash": hash2_docx,
key_value = { # "public key":blockchain_obj.publicKey,
"Product Name": "Audited Script", # "Transaction Hash": tx_id,
"Profile url": f"{settings.SITE_DOMAIN}/memberpage/#/personaldetails", # }
"User url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails", key_value = {
"Product output card url": f"{settings.SITE_DOMAIN}/audit/audits1", "Product Name": "Audited Script",
} "Profile url": f"{settings.SITE_DOMAIN}/memberpage/#/personaldetails",
print("userkey = ", userkey) "User url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",
sendmail(to_email=to_email , email_code=email_code, key_value=key_value, filePath=certificate) "Product output card url": f"{settings.SITE_DOMAIN}/audit/audits1",
print("mail send sucessfully:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::") }
print("userkey = ", userkey)
sendmail(to_email=to_email , email_code=email_code, key_value=key_value, filePath=certificate)
print("mail send sucessfully:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
else:
email_code = 'SB1'
key_value_aud = { "Script Name" : str(screenplay_name),
"Audited script url" : f"{settings.SITE_DOMAIN}/audit/audits1",
"User's profile url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",}
sendmail(to_email=to_email , email_code=email_code, key_value = key_value_aud)
data = {"message": "Success"} data = {"message": "Success"}
else: else:
@ -400,10 +484,13 @@ def run_audit_in_counter(msg):
script=script_id, script=script_id,
type="script-csv" type="script-csv"
) )
file_to_audit_report = File.objects.get( try:
script=script_id, file_to_audit_report = File.objects.get(
type="audit-report" script=script_id,
) type="audit-report"
)
except:
pass
hash2 = "" hash2 = ""
hash2_docx = "" hash2_docx = ""
try: try:
@ -415,6 +502,13 @@ def run_audit_in_counter(msg):
script_path1 = file_to_audit_docx.file.path script_path1 = file_to_audit_docx.file.path
with open(script_path1, 'rb') as _file: with open(script_path1, 'rb') as _file:
hash2_docx = uploadDataToIPFSNode(_file) hash2_docx = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path1)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-docx",
)
files.public_file.save(filename, django_file)
script_docx["script_file_path"] = script_path1 script_docx["script_file_path"] = script_path1
script_docx["script_file"] = hash2_docx script_docx["script_file"] = hash2_docx
script_docx["type"] = "script-docx" script_docx["type"] = "script-docx"
@ -447,6 +541,13 @@ def run_audit_in_counter(msg):
script_size = file_to_audit_docx.file.size script_size = file_to_audit_docx.file.size
with open(script_path1, 'rb') as _file: with open(script_path1, 'rb') as _file:
hash2_docx = uploadDataToIPFSNode(_file) hash2_docx = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path1)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-docx",
)
files.public_file.save(filename, django_file)
script_docx["script_file_path"] = script_path1 script_docx["script_file_path"] = script_path1
script_docx["script_file"] = hash2_docx script_docx["script_file"] = hash2_docx
script_docx["type"] = "script-docx" script_docx["type"] = "script-docx"
@ -472,6 +573,13 @@ def run_audit_in_counter(msg):
# script_size = file_to_audit_docx.file.size # script_size = file_to_audit_docx.file.size
with open(script_path1, 'rb') as _file: with open(script_path1, 'rb') as _file:
hash2 = uploadDataToIPFSNode(_file) hash2 = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path1)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-pdf",
)
files.public_file.save(filename, django_file)
script_pdf["script_file_path"] = script_path1 script_pdf["script_file_path"] = script_path1
script_pdf["script_file"] = hash2 script_pdf["script_file"] = hash2
script_pdf["type"] = "script-pdf" script_pdf["type"] = "script-pdf"
@ -495,6 +603,13 @@ def run_audit_in_counter(msg):
# script_size = file_to_audit_docx.file.size # script_size = file_to_audit_docx.file.size
with open(script_path1, 'rb') as _file: with open(script_path1, 'rb') as _file:
hash2 = uploadDataToIPFSNode(_file) hash2 = uploadDataToIPFSNode(_file)
django_file = File2(_file)
filename = os.path.basename(script_path1)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-json",
)
files.public_file.save(filename, django_file)
script_json["script_file_path"] = script_path1 script_json["script_file_path"] = script_path1
script_json["script_file"] = hash2 script_json["script_file"] = hash2
script_json["type"] = "script-json" script_json["type"] = "script-json"
@ -508,7 +623,7 @@ def run_audit_in_counter(msg):
script_csv = {} script_csv = {}
audit_report ={} audit_report ={}
audit_report_path = file_to_audit_report.file.path
script_path = file_to_audit.file.path script_path = file_to_audit.file.path
script_size = file_to_audit.file.size script_size = file_to_audit.file.size
@ -516,52 +631,79 @@ def run_audit_in_counter(msg):
with open(script_path, 'rb') as _file: with open(script_path, 'rb') as _file:
hash1 = uploadDataToIPFSNode(_file) hash1 = uploadDataToIPFSNode(_file)
script_csv["script_file"] = hash1 script_csv["script_file"] = hash1
django_file = File2(_file)
filename = os.path.basename(script_path)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="script-csv",
)
files.public_file.save(filename, django_file)
script_csv["script_file_path"] = script_path script_csv["script_file_path"] = script_path
script_csv["type"] = "script-csv" script_csv["type"] = "script-csv"
with open(audit_report_path, 'rb') as file1:
hash2 = uploadDataToIPFSNode(file1)
audit_report["script_file"] = hash2
audit_report["script_file_path"] = audit_report_path
audit_report["type"] = "audit-report"
audit_data["script-csv"]= script_csv
audit_data["audit-report"]= audit_report
try:
Response,gasprice = UploadScriptAuditData(OWNER_KEY,blockchain_obj.publicKey,blockchain_obj.user_id,script_id,str(audit_data)) audit_report_path = file_to_audit_report.file.path
print("tx_hash",Response) with open(audit_report_path, 'rb') as file1:
transactioni_id = str(Response) hash2 = uploadDataToIPFSNode(file1)
status.transaction_hash =str(transactioni_id) django_file = File2(file1)
status.save() filename = os.path.basename(audit_report_path)
files, _ = MNFServersFile.objects.get_or_create(
project_id= script_id,
file_type="audit-report",
)
files.public_file.save(filename, django_file)
audit_report["script_file"] = hash2
audit_report["script_file_path"] = audit_report_path
audit_report["type"] = "audit-report"
audit_data["script-csv"]= script_csv
audit_data["audit-report"]= audit_report
except:
pass
if status.User_preference != "MNF":
to_email = [user.email] Response,gasprice = UploadScriptAuditData(OWNER_KEY,blockchain_obj.publicKey,blockchain_obj.user_id,script_id,str(audit_data))
email_code = 'SB1' print("tx_hash",Response)
key_value_aud = { "Script Name" : str(screenplay_name), transactioni_id = str(Response)
"Audited script url" : f"{settings.SITE_DOMAIN}/audit/audits1", status.transaction_hash =str(transactioni_id)
"User's profile url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",} status.save()
sendmail(to_email=to_email , email_code=email_code, key_value = key_value_aud)
to_email = [user.email]
email_code = 'SB1'
key_value_aud = { "Script Name" : str(screenplay_name),
"Audited script url" : f"{settings.SITE_DOMAIN}/audit/audits1",
"User's profile url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",}
sendmail(to_email=to_email , email_code=email_code, key_value = key_value_aud)
# user_infos = user_info(tx_hash=Response,service="Script Audit",gas_fee=gasprice)
# addition_result = user_infos.update_info(request)
hash2_docx = hash_decrypation(hash2_docx)
tx_id = Response
certificate = certificateGenrate(user.username,"script audit",tx_id,projectname=script_file_name,matic=gasprice)
to_email = [user.email]
email_code = 'BL1'
# key_value = {
# "service":"Audited Script",
# "hash": hash2_docx,
# "public key":blockchain_obj.publicKey,
# "Transaction Hash": tx_id,
# }
key_value = {
"Product Name": "Audited Script",
"Profile url": f"{settings.SITE_DOMAIN}/memberpage/#/personaldetails",
"User url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",
"Product output card url": f"{settings.SITE_DOMAIN}/audit/audits1",
}
print("userkey = ", userkey)
sendmail(to_email=to_email , email_code=email_code, key_value=key_value, filePath=certificate)
print("mail send sucessfully:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
else:
to_email = [user.email]
email_code = 'SB1'
key_value_aud = { "Script Name" : str(screenplay_name),
"Audited script url" : f"{settings.SITE_DOMAIN}/audit/audits1",
"User's profile url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",}
sendmail(to_email=to_email , email_code=email_code, key_value = key_value_aud)
# user_infos = user_info(tx_hash=Response,service="Script Audit",gas_fee=gasprice)
# addition_result = user_infos.update_info(request)
hash2_docx = hash_decrypation(hash2_docx)
tx_id = Response
certificate = certificateGenrate(user.username,"script audit",tx_id,projectname=script_file_name,matic=gasprice)
to_email = [user.email]
email_code = 'BL1'
# key_value = {
# "service":"Audited Script",
# "hash": hash2_docx,
# "public key":blockchain_obj.publicKey,
# "Transaction Hash": tx_id,
# }
key_value = {
"Product Name": "Audited Script",
"Profile url": f"{settings.SITE_DOMAIN}/memberpage/#/personaldetails",
"User url": f"{settings.SITE_DOMAIN}/memberpage/#/user/{user.id}/personaldetails",
"Product output card url": f"{settings.SITE_DOMAIN}/audit/audits1",
}
print("userkey = ", userkey)
sendmail(to_email=to_email , email_code=email_code, key_value=key_value, filePath=certificate)
print("mail send sucessfully:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
data = {"message": "Success"} data = {"message": "Success"}
# deleting the folder and files # deleting the folder and files
@ -692,13 +834,16 @@ class AuditedScriptsView_Without_blockchain(LoginRequiredMixin, APIView):
no_of_pages = audit_status_object.number_of_pages no_of_pages = audit_status_object.number_of_pages
screenplay_language = audit_status_object.screenplay_language screenplay_language = audit_status_object.screenplay_language
dialogue_language = audit_status_object.dialogue_language dialogue_language = audit_status_object.dialogue_language
isfdx = audit_status_object.isfdx dont_show_audit_report = audit_status_object.isfdx
if audit_status_object.error_msg == "AIAUDIT-Complete":
dont_show_audit_report = True
# transaction_haash = audit_status_object.transaction_hash # transaction_haash = audit_status_object.transaction_hash
# privatekeycnf = audit_status_object.bchain_privatekey # privatekeycnf = audit_status_object.bchain_privatekey
privatekeycnf = "dhjdjfhd" privatekeycnf = "dhjdjfhd"
print("SCRIPT ID = ", str(script.id)) print("SCRIPT ID = ", str(script.id))
print("extimated time = ", extimated_time) print("extimated time = ", extimated_time)
print("isfdx", isfdx) # print("isfdx", isfdx)
print("dont_show_audit_report", dont_show_audit_report)
print("no of pages = ", no_of_pages) print("no of pages = ", no_of_pages)
print("screenplay language = ", screenplay_language) print("screenplay language = ", screenplay_language)
print("dialogue_language =", dialogue_language) print("dialogue_language =", dialogue_language)
@ -717,7 +862,7 @@ class AuditedScriptsView_Without_blockchain(LoginRequiredMixin, APIView):
"page_number" : str(no_of_pages), "page_number" : str(no_of_pages),
"transaction_hash" : str(1), "transaction_hash" : str(1),
"confirmkey": str(privatekeycnf), "confirmkey": str(privatekeycnf),
"isfdx" : str(isfdx) "dont_show_audit_report" : str(dont_show_audit_report),
} }
) )
elif script_audit_status == States.FAILURE: elif script_audit_status == States.FAILURE:
@ -868,6 +1013,20 @@ class DownloadScriptFromBlockchain(APIView):
self.privatekey1 = privatekey1 self.privatekey1 = privatekey1
if not request.query_params.get("type") in self.VALID_FILE_TYPES: if not request.query_params.get("type") in self.VALID_FILE_TYPES:
raise spex.IllegalFiletype(file_type, self.VALID_FILE_TYPES) raise spex.IllegalFiletype(file_type, self.VALID_FILE_TYPES)
try:
status = ScriptAuditModel.objects.get(script = Script.objects.get(id = script_id))
if status.User_preference == "MNF":
file = File.objects.get(script=script_id, type=file_type)
if file_type == "script-json":
open_file = open(file.file.path, 'r')
script_json = json.load(open_file)
return JsonResponse({"script-json": script_json}, status=200)
return JsonResponse({"status":True, "download_link": file.file.url, "file_name": str(file.file.name)})
except Exception as exp:
print("###ERROR:",exp)
return JsonResponse({"status":False, "error": "The File Does Not Exist On The MNF",},status=500)
try: try:
if UserCredentialsForBlockchain.objects.filter(user=request.user).exists(): if UserCredentialsForBlockchain.objects.filter(user=request.user).exists():