Refactoring, adding db context manager

This commit is contained in:
evilchili
2022-11-20 09:28:00 -08:00
parent 3359fe1b1a
commit a34fcc648b
6 changed files with 70 additions and 39 deletions
+1
View File
@@ -0,0 +1 @@
from groove.db.schema import metadata, track, playlist, entry
+43
View File
@@ -0,0 +1,43 @@
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from . import metadata
class DatabaseManager:
"""
A context manager for working with sqllite database.
"""
def __init__(self):
self._engine = None
self._session = None
@property
def engine(self):
if not self._engine:
self._engine = create_engine(f"sqlite:///{os.environ.get('DATABASE_PATH')}", future=True)
return self._engine
@property
def session(self):
if not self._session:
Session = sessionmaker(bind=self.engine, future=True)
self._session = Session()
return self._session
def import_from_filesystem(self):
pass
def __enter__(self):
metadata.create_all(bind=self.engine)
return self
def __exit__(self, exc_type, exc_value, traceback):
if self.session:
self.session.close()
database_manager = DatabaseManager()
+29
View File
@@ -0,0 +1,29 @@
from sqlalchemy import MetaData
from sqlalchemy import Table, Column, Integer, String, UnicodeText, ForeignKey, PrimaryKeyConstraint
metadata = MetaData()
track = Table(
"track",
metadata,
Column("id", Integer, primary_key=True, autoincrement=True),
Column("relpath", UnicodeText, index=True, unique=True),
)
playlist = Table(
"playlist",
metadata,
Column("id", Integer, primary_key=True, autoincrement=True),
Column("name", String),
Column("description", UnicodeText),
Column("slug", String, index=True, unique=True),
)
entry = Table(
"entry",
metadata,
Column("track", Integer),
Column("playlist_id", Integer, ForeignKey("playlist.id")),
Column("track_id", Integer, ForeignKey("track.id")),
PrimaryKeyConstraint("playlist_id", "track"),
)