diff --git a/app/models.py b/app/models.py index 4469777..118ff21 100644 --- a/app/models.py +++ b/app/models.py @@ -572,12 +572,15 @@ class Tracks(Base): Return track with passed path, or None. """ - return ( - session.execute( - select(Tracks) - .where(Tracks.path == path) - ).scalar_one() - ) + try: + return ( + session.execute( + select(Tracks) + .where(Tracks.path == path) + ).scalar_one() + ) + except NoResultFound: + return None def rescan(self, session: Session) -> None: """ diff --git a/app/replace_files.py b/app/replace_files.py index c0d8a22..b05d9a9 100755 --- a/app/replace_files.py +++ b/app/replace_files.py @@ -27,15 +27,14 @@ from helpers import ( from models import Tracks from dbconfig import Session -from thefuzz import process - -from string import ascii_lowercase as letters +from thefuzz import process # type: ignore +from sqlalchemy.exc import IntegrityError from typing import List # ###################### SETTINGS ######################### -process_multiple_matches = True +process_multiple_matches = False do_processing = True -process_no_matches = True +process_no_matches = False # ######################################################### @@ -202,7 +201,10 @@ def main(): def process_track(src, dst, title, artist): new_path = os.path.join(os.path.dirname(dst), os.path.basename(src)) - print(f"process_track:\n {src=}\n {new_path=}\n {dst=}\n {title=}, {artist=}\n") + print( + f"process_track:\n {src=}\n {new_path=}\n " + f"{dst=}\n {title=}, {artist=}\n" + ) if not do_processing: return @@ -213,17 +215,24 @@ def process_track(src, dst, title, artist): track.title = title track.artist = artist track.path = new_path - session.commit() + try: + session.commit() + except IntegrityError: + # https://jira.mariadb.org/browse/MDEV-29345 workaround + session.rollback() + track.title = title + track.artist = artist + track.path = "DUMMY" + session.commit() + track.path = new_path + session.commit() print(f"os.unlink({dst}") print(f"shutil.move({src}, {new_path}") os.unlink(dst) shutil.move(src, new_path) - try: - track = Tracks.get_by_path(session, new_path) - except: - import ipdb; ipdb.set_trace() + track = Tracks.get_by_path(session, new_path) if track: track.rescan(session) else: