Skip to content
Snippets Groups Projects
rc_util.py 2.26 KiB
Newer Older
import logging
import argparse
Bo-Chun Chen's avatar
Bo-Chun Chen committed
from rc_rmq import RCRMQ
import json
Ravi Tripathi's avatar
Ravi Tripathi committed
from urllib.parse import quote
Bo-Chun Chen's avatar
Bo-Chun Chen committed

rc_rmq = RCRMQ({'exchange': 'RegUsr', 'exchange_type': 'topic'})
tasks = {'create_account': None, 'git_commit': None, 'dir_verify': None, 'subscribe_mail_list': None, 'notify_user': None}
logger_fmt = '%(asctime)s [%(module)s] - %(message)s'
Bo-Chun Chen's avatar
Bo-Chun Chen committed

Ravi Tripathi's avatar
Ravi Tripathi committed
def add_account(username, queuename, email, full="", reason=""):
    rc_rmq.publish_msg(
        {
            "routing_key": "request." + queuename,
            "msg": {
Bo-Chun Chen's avatar
Bo-Chun Chen committed
      "username": username,
      "email": email,
Bo-Chun Chen's avatar
Bo-Chun Chen committed
      "fullname": full,
Ravi Tripathi's avatar
Ravi Tripathi committed
                "reason": reason,
                "queuename": queuename,
            },
Bo-Chun Chen's avatar
Bo-Chun Chen committed
    }
  rc_rmq.disconnect()
Bo-Chun Chen's avatar
Bo-Chun Chen committed

def worker(ch, method, properties, body):
    msg = json.loads(body)
    username = msg['username']
Bo-Chun Chen's avatar
Bo-Chun Chen committed

    if msg['success']:
        print(f'Account for {username} has been created.')
    else:
        print(f"There's some issue while creating account for {username}")
        errmsg = msg.get('errmsg', [])
        for err in errmsg:
            print(err)

    rc_rmq.stop_consume()
    rc_rmq.delete_queue()
Ravi Tripathi's avatar
Ravi Tripathi committed
def consume(queuename, routing_key="", callback=worker, debug=False):
    if routing_key == "":
        routing_key = "complete." + queuename
Bo-Chun Chen's avatar
Bo-Chun Chen committed
    if debug:
        sleep(5)
    else:
Ravi Tripathi's avatar
Ravi Tripathi committed
        rc_rmq.start_consume(
            {
                "queue": queuename,
                "routing_key": routing_key,
                "cb": callback,
            }
        )
        rc_rmq.disconnect()
Bo-Chun Chen's avatar
Bo-Chun Chen committed
    return { 'success' : True }

def get_args():
    # Parse arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('-v', '--verbose', action='store_true', help='verbose output')
    parser.add_argument('-n', '--dry-run', action='store_true', help='enable dry run mode')
    return parser.parse_args()

def get_logger(args=None):
    if args is None:
        args = get_args()

    logger_lvl = logging.WARNING

    if args.verbose:
        logger_lvl = logging.DEBUG

    if args.dry_run:
        logger_lvl = logging.INFO

    logging.basicConfig(format=logger_fmt, level=logger_lvl)
    return logging.getLogger(__name__)

Ravi Tripathi's avatar
Ravi Tripathi committed

def encode_name(uname):
    uname_quote = quote(uname)
    if "." in uname_quote:
        uname_quote = uname_quote.replace(".", "%2E")
    return uname_quote