Skip to content
Snippets Groups Projects

Feat certify account

4 files
+ 219
0
Compare changes
  • Side-by-side
  • Inline
Files
4
+ 75
0
 
#!/usr/bin/env python
 
import json
 
import rc_util
 
import dataset
 
import pika
 
from rc_rmq import RCRMQ
 
from datetime import datetime
 
import rabbit_config as rcfg
 
 
task = "user_state"
 
 
args = rc_util.get_args()
 
logger = rc_util.get_logger(args)
 
 
db = dataset.connect(f"sqlite:///{rcfg.db_path}/user_reg.db")
 
table = db["user_state"]
 
 
# Instantiate rabbitmq object
 
rc_rmq = RCRMQ({"exchange": rcfg.Exchange, "exchange_type": "topic"})
 
 
 
def user_state(ch, method, properties, body):
 
msg = json.loads(body)
 
username = msg["username"]
 
op = msg["op"]
 
msg["success"] = False
 
errmsg = ""
 
 
corr_id = properties.correlation_id
 
reply_to = properties.reply_to
 
 
try:
 
 
if op == "get":
 
errmsg = "Getting latest state of {username}"
 
record = table.find_one(username=username, order_by="-date")
 
 
if record:
 
msg["state"] = record["state"]
 
logger.debug(
 
f'The latest state of {username} is {msg["state"]}'
 
)
 
else:
 
msg["state"] = "no-account"
 
 
elif op == "post":
 
state = msg["state"]
 
errmsg = "Updating state of {username} to {state}"
 
table.insert(
 
{"username": username, "state": state, "date": datetime.now()}
 
)
 
logger.debug(f"User {username} state updates to {state}")
 
 
msg["success"] = True
 
except Exception:
 
logger.error("", exc_info=True)
 
msg["errmsg"] = errmsg if errmsg else "Unexpected error"
 
 
# Send response
 
if reply_to:
 
props = pika.BasicProperties(correlation_id=corr_id)
 
rc_rmq.publish_msg(
 
{"routing_key": reply_to, "msg": msg, "props": props}
 
)
 
 
# Acknowledge the message
 
ch.basic_ack(delivery_tag=method.delivery_tag)
 
 
 
if __name__ == "__main__":
 
logger.info(f"Start listening to queue: {task}")
 
rc_rmq.start_consume({"queue": task, "cb": user_state})
 
 
logger.info("Disconnected")
 
rc_rmq.disconnect()
Loading