"""Move order along QA VECTOR pipeline.""" import argparse import json from enum import Enum from pprint import pprint import boto3 """ -- https://www.notion.so/Encoding-Workers-4614a8e498034b4984eba275c3709c21?pvs=4#8c2bfb4dbf4a47748c91cd20760afbae SELECT cmm.CUSTOMER_NAME, cmm.CUSTOMER_MASTER_MASTER_ID, dds.BATCH_DELIVERY, LISTAGG(ed.ENCODER_ID, ',') FROM ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.CUSTOMER_MASTER_MASTER cmm LEFT JOIN ORCHARD_APP_REPORTING_V2.REPORTSDD_DIRECT_DELIVERY.DMS_DELIVERY_SPEC dds ON dds.DMS_MASTER_MASTER_ID = cmm.CUSTOMER_MASTER_MASTER_ID AND dds.ORDER_TYPE = 'release' LEFT JOIN ORCHARD_APP_REPORTING_V2.ART_RELATIONS_PROD_ART_RELATIONS.ENCODER_DMS ed ON ed.DMS_MASTER_CUSTOMER_ID = cmm.CUSTOMER_MASTER_MASTER_ID WHERE cmm.CUSTOMER_MASTER_MASTER_ID IN ( 1223, 500, 465, 1810, 252 ) GROUP BY 1, 2, 3 ORDER BY 2 ASC ; """ # noqa:E501 LAMBDA_CLIENT = boto3.client('lambda') CONFIG = { 456: ('Y', [4, 18]), 500: ('Y', [4]), 1223: ('N', [17, 18]), 1810: ('Y', [18]), 1896: ('Y', [18]) } class OrderStatus(Enum): """Order statuses to push.""" NEW = 'new' ENCODED = 'encoded' READY_TO_DELIVER = 'ready_to_deliver' def main(): """Entrypoint.""" parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter ) parser.add_argument( 'dms_id', type=int, choices=[ x for x, _ in CONFIG.items() ], help='DMS ID to operate on' ) parser.add_argument( 'status', type=str, choices=[ x.value for x in OrderStatus ], help='Order status to move forward' ) args = parser.parse_args() dms_id = args.dms_id status = args.status (batch, encoders) = CONFIG[dms_id] # move from "New" to "Ready To Encode" if status == 'new': _invoke( 'qa-lambda-vector-renew', { 'dms_id': dms_id, 'allowed_encoders': encoders } ) # move from "Encoded" to "Ready To Deliver" elif status == 'encoded': _invoke( 'qa-lambda-vector-ready-deliveries', { 'dms_id': dms_id, 'batch_delivery': batch, 'order_type': 'release' } ) # move from "Ready To Deliver" to "Queued For Delivery" elif status == 'ready_to_deliver': _invoke( 'qa-lambda-vector-throttler', { 'dms_id': dms_id } ) else: raise Exception(f'status of "{status}" not recognized') def _invoke(name, payload): print(name) pprint(payload) result = LAMBDA_CLIENT.invoke( FunctionName=name, Payload=json.dumps(payload) ) pprint(result) if result['ResponseMetadata']['HTTPStatusCode'] != 200: exit(1) if __name__ == '__main__': main()