get_artist_of_disc con cache
This commit is contained in:
@@ -147,7 +147,7 @@ def load_artist_on_cache(artist):
|
|||||||
offset = 0
|
offset = 0
|
||||||
while True:
|
while True:
|
||||||
release_groups = mb.browse_release_groups({'artist': mbid}, limit=100, offset=offset)
|
release_groups = mb.browse_release_groups({'artist': mbid}, limit=100, offset=offset)
|
||||||
if f'artist_{mbid}:release_group_count' in redis:
|
if f'artist_{mbid}:release_group_count' not in redis:
|
||||||
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'):
|
||||||
|
|||||||
@@ -187,33 +187,36 @@ def get_disc(mbid):
|
|||||||
return disc
|
return disc
|
||||||
|
|
||||||
|
|
||||||
def get_discs_of_artist(mbid):
|
def get_discs_of_artist(mbid, limit, page):
|
||||||
"""Obtiene los discos de un artista desde musicbrainz incluyendo"""
|
"""Obtiene los discos de un artista desde musicbrainz incluyendo"""
|
||||||
|
|
||||||
|
offset = limit * (page - 1)
|
||||||
|
|
||||||
mb_discs = []
|
mb_discs = []
|
||||||
|
total = 0
|
||||||
|
|
||||||
with get_redis_connection() as redis:
|
with get_redis_connection() as redis:
|
||||||
if f'artist_{mbid}:release_group_count' in redis:
|
key_count = f'artist_{mbid}:release_group_count'
|
||||||
mb_discs_ids = redis.lrange(f'artist_{mbid}:release_groups', 0, -1)
|
if key_count in redis:
|
||||||
mb_discs = [get_disc(mbid) for mbid in mb_discs_ids]
|
key = f'artist_{mbid}:release_groups'
|
||||||
|
if int(redis.get(key_count)) == redis.llen(key):
|
||||||
|
mb_discs_ids = redis.lrange(key, offset, limit)
|
||||||
|
mb_discs = [get_disc(mbid) for mbid in mb_discs_ids]
|
||||||
|
total = redis.llen(key)
|
||||||
|
|
||||||
if len(mb_discs) == 0:
|
if len(mb_discs) == 0:
|
||||||
jobs.load_artist_on_cache.delay(mbid)
|
jobs.load_artist_on_cache.delay(mbid)
|
||||||
|
|
||||||
offset = 0
|
mb_discs_browse = mb.browse_release_groups(params={'artist': mbid},
|
||||||
while True:
|
limit=limit, offset=offset)
|
||||||
mb_discs_browse = mb.browse_release_groups(params={'artist': mbid},
|
if 'error' in mb_discs_browse:
|
||||||
limit=100, offset=offset)
|
return mb_discs_browse
|
||||||
if 'error' in mb_discs_browse:
|
|
||||||
return mb_discs_browse
|
|
||||||
|
|
||||||
mb_discs.extend(mb_discs_browse.get('release_groups'))
|
mb_discs = mb_discs_browse.get('release_groups')
|
||||||
|
total = mb_discs_browse.get('release_group_count')
|
||||||
offset += 100
|
|
||||||
if offset > mb_discs_browse.get('release_group_count'):
|
|
||||||
break
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
'paginate': paginate(total, limit, page),
|
||||||
'discs': [map_disc(disc) for disc in mb_discs]
|
'discs': [map_disc(disc) for disc in mb_discs]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,10 @@ def search_disc(request):
|
|||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
def get_discs_of_artist(request, mbid):
|
def get_discs_of_artist(request, mbid):
|
||||||
""" Obtiene todos los discos de un artista dado el mbid del artista"""
|
""" Obtiene todos los discos de un artista dado el mbid del artista"""
|
||||||
return Response(medium.get_discs_of_artist(mbid))
|
limit = int(request.GET.get('per_page', 10))
|
||||||
|
page = int(request.GET.get('page', 1))
|
||||||
|
|
||||||
|
return Response(medium.get_discs_of_artist(mbid, limit, page))
|
||||||
|
|
||||||
|
|
||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
|
|||||||
Reference in New Issue
Block a user