import sys import logging import argparse import asyncio import json from db.constants import TIMELINE_ORDER_ISSUED, TIMELINE_ORDER_NOT_ISSUED from scheduling import OrderScheduler from generate import generate_order from orders import order_issue, order_check from db.queries import orders_pool_by_id, timeline_event_put from telegram.telegram import handle_commands from telegram.commands import commands logger = logging.getLogger(__name__) async def do_order_issue(orders_pool_id): orders_pool = orders_pool_by_id(orders_pool_id) issue_result = await order_issue(orders_pool) if 'order_status' in issue_result: order_status = issue_result['order_status'] logger.info(f'Issued order id {order_status.id}') timeline_event_put( TIMELINE_ORDER_ISSUED, order_status.text.split("\n")[0], user=orders_pool.user, orders_pool=orders_pool, order_status=order_status, extra={ "mastodon_status_url": issue_result['mastodon_status']['url'] } ) elif 'reason' in issue_result: timeline_event_put( TIMELINE_ORDER_NOT_ISSUED, issue_result['reason'], user=orders_pool.user, orders_pool=orders_pool ) if __name__=='__main__': logging.basicConfig( format="%(asctime)s %(module)s [%(levelname)-4.4s] %(message)s", handlers=[ logging.StreamHandler(sys.stdout) ], level=logging.INFO) parser = argparse.ArgumentParser(description="Generate gear orders", prog='PROG') subparsers = parser.add_subparsers(help="Sub-command help", dest="command") parser_generate = subparsers.add_parser('generate', help='Generate a command') parser_generate.add_argument('orders_pool_id') parser_issue = subparsers.add_parser('issue', help='Issue a command') parser_issue.add_argument('orders_pool_id') parser_issue = subparsers.add_parser('check', help='Check on the status of an order') parser_issue.add_argument('order_status_id') args = parser.parse_args() if args.command == 'generate': orders_pool = orders_pool_by_id(args.orders_pool_id) logger.info('Orders - %s', json.dumps(generate_order(orders_pool))) elif args.command == 'issue': loop = asyncio.new_event_loop() loop.run_until_complete( do_order_issue(args.orders_pool_id) ) elif args.command == 'check': loop = asyncio.new_event_loop() loop.run_until_complete( order_check(args.order_status_id) ) else: loop = asyncio.new_event_loop() s = OrderScheduler(loop) loop.run_until_complete(handle_commands( commands=commands, loop=loop )) loop.run_forever()