From 9f26cce34bf665410fa2d2f7cc4a3c10d2ce6b81 Mon Sep 17 00:00:00 2001
From: krateng <git.noreply@krateng.ch>
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