diff --git a/dev/releases/3.0.yml b/dev/releases/3.0.yml index 3cb6289..6ac393d 100644 --- a/dev/releases/3.0.yml +++ b/dev/releases/3.0.yml @@ -36,3 +36,6 @@ minor_release_name: "Yeonhee" 3.0.6: notes: - "[Bugfix] Better parsing of featuring artists" + - "[Bugfix] Fixed buffered output in Docker" + - "[Bugfix] Fixed importing a Spotify file without path" + - "[Bugfix] No longer releasing database lock during scrobble creation" diff --git a/maloja/database/sqldb.py b/maloja/database/sqldb.py index 1623d57..e0954d9 100644 --- a/maloja/database/sqldb.py +++ b/maloja/database/sqldb.py @@ -157,8 +157,8 @@ def connection_provider(func): ### DB -> DICT -def scrobbles_db_to_dict(rows,include_internal=False): - tracks = get_tracks_map(set(row.track_id for row in rows)) +def scrobbles_db_to_dict(rows,include_internal=False,dbconn=None): + tracks = get_tracks_map(set(row.track_id for row in rows),dbconn=dbconn) return [ { **{ @@ -176,11 +176,11 @@ def scrobbles_db_to_dict(rows,include_internal=False): for row in rows ] -def scrobble_db_to_dict(row): - return scrobbles_db_to_dict([row])[0] +def scrobble_db_to_dict(row,dbconn=None): + return scrobbles_db_to_dict([row],dbconn=dbconn)[0] -def tracks_db_to_dict(rows): - artists = get_artists_of_tracks(set(row.id for row in rows)) +def tracks_db_to_dict(rows,dbconn=None): + artists = get_artists_of_tracks(set(row.id for row in rows),dbconn=dbconn) return [ { "artists":artists[row.id], @@ -191,41 +191,41 @@ def tracks_db_to_dict(rows): for row in rows ] -def track_db_to_dict(row): - return tracks_db_to_dict([row])[0] +def track_db_to_dict(row,dbconn=None): + return tracks_db_to_dict([row],dbconn=dbconn)[0] -def artists_db_to_dict(rows): +def artists_db_to_dict(rows,dbconn=None): return [ row.name for row in rows ] -def artist_db_to_dict(row): - return artists_db_to_dict([row])[0] +def artist_db_to_dict(row,dbconn=None): + return artists_db_to_dict([row],dbconn=dbconn)[0] ### DICT -> DB -def scrobble_dict_to_db(info): +def scrobble_dict_to_db(info,dbconn=None): return { "timestamp":info['time'], "origin":info['origin'], "duration":info['duration'], - "track_id":get_track_id(info['track']), + "track_id":get_track_id(info['track'],dbconn=dbconn), "extra":json.dumps(info.get('extra',{})), "rawscrobble":json.dumps(info.get('rawscrobble',{})) } -def track_dict_to_db(info): +def track_dict_to_db(info,dbconn=None): return { "title":info['title'], "title_normalized":normalize_name(info['title']), "length":info.get('length') } -def artist_dict_to_db(info): +def artist_dict_to_db(info,dbconn=None): return { "name": info, "name_normalized":normalize_name(info) @@ -249,7 +249,7 @@ def add_scrobbles(scrobbleslist,dbconn=None): ops = [ DB['scrobbles'].insert().values( - **scrobble_dict_to_db(s) + **scrobble_dict_to_db(s,dbconn=dbconn) ) for s in scrobbleslist ] @@ -283,7 +283,7 @@ def delete_scrobble(scrobble_id,dbconn=None): @connection_provider def get_track_id(trackdict,dbconn=None): ntitle = normalize_name(trackdict['title']) - artist_ids = [get_artist_id(a) for a in trackdict['artists']] + artist_ids = [get_artist_id(a,dbconn=dbconn) for a in trackdict['artists']] artist_ids = list(set(artist_ids)) @@ -313,7 +313,7 @@ def get_track_id(trackdict,dbconn=None): op = DB['tracks'].insert().values( - **track_dict_to_db(trackdict) + **track_dict_to_db(trackdict,dbconn=dbconn) ) result = dbconn.execute(op) track_id = result.inserted_primary_key[0] @@ -366,7 +366,7 @@ def get_scrobbles_of_artist(artist,since=None,to=None,resolve_references=True,db if since is None: since=0 if to is None: to=now() - artist_id = get_artist_id(artist) + artist_id = get_artist_id(artist,dbconn=dbconn) jointable = sql.join(DB['scrobbles'],DB['trackartists'],DB['scrobbles'].c.track_id == DB['trackartists'].c.track_id) @@ -378,7 +378,7 @@ def get_scrobbles_of_artist(artist,since=None,to=None,resolve_references=True,db result = dbconn.execute(op).all() if resolve_references: - result = scrobbles_db_to_dict(result) + result = scrobbles_db_to_dict(result,dbconn=dbconn) #result = [scrobble_db_to_dict(row,resolve_references=resolve_references) for row in result] return result @@ -389,7 +389,7 @@ def get_scrobbles_of_track(track,since=None,to=None,resolve_references=True,dbco if since is None: since=0 if to is None: to=now() - track_id = get_track_id(track) + track_id = get_track_id(track,dbconn=dbconn) op = DB['scrobbles'].select().where( DB['scrobbles'].c.timestamp<=to, @@ -417,7 +417,7 @@ def get_scrobbles(since=None,to=None,resolve_references=True,dbconn=None): result = dbconn.execute(op).all() if resolve_references: - result = scrobbles_db_to_dict(result) + result = scrobbles_db_to_dict(result,dbconn=dbconn) #result = [scrobble_db_to_dict(row,resolve_references=resolve_references) for i,row in enumerate(result) if i