import pika import pickle from functions import log, save_project from classes import * remaining_funds = 1000000 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', 5672, '/', pika.PlainCredentials("user", "password"))) channel = connection.channel() channel.queue_declare(queue='research_proposals') def process_proposal(ch, method, properties, body): project = pickle.loads(body) if 200000 <= project.amount <= 500000 and project.amount <= remaining_funds: channel.basic_publish(exchange='', routing_key=properties.reply_to, properties=pika.BasicProperties(correlation_id=properties.correlation_id), body="approved") project.status = 1 save_project(project) log(f"{project.acronym} approved") else: channel.basic_publish(exchange='', routing_key=properties.reply_to, properties=pika.BasicProperties(correlation_id=properties.correlation_id), body="rejected") project.status = 2 save_project(project) log(f"{project.acronym} rejected") channel.basic_consume(queue='research_proposals', on_message_callback=process_proposal, auto_ack=True) try: channel.start_consuming() except KeyboardInterrupt: channel.stop_consuming() connection.close()