Work around MariaDB bug in replace_files.py
This commit is contained in:
parent
5f8d8572ad
commit
62c5fa178c
@ -572,12 +572,15 @@ class Tracks(Base):
|
|||||||
Return track with passed path, or None.
|
Return track with passed path, or None.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
return (
|
return (
|
||||||
session.execute(
|
session.execute(
|
||||||
select(Tracks)
|
select(Tracks)
|
||||||
.where(Tracks.path == path)
|
.where(Tracks.path == path)
|
||||||
).scalar_one()
|
).scalar_one()
|
||||||
)
|
)
|
||||||
|
except NoResultFound:
|
||||||
|
return None
|
||||||
|
|
||||||
def rescan(self, session: Session) -> None:
|
def rescan(self, session: Session) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -27,15 +27,14 @@ from helpers import (
|
|||||||
|
|
||||||
from models import Tracks
|
from models import Tracks
|
||||||
from dbconfig import Session
|
from dbconfig import Session
|
||||||
from thefuzz import process
|
from thefuzz import process # type: ignore
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
from string import ascii_lowercase as letters
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
# ###################### SETTINGS #########################
|
# ###################### SETTINGS #########################
|
||||||
process_multiple_matches = True
|
process_multiple_matches = False
|
||||||
do_processing = True
|
do_processing = True
|
||||||
process_no_matches = True
|
process_no_matches = False
|
||||||
# #########################################################
|
# #########################################################
|
||||||
|
|
||||||
|
|
||||||
@ -202,7 +201,10 @@ def main():
|
|||||||
def process_track(src, dst, title, artist):
|
def process_track(src, dst, title, artist):
|
||||||
|
|
||||||
new_path = os.path.join(os.path.dirname(dst), os.path.basename(src))
|
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:
|
if not do_processing:
|
||||||
return
|
return
|
||||||
@ -213,6 +215,16 @@ def process_track(src, dst, title, artist):
|
|||||||
track.title = title
|
track.title = title
|
||||||
track.artist = artist
|
track.artist = artist
|
||||||
track.path = new_path
|
track.path = new_path
|
||||||
|
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()
|
session.commit()
|
||||||
|
|
||||||
print(f"os.unlink({dst}")
|
print(f"os.unlink({dst}")
|
||||||
@ -220,10 +232,7 @@ def process_track(src, dst, title, artist):
|
|||||||
|
|
||||||
os.unlink(dst)
|
os.unlink(dst)
|
||||||
shutil.move(src, new_path)
|
shutil.move(src, new_path)
|
||||||
try:
|
|
||||||
track = Tracks.get_by_path(session, new_path)
|
track = Tracks.get_by_path(session, new_path)
|
||||||
except:
|
|
||||||
import ipdb; ipdb.set_trace()
|
|
||||||
if track:
|
if track:
|
||||||
track.rescan(session)
|
track.rescan(session)
|
||||||
else:
|
else:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user