From 9f26cce34bf665410fa2d2f7cc4a3c10d2ce6b81 Mon Sep 17 00:00:00 2001 From: krateng Date: Thu, 7 Apr 2022 21:20:35 +0200 Subject: [PATCH] Avoided ID pollution from loading and deleting artists --- maloja/database/associated.py | 9 ++++++++- maloja/database/sqldb.py | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/maloja/database/associated.py b/maloja/database/associated.py index d3f233d..b930056 100644 --- a/maloja/database/associated.py +++ b/maloja/database/associated.py @@ -20,10 +20,17 @@ def load_associated_rules(): # load from file raw = tsv.parse_all(data_dir["rules"](),"string","string","string") rules = [{'source_artist':b,'target_artist':c} for [a,b,c] in raw if a=="countas"] + + #for rule in rules: + # print(f"Rule to replace {rule['source_artist']} with {rule['target_artist']}:") + # test = {k:sqldb.get_artist_id(rule[k],create_new=False) for k in rule} + # if test['source_artist'] is None: print("axed") + #allartists = set([*[r['source_artist'] for r in rules],*[r['target_artist'] for r in rules]]) # find ids - rules = [{k:sqldb.get_artist_id(rule[k]) for k in rule} for rule in rules] + rules = [{k:sqldb.get_artist_id(rule[k],create_new=False) for k in rule} for rule in rules] + rules = [r for r in rules if r['source_artist'] is not None] # write to db ops = [ diff --git a/maloja/database/sqldb.py b/maloja/database/sqldb.py index 3776d2f..4e3dc73 100644 --- a/maloja/database/sqldb.py +++ b/maloja/database/sqldb.py @@ -328,7 +328,7 @@ def get_track_id(trackdict,dbconn=None): @cached_wrapper @connection_provider -def get_artist_id(artistname,dbconn=None): +def get_artist_id(artistname,create_new=True,dbconn=None): nname = normalize_name(artistname) #print("looking for",nname) @@ -342,6 +342,8 @@ def get_artist_id(artistname,dbconn=None): #print("ID for",artistname,"was",row[0]) return row.id + if not create_new: return None + op = DB['artists'].insert().values( name=artistname, name_normalized=nname