207 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| import socket
 | |
| import time
 | |
| import boto3
 | |
| import subprocess
 | |
| import json
 | |
| import threading
 | |
| from django.core.management.base import BaseCommand
 | |
| from django.core.management import call_command
 | |
| from mnfapp.models import ScriptTranslations
 | |
| from MNF.settings import BasePath
 | |
| from conversion.translation.external_conversion import Conversion
 | |
| from centralisedFileSystem.models import Script, File
 | |
| from scriptAudit.models import ScriptAuditModel
 | |
| from scriptAudit.models import States
 | |
| from utils import filesystem
 | |
| from scriptAudit.utils import update_audit_status
 | |
| from scriptAudit.mnf_script_audit import NeutralAudit
 | |
| from django.core.files.base import ContentFile
 | |
| from django.contrib.auth import get_user_model
 | |
| basePath = BasePath()
 | |
| 
 | |
| User = get_user_model()
 | |
| 
 | |
| def background_execution(obj):
 | |
|     obj.convert()
 | |
| 
 | |
| 
 | |
| 
 | |
| def run_conversion(msg):
 | |
|     body_dict = json.loads(msg.body)
 | |
|     translated_script = ScriptTranslations.objects.get(translation_id=body_dict["translation_id"])
 | |
|     object_key = "INPUT/" + (translated_script.script_link_id.script.name.split("/"))[-1]
 | |
|     local_file_path = "/home/ubuntu/Conversion_Kitchen_Code/kitchen_counter/media/" + translated_script.script_link_id.script.name
 | |
|     s3_client = boto3.client('s3',
 | |
|                         aws_access_key_id="AKIAQVLBBGCB45RMLKVW",
 | |
|                         aws_secret_access_key="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",
 | |
|                         region_name="ap-south-1"
 | |
|                         )
 | |
|     s3_client.download_file("conversion-kitchen", object_key, local_file_path)
 | |
| 
 | |
| 
 | |
|     conversion_params = {
 | |
|         "user": translated_script.user_id,
 | |
|         "file_path": str(basePath) + "/media/" + translated_script.script_link_id.script.name,
 | |
|         "original_script_id": translated_script.script_link_id.script_id,
 | |
|         "translated_script_id": translated_script.translation_id,
 | |
|         "sample_id": body_dict.get('sample_id', None),
 | |
|         "existing_script": body_dict.get('sample_id', None),
 | |
|         "iteration_no": body_dict.get('iteration_no', None),
 | |
|         "juggernaut_pages_deduction": body_dict.get("juggernaut_pages_deduction", None),
 | |
|         "language_set": body_dict.get("language_set", None),
 | |
|         "amount_without_subscrption": body_dict.get("amount_without_subscrption", None)
 | |
|     }
 | |
|     print("reached here")
 | |
|     obj = Conversion(**conversion_params)
 | |
|     # obj.convert()
 | |
|     background_thread = threading.Thread(target=background_execution, args=(obj,))
 | |
|     background_thread.start()
 | |
|     background_thread.join()
 | |
|     s3_client.delete_object(Bucket='conversion-kitchen', Key=object_key)
 | |
|     msg.delete()
 | |
|     
 | |
| 
 | |
| def run_audit(msg):
 | |
|     body_dict = json.loads(msg.body)
 | |
|     user = body_dict.get("user")
 | |
|     s3_url = body_dict.get("s3-file-path")
 | |
|     screenplay_name = body_dict.get("screenplay_name")
 | |
|     author = body_dict.get("author")
 | |
|     language = body_dict.get("language")
 | |
|     script_ext = body_dict.get("script_ext")
 | |
|     script_file_name = body_dict.get("script_file_name")
 | |
| 
 | |
| 
 | |
|     object_key = "INPUT/" + str(script_file_name)
 | |
|     local_file_path = "/home/ubuntu/Conversion_Kitchen_Code/kitchen_counter/media/audit_counter_files/" + script_file_name
 | |
|     s3_client = boto3.client('s3',
 | |
|                         aws_access_key_id="AKIAQVLBBGCB45RMLKVW",
 | |
|                         aws_secret_access_key="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",
 | |
|                         region_name="ap-south-1"
 | |
|                         )
 | |
