diff --git a/Containerfile b/Containerfile index 22b0b72..8e11da8 100644 --- a/Containerfile +++ b/Containerfile @@ -39,9 +39,10 @@ COPY . . RUN pip install /usr/src/app -# Docker-specific configuration and default to IPv4 +# Docker-specific configuration +# defaulting to IPv4 is no longer necessary (default host is dual stack) ENV MALOJA_SKIP_SETUP=yes -ENV MALOJA_HOST=0.0.0.0 +ENV PYTHONUNBUFFERED=1 EXPOSE 42010 # use exec form for better signal handling https://docs.docker.com/engine/reference/builder/#entrypoint 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 799e426..516c63b 100644 --- a/maloja/database/sqldb.py +++ b/maloja/database/sqldb.py @@ -158,8 +158,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 [ { **{ @@ -177,11 +177,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], @@ -192,41 +192,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) @@ -250,7 +250,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 ] @@ -286,7 +286,7 @@ def delete_scrobble(scrobble_id,dbconn=None): @connection_provider def get_track_id(trackdict,create_new=True,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)) @@ -318,7 +318,7 @@ def get_track_id(trackdict,create_new=True,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] @@ -459,7 +459,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 @@ -498,7 +498,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