Artistas en entidades relacionadas

This commit is contained in:
Daniel Cortes
2020-05-23 02:55:30 -04:00
parent ce38c62ac3
commit 9ab6a2ed9f
2 changed files with 50 additions and 53 deletions

View File

@@ -3,7 +3,6 @@ from utils import pretty_print_json
def map_artist(mb_artist):
pretty_print_json(mb_artist.get('tags'))
return {
'id': mb_artist.get('id'),
'name': mb_artist.get('name'),
@@ -15,6 +14,16 @@ def map_artist(mb_artist):
}
def map_artist_credit(mb_artist_credit):
pretty_print_json(mb_artist_credit)
return {
'id': mb_artist_credit.get('artist').get('id'),
'name': mb_artist_credit.get('artist').get('name'),
'sort_name': mb_artist_credit.get('artist').get('sort_name'),
'disambiguation': mb_artist_credit.get('artist').get('disambiguation'),
}
def map_disc(mb_disc):
disc = {
'id': mb_disc.get('id'),
@@ -22,7 +31,8 @@ def map_disc(mb_disc):
'disambiguation': mb_disc.get('disambiguation'),
'first_release_date': mb_disc.get('first_release_date'),
'primary_type': mb_disc.get('primary_type'),
'cover_art': get_cover_art_disc(mb_disc.get('id'))
'cover_art': get_cover_art_disc(mb_disc.get('id')),
'artist': [map_artist_credit(c) for c in mb_disc.get('artist_credit')]
}
if len(mb_disc.get('secondary_types', [])) > 0:
@@ -39,7 +49,8 @@ def map_release(mb_release):
'status': mb_release.get('status'),
'country': mb_release.get('country'),
'date': mb_release.get('date'),
'cover_art': get_cover_art_release(mb_release.get('id'))
'cover_art': get_cover_art_release(mb_release.get('id')),
'artist': [map_artist_credit(c) for c in mb_release.get('artist_credit')]
}
@@ -49,7 +60,8 @@ def map_recording(mb_recording):
'title': mb_recording.get('title'),
'disambiguation': mb_recording.get('disambiguation'),
'video': mb_recording.get('video'),
'length': mb_recording.get('length')
'length': mb_recording.get('length'),
'artist': [map_artist_credit(c) for c in mb_recording.get('artist_credit')]
}
@@ -96,7 +108,7 @@ def get_artist(mbid):
def get_disc(mbid):
mb_disc = mb.get_release_group_by_mbid(mbid)
mb_disc = mb.get_release_group_by_mbid(mbid, includes=['artists'])
if 'error' in mb_disc:
return mb_disc
@@ -104,7 +116,7 @@ def get_disc(mbid):
def get_discs_of_artist(mbid, limit, page):
mb_discs = mb.browse_release_groups(params={'artist': mbid}, limit=limit, offset=limit * (page - 1))
mb_discs = mb.browse_release_groups(params={'artist': mbid}, includes=['artist-credits'], limit=limit, offset=limit * (page - 1))
if 'error' in mb_discs:
return mb_discs
@@ -126,7 +138,7 @@ def get_artist_of_disc(mbid, limit, page):
def get_release(mbid):
mb_release = mb.get_release_by_mbid(mbid)
mb_release = mb.get_release_by_mbid(mbid, includes=['artists'])
if 'error' in mb_release:
return mb_release
@@ -134,7 +146,7 @@ def get_release(mbid):
def get_releases_of_disc(mbid, limit, page):
mb_releases = mb.browse_releases(params={'release-group': mbid}, limit=limit, offset=limit * (page - 1))
mb_releases = mb.browse_releases(params={'release-group': mbid}, includes=['artist-credits'], limit=limit, offset=limit * (page - 1))
if 'error' in mb_releases:
return mb_releases
@@ -156,7 +168,7 @@ def get_artist_of_release(mbid, limit, page):
def get_recording(mbid):
mb_recording = mb.get_recording_by_mbid(mbid)
mb_recording = mb.get_recording_by_mbid(mbid, includes=['artists'])
if 'error' in mb_recording:
return mb_recording
@@ -164,7 +176,7 @@ def get_recording(mbid):
def get_recordings_of_release(mbid, limit, page):
mb_recordings = mb.browse_recordings(params={'release': mbid}, limit=limit, offset=limit * (page - 1))
mb_recordings = mb.browse_recordings(params={'release': mbid}, includes=['artist-credits'], limit=limit, offset=limit * (page - 1))
if 'error' in mb_recordings:
return mb_recordings
@@ -175,7 +187,7 @@ def get_recordings_of_release(mbid, limit, page):
def get_release_of_recording(mbid, limit, page):
mb_releases = mb.browse_releases(params={'recording': mbid}, limit=limit, offset=limit * (page - 1))
mb_releases = mb.browse_releases(params={'recording': mbid}, includes=['artists-credits'], limit=limit, offset=limit * (page - 1))
if 'error' in mb_releases:
return mb_releases
@@ -228,6 +240,8 @@ def get_cover_art_recording(mbid):
def search_artist(query, limit, page):
mb_artists = mb.search_artist(query=query, limit=limit, offset=limit * (page - 1))
if 'error' in mb_artists:
return mb_artists
return {
'paginate': paginate(mb_artists['count'], limit, page),
@@ -236,7 +250,7 @@ def search_artist(query, limit, page):
def search_disc(query, limit, page):
mb_discs = mb.search_release_group(query=query, limit=limit, offset=limit * (page - 1))
mb_discs = mb.search_release_group(query=query, includes=['artist'], limit=limit, offset=limit * (page - 1))
return {
'paginate': paginate(mb_discs['count'], limit, page),
@@ -245,7 +259,7 @@ def search_disc(query, limit, page):
def search_release(query, limit, page):
mb_releases = mb.search_release(query=query, limit=limit, offset=limit * (page - 1))
mb_releases = mb.search_release(query=query, includes=['artist'], limit=limit, offset=limit * (page - 1))
return {
'paginate': paginate(mb_releases['count'], limit, page),
@@ -254,7 +268,7 @@ def search_release(query, limit, page):
def search_recording(query, limit, page):
mb_recording = mb.search_recording(query=query, limit=limit, offset=limit * (page - 1))
mb_recording = mb.search_recording(query=query, includes=['artist'], limit=limit, offset=limit * (page - 1))
return {
'paginate': paginate(mb_recording['count'], limit, page),

View File

@@ -92,7 +92,7 @@ def _get(entity_type, mbid, includes=None):
return _do_request(f'{_mb_host}/{entity_type}/{mbid}?inc={_includes}')
def _search(entity_type, query, limit=25, offset=0):
def _search(entity_type, query, includes=None, limit=25, offset=0):
"""Does a search of an entity to musicbrainz
:param str entity_type: Type of the entity (artist, release, recording...)
@@ -104,14 +104,17 @@ def _search(entity_type, query, limit=25, offset=0):
:rtype: dict
"""
_log.info(f'Searching {entity_type} with query "{query}" at offset {offset} with limit of {limit}')
_log.info(f'Searching {entity_type} with query "{query}" at offset {offset} with limit of {limit} with includes {includes}')
if limit >= 0 and offset >= 0:
_query = urlencode({'query': query, 'limit': limit, 'offset': offset})
_query = {'query': query, 'limit': limit, 'offset': offset}
else:
_query = urlencode({'query': query})
_query = {'query': query}
return _do_request(f'{_mb_host}/{entity_type}/?{_query}')
if includes is not None:
_query['inc'] = '+'.join(includes)
return _do_request(f'{_mb_host}/{entity_type}/?{urlencode(_query)}')
def _browse(entity_type, params, includes=None, limit=25, offset=0):
@@ -166,9 +169,6 @@ def get_artist_by_mbid(mbid, includes=None):
:param list includes: List of include parameters
:return: dictionary with the response
"""
if includes is None:
includes = []
return _get('artist', mbid, includes)
@@ -180,9 +180,6 @@ def get_release_group_by_mbid(mbid, includes=None):
:param list includes: List of include parameters
:return: dictionary with the response
"""
if includes is None:
includes = []
return _get('release-group', mbid, includes)
@@ -194,9 +191,6 @@ def get_release_by_mbid(mbid, includes=None):
:param list includes: List of include parameters
:return: dictionary with the response
"""
if includes is None:
includes = []
return _get('release', mbid, includes)
@@ -208,58 +202,60 @@ def get_recording_by_mbid(mbid, includes=None):
:param list includes: List of include parameters
:return: dictionary with the response
"""
if includes is None:
includes = []
return _get('recording', mbid, includes)
@cache
def search_artist(query, limit=25, offset=0):
def search_artist(query, includes=None, limit=25, offset=0):
"""Search an artist by a query string
:param str query: Query string
:param list includes: List of include parameters
:param int limit: Limit of the search, defaults to 25 and has a max of 100
:param int offset: Offset of the search for paging purposes
:return: dictionary with the response
"""
return _search('artist', query, limit, offset)
return _search('artist', query, includes, limit, offset)
@cache
def search_release(query, limit=25, offset=0):
def search_release(query, includes=None, limit=25, offset=0):
"""Search a release by a query string
:param str query: Query string
:param list includes: List of include parameters
:param int limit: Limit of the search, defaults to 25 and has a max of 100
:param int offset: Offset of the search for paging purposes
:return: dictionary with the response
"""
return _search('release', query, limit, offset)
return _search('release', query, includes, limit, offset)
@cache
def search_release_group(query, limit=25, offset=0):
def search_release_group(query, includes=None, limit=25, offset=0):
"""Search a release group by a query string
:param str query: Query string
:param list includes: List of include parameters
:param int limit: Limit of the search, defaults to 25 and has a max of 100
:param int offset: Offset of the search for paging purposes
:return: dictionary with the response
"""
return _search('release-group', query, limit, offset)
return _search('release-group', query, includes, limit, offset)
@cache
def search_recording(query, limit=25, offset=0):
def search_recording(query, includes=None, limit=25, offset=0):
"""Search a recording by a query string
:param str query: Query string
:param list includes: List of include parameters
:param int limit: Limit of the search, defaults to 25 and has a max of 100
:param int offset: Offset of the search for paging purposes
:return: dictionary with the response
"""
return _search('recording', query, limit, offset)
return _search('recording', query, includes,limit, offset)
@cache
@@ -272,9 +268,6 @@ def browse_artists(params, includes=None, limit=25, offset=0):
:param int offset: Offset of the search for paging purposes
:return: dictionary with the response
"""
if includes is None:
includes = []
return _browse('artist', params, includes, limit, offset)
@@ -288,9 +281,6 @@ def browse_recordings(params, includes=None, limit=25, offset=0):
:param int offset: Offset of the search for paging purposes
:return: dictionary with the response
"""
if includes is None:
includes = []
return _browse('recording', params, includes, limit, offset)
@@ -304,9 +294,6 @@ def browse_releases(params, includes=None, limit=25, offset=0):
:param int offset: Offset of the search for paging purposes
:return: dictionary with the response
"""
if includes is None:
includes = []
return _browse('release', params, includes, limit, offset)
@@ -320,9 +307,6 @@ def browse_release_groups(params, includes=None, limit=25, offset=0):
:param int offset: Offset of the search for paging purposes
:return: dictionary with the response
"""
if includes is None:
includes = []
return _browse('release-group', params, includes, limit, offset)
@@ -346,4 +330,3 @@ def get_release_group_cover_art(mbid):
:return: dictionary with the response
"""
return _ca('release-group', mbid)