def test_serialize_recording(self): """Tests that recordings are serialized properly.""" # Without any includes recording = serialize_recording(recording_numb_encore_explicit) self.assertDictEqual( recording, { 'length': 205.28, 'id': 'daccb724-8023-432a-854c-e0accb6c8678', 'name': 'Numb/Encore (explicit)', }) # With artists included recording = serialize_recording(recording_numb_encore_explicit, includes={'artists'}) self.assertDictEqual( recording, { 'id': 'daccb724-8023-432a-854c-e0accb6c8678', 'name': 'Numb/Encore (explicit)', 'length': 205.28, 'artists': [{ 'id': 'f82bcf78-5b69-4622-a5ef-73800768d9ac', 'name': 'JAY Z', 'credited_name': 'Jay-Z', 'join_phrase': '/' }, { 'id': 'f59c5520-5f46-4d2c-b2c4-822eabf53419', 'name': 'Linkin Park' }] })
def test_serialize_recording(self): """Tests that recordings are serialized properly.""" # Without any includes recording = serialize_recording(recording_numb_encore_explicit) self.assertDictEqual(recording, { 'length': 205.28, 'id': 'daccb724-8023-432a-854c-e0accb6c8678', 'name': 'Numb/Encore (explicit)', } ) # With artists included recording = serialize_recording(recording_numb_encore_explicit, includes={'artists'}) self.assertDictEqual(recording, { 'id': 'daccb724-8023-432a-854c-e0accb6c8678', 'name': 'Numb/Encore (explicit)', 'length': 205.28, 'artists': [ { 'id': 'f82bcf78-5b69-4622-a5ef-73800768d9ac', 'name': 'JAY Z', 'credited_name': 'Jay-Z', 'join_phrase': '/' }, { 'id': 'f59c5520-5f46-4d2c-b2c4-822eabf53419', 'name': 'Linkin Park' } ] } )
def _fetch_multiple_recordings(mbids, includes=None): """ Fetch multiple recordings with MusicBrainz IDs. Args: mbids (list): list of uuid (MBID(gid)) of the recordings. includes (list): List of values to be included. For list of possible values visit https://bitbucket.org/lalinsky/mbdata/wiki/API/v1/includes#!recording Returns: Dictionary containing the recording information with MBIDs as keys. - id: Recording mbid - name: Name of the recording - length: length of the recording - artists: - artist information: id, name, credited_name and join_phrase """ if includes is None: includes = [] includes_data = defaultdict(dict) check_includes('recording', includes) with mb_session() as db: query = db.query(Recording) if 'artist' in includes or 'artists' in includes: query = query.options(joinedload("artist_credit", innerjoin=True)) if 'artists' in includes: query = query.\ options(subqueryload("artist_credit.artists")).\ options(joinedload("artist_credit.artists.artist", innerjoin=True)) recordings = get_entities_by_gids( query=query, entity_type='recording', mbids=mbids, ) recording_ids = [recording.id for recording in recordings.values()] if 'artist' in includes: for recording in recordings.values(): includes_data[recording.id]['artist'] = recording.artist_credit if 'artists' in includes: for recording in recordings.values(): includes_data[ recording.id]['artists'] = recording.artist_credit.artists serial_recordings = { str(mbid): serialize_recording(recordings[mbid], includes_data[recordings[mbid].id]) for mbid in mbids } return serial_recordings
def _fetch_multiple_recordings(mbids, includes=None): """ Fetch multiple recordings with MusicBrainz IDs. Args: mbids (list): list of uuid (MBID(gid)) of the recordings. includes (list): List of values to be included. For list of possible values visit https://bitbucket.org/lalinsky/mbdata/wiki/API/v1/includes#!recording Returns: Dictionary containing the recording information with MBIDs as keys. - id: Recording mbid - name: Name of the recording - length: length of the recording - artists: - artist information: id, name, credited_name and join_phrase """ if includes is None: includes = [] includes_data = defaultdict(dict) check_includes('recording', includes) with mb_session() as db: query = db.query(Recording) if 'artist' in includes or 'artists' in includes: query = query.options(joinedload("artist_credit", innerjoin=True)) if 'artists' in includes: query = query.\ options(subqueryload("artist_credit.artists")).\ options(joinedload("artist_credit.artists.artist", innerjoin=True)) recordings = get_entities_by_gids( query=query, entity_type='recording', mbids=mbids, ) recording_ids = [recording.id for recording in recordings.values()] if 'artist' in includes: for recording in recordings.values(): includes_data[recording.id]['artist'] = recording.artist_credit if 'artists' in includes: for recording in recordings.values(): includes_data[recording.id]['artists'] = recording.artist_credit.artists serial_recordings = {str(mbid): serialize_recording(recordings[mbid], includes_data[recordings[mbid].id]) for mbid in mbids} return serial_recordings