Refactoring, adding db context manager
This commit is contained in:
@@ -0,0 +1 @@
|
||||
from groove.db.schema import metadata, track, playlist, entry
|
||||
@@ -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()
|
||||
@@ -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"),
|
||||
)
|
||||
Reference in New Issue
Block a user