Agregado cache a release of recordings
This commit is contained in:
@@ -28,7 +28,7 @@ import json
|
||||
import django_rq
|
||||
|
||||
from fetcher import musicbrainz as mb
|
||||
from utils import get_redis_connection, parse_date
|
||||
from utils import get_redis_connection, parse_date, pretty_print_json
|
||||
|
||||
_log = logging.getLogger('fetcher_jobs')
|
||||
_log.addHandler(logging.NullHandler())
|
||||
@@ -74,7 +74,7 @@ def load_entities_of_recording(recording):
|
||||
mbid = recording.get('id')
|
||||
|
||||
with get_redis_connection() as redis:
|
||||
if f'recording:{mbid}' not in redis:
|
||||
if f'recording:{mbid}' in redis:
|
||||
# La única forma de agregar en cache una recording es a través de su release
|
||||
# por lo que si ya esta guardada, su release lo estará
|
||||
return
|
||||
@@ -82,14 +82,18 @@ def load_entities_of_recording(recording):
|
||||
offset = 0
|
||||
while True:
|
||||
releases = mb.browse_releases({'recording': mbid},
|
||||
includes=['recordings', 'artists'],
|
||||
includes=['recordings', 'artist-credits'],
|
||||
limit=100, offset=offset)
|
||||
pretty_print_json(releases)
|
||||
|
||||
for release in releases:
|
||||
# lo unico que sirve hacer aqui es almacenar en cuantas releases se encuentra la
|
||||
# grabacion
|
||||
redis.set(f'recording:{mbid}:release:count', releases.get('release_count'))
|
||||
for release in releases.get('releases'):
|
||||
load_entities_of_release.delay(release.get('id'))
|
||||
|
||||
offset += 100
|
||||
if offset > releases.get('release-count'):
|
||||
if offset > releases.get('release_count'):
|
||||
break
|
||||
|
||||
|
||||
@@ -104,7 +108,7 @@ def load_entities_of_release(release):
|
||||
# Cargar release solo si no esta almacenado
|
||||
if f'release:{mbid}' not in redis:
|
||||
if isinstance(release, str):
|
||||
release = mb.get_release_by_mbid(mbid, ['recordings', 'artists'])
|
||||
release = mb.get_release_by_mbid(mbid, ['recordings', 'artist-credits'])
|
||||
redis.set(f'release:{mbid}', json.dumps(release))
|
||||
_log.info('Release %s fue almacenada en cache', mbid)
|
||||
else:
|
||||
@@ -135,12 +139,18 @@ def load_entities_of_release(release):
|
||||
redis.zadd(f'release:{mbid}:media', {json.dumps(media): media['position']})
|
||||
for track in raw_media.get('tracks', []):
|
||||
recording_key = f'release:{mbid}:media:{media.get("position")}:recordings'
|
||||
|
||||
recording = track.get('recording')
|
||||
recording_id = recording.get('id')
|
||||
recording_artist = redis.get(f'release:{mbid}:artist')
|
||||
|
||||
redis.set(f'{recording_key}:count', media.get('track_count'))
|
||||
redis.zadd(recording_key, {recording_id: track.get("position")})
|
||||
redis.set(f'recording:{recording_id}', json.dumps(recording))
|
||||
redis.set(f'recording:{recording_id}:release', mbid)
|
||||
redis.set(f'recording:{recording_id}:artist', recording_artist)
|
||||
|
||||
release_date = parse_date(release.get('release_events', [{}])[0].get('date'))
|
||||
redis.zadd(f'recording:{recording_id}:release', {mbid: release_date.timestamp()})
|
||||
|
||||
|
||||
@django_rq.job
|
||||
|
||||
Reference in New Issue
Block a user