Trabajando para aprovechar el cache el las relaciones

This commit is contained in:
Daniel Cortes
2020-06-09 01:55:12 -04:00
parent 2edca8e255
commit 72bcf94d11
5 changed files with 57 additions and 30 deletions

View File

@@ -8,10 +8,12 @@ import json
from math import ceil
from django.core.cache import cache
from django_redis import get_redis_connection
from country_list import countries_for_language
import fetcher.musicbrainz as mb
from fetcher import jobs
from utils import make_key
###
@@ -182,17 +184,34 @@ def get_disc(mbid):
return disc
def get_discs_of_artist(mbid, limit, page):
"""Obtiene los discos de un artista desde musicbrainz incluyendo los creditos al artista"""
mb_discs = mb.browse_release_groups(params={'artist': mbid}, includes=['artist-credits'],
limit=limit, offset=limit * (page - 1))
def get_discs_of_artist(mbid):
"""Obtiene los discos de un artista desde musicbrainz incluyendo"""
if 'error' in mb_discs:
return mb_discs
mb_discs = []
with get_redis_connection("default") as raw_cache:
if raw_cache.exists(make_key(f'artist_{mbid}:release_group_count')) == 1:
mb_discs_ids = raw_cache.lrange(make_key(f'artist_{mbid}:release_groups'), 0, -1)
mb_discs = [get_disc(str(mbid, 'utf-8')) for mbid in mb_discs_ids]
if len(mb_discs) == 0:
jobs.load_artist_on_cache.delay(mbid)
offset = 0
while True:
mb_discs_browse = mb.browse_release_groups(params={'artist': mbid},
limit=100, offset=offset)
if 'error' in mb_discs_browse:
return mb_discs_browse
mb_discs.extend(*mb_discs_browse.get('release_groups'))
offset += 100
if offset > mb_discs_browse.get('release_group_count'):
break
return {
'paginate': paginate(mb_discs['release_group_count'], limit, page),
'discs': [map_disc(disc) for disc in mb_discs['release_groups']]
'discs': [map_disc(disc) for disc in mb_discs]
}