agregado cache a get_artist_of_disc
This commit is contained in:
@@ -151,7 +151,9 @@ def load_artist_on_cache(artist):
|
|||||||
redis.set(f'artist_{mbid}:release_group_count',
|
redis.set(f'artist_{mbid}:release_group_count',
|
||||||
release_groups.get('release_group_count'))
|
release_groups.get('release_group_count'))
|
||||||
for release_group in release_groups.get('release_groups'):
|
for release_group in release_groups.get('release_groups'):
|
||||||
redis.rpush(f'artist_{mbid}:release_groups', release_group.get('id'))
|
release_group_id = release_group.get('id')
|
||||||
|
redis.rpush(f'artist_{mbid}:release_groups', release_group_id)
|
||||||
|
redis.set(f'release_group_{release_group_id}:artist', mbid)
|
||||||
load_entities_of_release_group.delay(release_group)
|
load_entities_of_release_group.delay(release_group)
|
||||||
|
|
||||||
offset += 100
|
offset += 100
|
||||||
|
|||||||
@@ -199,9 +199,9 @@ def get_discs_of_artist(mbid, limit, page):
|
|||||||
key_count = f'artist_{mbid}:release_group_count'
|
key_count = f'artist_{mbid}:release_group_count'
|
||||||
if key_count in redis:
|
if key_count in redis:
|
||||||
key = f'artist_{mbid}:release_groups'
|
key = f'artist_{mbid}:release_groups'
|
||||||
if int(redis.get(key_count)) == redis.llen(key):
|
mb_disc_ids = redis.lrange(key, offset, limit)
|
||||||
mb_discs_ids = redis.lrange(key, offset, limit)
|
if redis.exists(*[f'release_group_{mbid}' for mbid in mb_disc_ids]) == len(mb_disc_ids):
|
||||||
mb_discs = [get_disc(mbid) for mbid in mb_discs_ids]
|
mb_discs = [get_disc(mbid) for mbid in mb_disc_ids]
|
||||||
total = redis.llen(key)
|
total = redis.llen(key)
|
||||||
|
|
||||||
if len(mb_discs) == 0:
|
if len(mb_discs) == 0:
|
||||||
@@ -221,17 +221,28 @@ def get_discs_of_artist(mbid, limit, page):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_artist_of_disc(mbid, limit, page):
|
def get_artist_of_disc(mbid):
|
||||||
"""Obtiene el artista de un disco"""
|
"""Obtiene el artista de un disco"""
|
||||||
mb_artists = mb.browse_artists(params={'release-group': mbid},
|
|
||||||
limit=limit, offset=limit * (page - 1))
|
|
||||||
|
|
||||||
if 'error' in mb_artists:
|
mb_artist = None
|
||||||
return mb_artists
|
|
||||||
|
with get_redis_connection() as redis:
|
||||||
|
key_id = f'release_group_{mbid}:artist'
|
||||||
|
if key_id in redis:
|
||||||
|
mb_artist = get_artist(redis.get(key_id))
|
||||||
|
|
||||||
|
if mb_artist is None:
|
||||||
|
mb_artist_browse = mb.browse_artists(params={'release-group': mbid}, limit=0, offset=0)
|
||||||
|
|
||||||
|
if 'error' in mb_artist_browse:
|
||||||
|
return mb_artist_browse
|
||||||
|
|
||||||
|
mb_artist = mb_artist_browse.get('artists')[0]
|
||||||
|
|
||||||
|
jobs.load_artist_on_cache.delay(mb_artist)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'paginate': paginate(mb_artists.get('artist_count', 0), limit, page),
|
'artist': map_artist(mb_artist)
|
||||||
'artists': [map_artist(artist) for artist in mb_artists['artists']]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -69,15 +69,9 @@ def get_discs_of_artist(request, mbid):
|
|||||||
|
|
||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
def get_artist_of_disc(request, mbid):
|
def get_artist_of_disc(request, mbid):
|
||||||
""" Obtiene el artista de un disco
|
""" Obtiene el artista de un disco"""
|
||||||
|
|
||||||
Como los datos son paginables la query puede contener per_page y page para definir cuantos
|
return Response(medium.get_artist_of_disc(mbid))
|
||||||
elementos mostrar por pagina y que pagina mostrar.
|
|
||||||
"""
|
|
||||||
limit = int(request.GET.get('per_page', 10))
|
|
||||||
page = int(request.GET.get('page', 1))
|
|
||||||
|
|
||||||
return Response(medium.get_artist_of_disc(mbid, limit, page))
|
|
||||||
|
|
||||||
|
|
||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
|
|||||||
Reference in New Issue
Block a user