"""Product utilities.""" import json from switchboard_consumer.constants import entity_type from switchboard_consumer.constants import message_type from switchboard_consumer.kafka_message import KafkaMessage def get_isrcs(data): """Get ISRCs from product data.""" isrcs = set() try: for component in data.get('components', []): for side in component.get('sides', []): for track in side.get('productTracks', []): try: isrcs.add(track['track']['isrc']) except KeyError: pass except (AttributeError, TypeError): pass return isrcs def get_track_arrangement(data): """Get track arrangement.""" track_arrangement = {} try: for component in data.get('components', []): for side in component.get('sides', []): for track in side.get('productTracks', []): isrc = track['track']['isrc'] arrangement = ( track['componentNumber'], track['sequenceNumber'] ) track_arrangement[isrc] = arrangement except(AttributeError, TypeError, KeyError): pass return track_arrangement def construct_product_kafka_message(data, message): return KafkaMessage(json.dumps({ 'entityType': entity_type.PRODUCT, 'messageType': message_type.METADATA_UPDATE, 'sendingSystem': message.sending_system, 'ids': get_local_ids_from_product_graphql_data(data), 'correlationId': message.correlation_id })) def get_local_ids_from_product_graphql_data(data): """Get local ids from product graphql data.""" local_ids = [] for local_id in data.get('ids'): local_ids.append( { 'system': local_id['system'], 'localId': local_id['localId'], 'businessKey': data['upc'], 'businessKeyType': 'UPC' } ) return local_ids