gear-orders/main.py

87 lines
2.8 KiB
Python

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()