Added colour to logging for all services. Added check on withdrawals to
ensure project was approved. Made researchers request withdrawals.
This commit is contained in:
parent
41adade9fc
commit
1a67ae90dc
5
colours.py
Normal file
5
colours.py
Normal file
@ -0,0 +1,5 @@
|
||||
RESET = "\033[0m"
|
||||
ERROR = "\033[91m"
|
||||
OK = "\033[92m"
|
||||
WARN = "\033[93m"
|
||||
INFO = "\033[96m"
|
||||
@ -4,6 +4,7 @@ import pickle
|
||||
|
||||
from functions import log, save_project
|
||||
from classes import *
|
||||
import colours
|
||||
|
||||
remaining_funds = 1000000
|
||||
|
||||
@ -14,15 +15,17 @@ channel = connection.channel()
|
||||
channel.queue_declare(queue='research_proposals')
|
||||
|
||||
def process_proposal(ch, method, properties, body):
|
||||
global remaining_funds
|
||||
project = pickle.loads(body)
|
||||
if 200000 <= project.amount <= 500000 and project.amount <= remaining_funds:
|
||||
remaining_funds -= project.amount
|
||||
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")
|
||||
log(f"project {colours.INFO}{project.acronym} {colours.OK}approved{colours.RESET}, {colours.INFO}{remaining_funds}{colours.RESET} remaining")
|
||||
else:
|
||||
channel.basic_publish(exchange='',
|
||||
routing_key=properties.reply_to,
|
||||
@ -30,7 +33,7 @@ def process_proposal(ch, method, properties, body):
|
||||
body="rejected")
|
||||
project.status = 2
|
||||
save_project(project)
|
||||
log(f"{project.acronym} rejected")
|
||||
log(f"project {colours.INFO}{project.acronym} {colours.ERROR}rejected{colours.RESET}, {colours.INFO}{remaining_funds}{colours.RESET} remaining")
|
||||
|
||||
channel.basic_consume(queue='research_proposals', on_message_callback=process_proposal, auto_ack=True)
|
||||
|
||||
|
||||
@ -4,7 +4,6 @@ import pickle
|
||||
import os
|
||||
|
||||
from classes import Project, Transaction
|
||||
from functions import log
|
||||
|
||||
if not os.path.exists("approved_projects"):
|
||||
os.makedirs("approved_projects")
|
||||
@ -24,8 +23,6 @@ def get_project(ch, method, properties, body):
|
||||
routing_key=properties.reply_to,
|
||||
properties=pika.BasicProperties(correlation_id=properties.correlation_id),
|
||||
body=project)
|
||||
log(f"Replying to {properties.reply_to}")
|
||||
log(f"got project {project_id}")
|
||||
|
||||
|
||||
def save_project(ch, method, properties, body):
|
||||
|
||||
@ -6,7 +6,7 @@ import pickle
|
||||
from functions import *
|
||||
from classes import *
|
||||
|
||||
class ResearchProposal(object):
|
||||
class Researcher(object):
|
||||
|
||||
def __init__(self):
|
||||
self.connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', 5672, '/', pika.PlainCredentials("user", "password")))
|
||||
@ -34,6 +34,10 @@ class ResearchProposal(object):
|
||||
self.connection.process_data_events(time_limit=None)
|
||||
return str(self.response)
|
||||
|
||||
def withdraw(self, withdrawal):
|
||||
self.channel.basic_publish(exchange='', routing_key='withdraw_funds',
|
||||
body=f"{withdrawal['acronym']},{withdrawal['name']},{withdrawal['amount']}")
|
||||
|
||||
proposals = [
|
||||
{"acronym": "PROJ1", "title": "Project 1", "description": "Description 1", "amount": "300000"},
|
||||
{"acronym": "PROJ2", "title": "Project 2", "description": "Description 2", "amount": "400000"},
|
||||
@ -43,8 +47,25 @@ proposals = [
|
||||
{"acronym": "PROJ6", "title": "Project 6", "description": "Description 6", "amount": "420000"}
|
||||
]
|
||||
|
||||
withdrawals = [
|
||||
{"acronym": "PROJ1", "name": "Johnathan", "amount": 150000},
|
||||
{"acronym": "PROJ2", "name": "Joseph", "amount": 200000},
|
||||
{"acronym": "PROJ3", "name": "Jotaro", "amount": 100000},
|
||||
{"acronym": "PROJ4", "name": "Josuke", "amount": 100000},
|
||||
{"acronym": "PROJ5", "name": "Giorno", "amount": 250000},
|
||||
{"acronym": "PROJ6", "name": "Jolyne", "amount": 430000},
|
||||
{"acronym": "PROJ1", "name": "Johnathan", "amount": 100000},
|
||||
{"acronym": "PROJ2", "name": "Joseph", "amount": 180000},
|
||||
{"acronym": "PROJ3", "name": "Jotaro", "amount": 160000},
|
||||
{"acronym": "PROJ4", "name": "Josuke", "amount": 150000},
|
||||
{"acronym": "PROJ5", "name": "Giorno", "amount": 450000},
|
||||
{"acronym": "PROJ6", "name": "Jolyne", "amount": 100000}
|
||||
]
|
||||
|
||||
for proposal in proposals:
|
||||
proposal_client = ResearchProposal()
|
||||
log(f"{proposal['acronym']} sends proposal")
|
||||
proposal_client = Researcher()
|
||||
response = proposal_client.call(proposal)
|
||||
log(f"{proposal['acronym']} got {response}")
|
||||
|
||||
for withdrawal in withdrawals:
|
||||
client = Researcher()
|
||||
client.withdraw(withdrawal)
|
||||
|
||||
@ -5,6 +5,7 @@ import pickle
|
||||
|
||||
from functions import log, save_project
|
||||
from classes import *
|
||||
import colours
|
||||
|
||||
class University:
|
||||
def __init__(self):
|
||||
@ -17,6 +18,8 @@ class University:
|
||||
self.channel.basic_consume(queue="withdraw_funds", on_message_callback=self.withdraw_funds, auto_ack=True)
|
||||
self.response = None
|
||||
self.corr_id = None
|
||||
self.name = None
|
||||
self.amount = None
|
||||
|
||||
def receive_response(self, ch, method, properties, body):
|
||||
self.response = body
|
||||
@ -24,15 +27,20 @@ class University:
|
||||
transaction = Transaction(self.name, int(self.amount))
|
||||
project.history.append(transaction)
|
||||
project.amount -= int(self.amount)
|
||||
if project.status == 1:
|
||||
if project.amount >= 0:
|
||||
save_project(project)
|
||||
log(f"{self.name} withdrew {self.amount} from {project.acronym}. {project.amount} remaining")
|
||||
log(f"{colours.INFO}{self.name}{colours.RESET} withdrew {colours.OK}{self.amount}{colours.RESET} from {colours.INFO}{project.acronym}{colours.RESET}. {colours.INFO}{project.amount}{colours.RESET} remaining")
|
||||
else:
|
||||
log(f"{self.name} attempter to withdraw {self.amount} from {project.acronym} but there was only {project.amount + int(self.amount)} remaining")
|
||||
log(f"{colours.INFO}{self.name}{colours.RESET} attempted to withdraw {colours.ERROR}{self.amount}{colours.RESET} from {colours.INFO}{project.acronym}{colours.RESET} but there was only {colours.ERROR}{project.amount + int(self.amount)}{colours.RESET} remaining")
|
||||
else:
|
||||
log(f"{colours.INFO}{self.name}{colours.RESET} attempted to withdraw from {colours.WARN}{project.acronym}{colours.RESET} but the project was not approved")
|
||||
|
||||
def withdraw_funds(self, ch, method, properties, body):
|
||||
body = body.decode()
|
||||
proj_id, self.name, self.amount = body.split(',')
|
||||
proj_id, name, amount = body.split(',')
|
||||
self.name = name
|
||||
self.amount = amount
|
||||
|
||||
self.channel.basic_publish(exchange='', routing_key='get_project',
|
||||
properties=pika.BasicProperties(reply_to="university_project"),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user