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 basePath = BasePath() def background_execution(obj): obj.convert() 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: messages = queue.receive_messages( MessageAttributeNames=["All"], MaxNumberOfMessages=5, WaitTimeSeconds=20, ) # msg = 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) 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() msg.delete() # return JsonResponse({"sattus":"process started"}) except Exception as error: print("error execution from queue: %s", error) print("Completed All Execution")