"""Module for getting metadata from graphQL-product.""" import config from gql import Client, gql from gql.transport.requests import RequestsHTTPTransport from queries import sound_recording, tracks as tracks_query sound_recording_query_str = sound_recording.sound_recording_query def query_graphql(isrc): """Query graphQL-knowledge for tracks based on isrc.""" sound_recording_query_gql = gql(sound_recording_query_str) transport = RequestsHTTPTransport( url=config.GRAPHQL_URL, use_json=True, headers={ 'orchard-user-id': config.OA_USER_ID, 'orchard-identity-id': config.ORCHARD_IDENTITY_ID, 'apollographql-client-name': config.GRAPHQL_CLIENT_NAME, 'orchard-profile-id': config.ORCHARD_PROFILE_ID, 'orchard-profile-type': config.ORCHARD_PROFILE_TYPE }, verify=True ) client = Client( retries=3, transport=transport, fetch_schema_from_transport=False, ) tracks_by_isrc = get_tracks_for_sound_recording(client, isrc, sound_recording_query_gql) # removing profile headers so that graphql-product passes on orchard-user-id to ows-track del(client.transport.headers['orchard-profile-id']) del(client.transport.headers['orchard-profile-type']) track_query_return = query_tracks(client, tracks_by_isrc) for track_metadata in track_query_return: for track in tracks_by_isrc: if track_query_return[track_metadata]['tuid'] == track['id']: track_query_return[track_metadata]['label'] = track['label'] return track_query_return def get_tracks_for_sound_recording(client, isrc, query): """Get all tuids associated with an isrc.""" # todo - if lambda is live, this method should have unit tests query_return = client.execute( query, variable_values={'isrc': isrc} ) label_sound_recordings = query_return['GlobalSoundRecording'][0].get('labelSoundRecordings') tracks = label_sound_recordings[0].get('tracks') for track in tracks: track['label'] = track['product']['label']['name'] del track['product'] return tracks def query_tracks(client, tracks): """Get track metadata for a list a tuids.""" # todo - if lambda is live, this method should have unit tests tuids = [] for track in tracks: tuids.append(track['id']) build_track_query = tracks_query.build_track_query(tuids) tracks_query_gql = gql(build_track_query) return client.execute( tracks_query_gql, variable_values={} )