emmental/db/__init__.py

67 lines
2.3 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
import datetime
import lib
import pathlib
def new_db():
from . import sql
try:
return sql.execute("SELECT COUNT(*) from tracks").fetchone()[0] == 0
except:
return True
from . import artist
from . import album
from . import disc
from . import genre
from . import decade
from . import year
from . import library
from . import track
from . import state
from . import user
from . import sql
def _search_table(table, key, search):
if row := sql.execute(f"SELECT {key} FROM {table} "
f"WHERE plstateid=?", [ search ]).fetchone():
return row[0]
def find_playlist(plstateid):
if playlistid := _search_table("playlists", "playlistid", plstateid):
return user.Table.get(playlistid)
if artistid := _search_table("artists", "artistid", plstateid):
return artist.Table.get(artistid)
if albumid := _search_table("albums", "albumid", plstateid):
return album.Table.get(albumid)
if discid := _search_table("discs", "discid", plstateid):
return disc.Table.get(discid)
if genreid := _search_table("genres", "genreid", plstateid):
return genre.Table.get(genreid)
if decadeid := _search_table("decades", "decadeid", plstateid):
return decade.Table.get(decadeid)
if yearid := _search_table("years", "yearid", plstateid):
return year.Table.get(yearid)
if libraryid := _search_table("libraries", "libraryid", plstateid):
return library.Table.get(libraryid)
return None
def make_fake_track(trackno, length, title, path, lib="/a/b/c", art="Test Artist",
alb="Test Album", disk=1, subtitle=None, yeer=2021, mnth=3, dy=18):
lib = library.Table.find(pathlib.Path(lib))
art = artist.Table.find(art, art)
alb = art.find_album(alb, datetime.date(yeer, mnth, dy))
disk = alb.find_disc(disk, subtitle)
dec = decade.Table.find((yeer // 10) * 10)
yeer = dec.find_year(yeer)
return track.Table.insert(lib, art, alb, disk, dec, yeer, trackno,
length, title, pathlib.Path(path))
def reset():
mods = [ track, state, user, artist, album,
disc, genre, decade, year, library ]
for mod in mods: mod.Table.reset()
if lib.version.TESTING: reset()