|     s3_client.download_file("conversion-kitchen", object_key, local_file_path)
 | |
| 
 | |
|     
 | |
|     with open(local_file_path, 'rb') as file:
 | |
|         file_content = file.read()
 | |
|     
 | |
|     file = ContentFile(
 | |
|             file_content,
 | |
|             script_file_name,
 | |
|     )
 | |
|     user = User.objects.get(username=user)
 | |
|     # user_id = user.id
 | |
|     
 | |
|     result = filesystem.new_screenplay_without_audit_in_background(
 | |
|         user,
 | |
|         author,
 | |
|         screenplay_name,
 | |
|         file,
 | |
|         "script-original",
 | |
|         language,
 | |
|     )
 | |
|     
 | |
| 
 | |
|     script_id = result.get("script", {}).get("id")
 | |
|         
 | |
|     file_to_original = File.objects.get(
 | |
|         script=script_id,
 | |
|         type="script-original"
 | |
| 
 | |
|     )
 | |
|     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"}
 | |
|     )
 | |
| 
 | |
|     msg.delete()
 | |
|     
 | |
| 
 | |
| 
 | |
| 
 | |
| class Command(BaseCommand):
 | |
|     help = 'Custom Command to start django server and then start dequeuing from SQS'
 | |
| 
 | |
|     def handle(self, *args, **options):
 | |
|         # Call the original runserver command"
 | |
|         # call_command('runserver', '0.0.0.0:4549')
 | |
|         command = 'python manage.py runserver 0.0.0.0:4549 > /home/ubuntu/Conversion_Kitchen_Code/logfile.log 2>&1'
 | |
| 
 | |
|         # # Execute the command using subprocess.Popen
 | |
|         subprocess.Popen(command, shell=True)
 | |
| 
 | |
|         # Wait for the server to start
 | |
|         while True:
 | |
|             try:
 | |
|                 # Try to connect to the server
 | |
|                 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
 | |
|                     s.connect(('0.0.0.0', 4549))
 | |
|                     break
 | |
|             except ConnectionRefusedError:
 | |
|                 # If connection is refused, wait and try again
 | |
|                 time.sleep(1)
 | |
| 
 | |
|         # Once the server is up, run your function
 | |
|         self.run_after_server_startup()
 | |
| 
 | |
|     def run_after_server_startup(self):
 | |
|         # Your function to run after the server starts
 | |
|         print("Development server is fully up and running! Run your function here.")
 | |
|         
 | |
|         session = boto3.Session(
 | |
|             aws_access_key_id='AKIAQVLBBGCB45RMLKVW', # replace with your key
 | |
|             aws_secret_access_key='ZWc6KOc5LuBLuCEBDDfQTor+Q7rp3fFH74gVt+AA', # replace with your key
 | |
|         )
 | |
|         sqs = session.resource('sqs', region_name='ap-south-1')
 | |
|         
 | |
|         print("Started Executin this from conversion")
 | |
|         queue = sqs.get_queue_by_name(QueueName="mnfqueue")
 | |
|         # try:
 | |
|         while True:
 | |
| 
 | |
|             messages = queue.receive_messages(
 | |
|                 MessageAttributeNames=["All"],
 | |
|                 MaxNumberOfMessages=1,
 | |
|                 WaitTimeSeconds=5,
 | |
|             )
 | |
|             if len(messages) > 0:
 | |
| 
 | |
|                 for msg in messages:
 | |
|                     try:
 | |
|                         print("Received message: %s: %s", msg.message_id, msg.body)
 | |
|                         print(type(msg.body))
 | |
|                         body_dict = json.loads(msg.body)
 | |
|                         if body_dict['service_type'] == "conversion":
 | |
| 
 | |
|                             run_conversion(msg)
 | |
|                         
 | |
|                         elif body_dict['service_type'] == "audit":
 | |
| 
 | |
|                             run_audit(msg)
 | |
| 
 | |
|                     except Exception as error:
 | |
|                         print("error execution from queue: %s", error)
 | |
|             else:
 | |
|                 break
 | |
| 
 | |
|         print("Completed All Execution")
 |