"""Common S3 Bulk Asset helper functions.""" from types import SimpleNamespace class MissingProduct(Exception): """Missing product in bulk asset json.""" def load_bulk_asset_json(event): """Get Bulk Asset JSON data from S3 file. Args: event (event): Event received by lambdas Returns: json """ product = event.get('product') if not product: raise MissingProduct('Product not attached to context') # DDEX_INGESTER_INTEGRATION: For audio assets, the nullified fields # below will need to be properly mapped. product_field = SimpleNamespace( product_id=product.get('product_id'), upc=product.get('upc'), vendor_id=product.get('vendor_id'), subaccount_id=product.get('subaccount_id'), release_name=product.get('release_name'), project_code=product.get('project_code'), project_name=product.get('project_name'), project_id=product.get('project_id') ) if event.get('asset_type') == 'cover': artwork_field = SimpleNamespace( bucket=product.get('artwork', {}).get('bucket'), key=product.get('artwork', {}).get('key'), filename=product.get('artwork', {}).get('filename'), ows_assets_filename=product.get( 'artwork', {}).get('ows_assets_filename') ) product_field.artwork = artwork_field elif event.get('asset_type') == 'audio': track_field = SimpleNamespace( bucket=product.get('track', {}).get('bucket'), key=product.get('track', {}).get('key'), filename=product.get('track', {}).get('filename'), ows_assets_filename=product.get( 'track', {}).get('ows_assets_filename'), isrc=product.get('track', {}).get('isrc'), tuid=product.get('track', {}).get('tuid'), track_sequence_number=product.get( 'track', {}).get('track_sequence_number'), track_volume_number=product.get( 'track', {}).get('track_volume_number'), track_name=product.get('track', {}).get('track_name') ) product_field.track = track_field return SimpleNamespace( product=product_field, asset_type=event.get('asset_type'), execution_name=event.get('execution_name'), state_machine_name=event.get('state_machine_name'), correlation_id=event.get('correlation_id') )