"""Compile and force fb delivery in qa.""" import json import sys import uuid import boto3 def main(): """Entrypoint.""" obj_type = sys.argv[1] obj_id = sys.argv[2] if obj_type not in ('Track', 'OrchardAsset', 'OrchardSoundRecording'): raise Exception(f'{obj_type} not recognized!') lambda_client = boto3.client('lambda') s3_client = boto3.client('s3') # invoke sr-add-version to re-compile latest data for OSR compile_payload = { 'label': obj_type, 'id': obj_id } compile_response = lambda_client.invoke( FunctionName='qa-lambda-sr-add-version', InvocationType='RequestResponse', Payload=json.dumps(compile_payload).encode('utf-8') ) # parse results print(compile_response) add_version_result = json.loads(compile_response['Payload'].read().decode('utf-8')) # noqa:E501 print(add_version_result) osr_list = [ (x['sound_recording_id'], x['version_id']) for x in add_version_result['results'] ] print('') # generate XML and deliver to facebook for osr_id, osr_version in osr_list: exc_id = str(uuid.uuid4()) print(osr_id, osr_version, exc_id) deliver_payload = { 'sound_recording': { 'id': osr_id, 'version': osr_version }, 'upload_asset': False, 'execution_name': exc_id } deliver_response = lambda_client.invoke( FunctionName='qa-lambda-fb-sr-delivery', InvocationType='RequestResponse', Payload=json.dumps(deliver_payload).encode('utf-8') ) # parse results print(deliver_response) deliver_result = json.loads(deliver_response['Payload'].read().decode('utf-8')) # noqa:E501 print(deliver_result) # download generated file(s) for filename in deliver_result['details']['filenames']: if 'BatchComplete' not in filename: s3_response = s3_client.get_object( Bucket='qa-sr-delivery-audit-bucket', Key=exc_id + '/' + filename ) print(s3_response) s3_result = s3_response['Body'].read() local_filename = filename.split('/')[-1] with open(local_filename, 'wb') as f: f.write(s3_result) print(local_filename) print('') if __name__ == '__main__': main()