Make session global in model
This commit is contained in:
parent
cbcfd4a5bf
commit
09d56d1c27
41
songdb.py
41
songdb.py
@ -24,8 +24,20 @@ pytiger.logging.config.basic_config(stderr=False, level=logging.INFO)
|
|||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
log.info("Starting")
|
log.info("Starting")
|
||||||
|
|
||||||
# Declare mapping
|
# Create session at the global level as per
|
||||||
|
# https://docs.sqlalchemy.org/en/13/orm/session_basics.html
|
||||||
|
|
||||||
|
# Set up database connection
|
||||||
|
log.info("Connect to database")
|
||||||
|
engine = sqlalchemy.create_engine(f"{MYSQL_CONNECT}?charset=utf8",
|
||||||
|
encoding='utf-8',
|
||||||
|
echo=DISPLAY_SQL)
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
Base.metadata.create_all(engine)
|
||||||
|
|
||||||
|
# Create a Session
|
||||||
|
Session = sessionmaker(bind=engine)
|
||||||
|
session = Session()
|
||||||
|
|
||||||
|
|
||||||
# Database classes
|
# Database classes
|
||||||
@ -47,7 +59,7 @@ class Tracks(Base):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_or_create(cls, session, path):
|
def get_or_create(cls, path):
|
||||||
try:
|
try:
|
||||||
track = session.query(cls).filter(cls.path == path).one()
|
track = session.query(cls).filter(cls.path == path).one()
|
||||||
except NoResultFound:
|
except NoResultFound:
|
||||||
@ -56,30 +68,16 @@ class Tracks(Base):
|
|||||||
session.add(track)
|
session.add(track)
|
||||||
return track
|
return track
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def search_titles(text):
|
def search_titles(text):
|
||||||
return Tracks.query.filter(
|
return session.query(Tracks).filter(
|
||||||
Tracks.title.ilike(text)
|
Tracks.title.ilike(f"%{text}%")
|
||||||
).all()
|
).all()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"Main loop"
|
"Main loop"
|
||||||
|
|
||||||
# Set up database connection
|
|
||||||
log.info("Connect to database")
|
|
||||||
engine = sqlalchemy.create_engine(f"{MYSQL_CONNECT}?charset=utf8",
|
|
||||||
encoding='utf-8',
|
|
||||||
echo=DISPLAY_SQL)
|
|
||||||
Base.metadata.create_all(engine)
|
|
||||||
|
|
||||||
# Create a Session
|
|
||||||
Session = sessionmaker(bind=engine)
|
|
||||||
session = Session()
|
|
||||||
|
|
||||||
# Parse command line
|
# Parse command line
|
||||||
p = argparse.ArgumentParser()
|
p = argparse.ArgumentParser()
|
||||||
p.add_argument('-u', '--update',
|
p.add_argument('-u', '--update',
|
||||||
@ -90,12 +88,12 @@ def main():
|
|||||||
# Run as required
|
# Run as required
|
||||||
if args.update:
|
if args.update:
|
||||||
log.info("Updating database")
|
log.info("Updating database")
|
||||||
update_db(session)
|
update_db()
|
||||||
|
|
||||||
log.info("Finished")
|
log.info("Finished")
|
||||||
|
|
||||||
|
|
||||||
def update_db(session):
|
def update_db():
|
||||||
"""
|
"""
|
||||||
Repopulate database
|
Repopulate database
|
||||||
|
|
||||||
@ -109,8 +107,7 @@ def update_db(session):
|
|||||||
path = os.path.join(root, f)
|
path = os.path.join(root, f)
|
||||||
ext = os.path.splitext(f)[1]
|
ext = os.path.splitext(f)[1]
|
||||||
if ext in [".flac", ".mp3"]:
|
if ext in [".flac", ".mp3"]:
|
||||||
track = Tracks.get_or_create(session,
|
track = Tracks.get_or_create(os.path.relpath(path, ROOT))
|
||||||
os.path.relpath(path, ROOT))
|
|
||||||
tag = TinyTag.get(path)
|
tag = TinyTag.get(path)
|
||||||
track.title = tag.title
|
track.title = tag.title
|
||||||
track.artist = tag.artist
|
track.artist = tag.artist
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user