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
+9 -26
View File
@@ -3,26 +3,19 @@ import os
import typer
from dotenv import load_dotenv
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from groove import ondemand
from groove.db import metadata
from groove import webserver
from groove.db.manager import database_manager
app = typer.Typer()
@app.command()
def initialize():
load_dotenv()
# todo: abstract this and replace in_memory_db fixture
engine = create_engine(f"sqlite:///{os.environ.get('DATABASE_PATH')}", future=True)
Session = sessionmaker(bind=engine, future=True)
session = Session()
metadata.create_all(bind=engine)
session.close()
debug = os.getenv('DEBUG', None)
logging.basicConfig(format='%(asctime)s - %(message)s',
level=logging.DEBUG if debug else logging.INFO)
@app.command()
@@ -43,21 +36,11 @@ def server(
"""
Start the Groove on Demand playlsit server.
"""
load_dotenv()
ondemand.initialize()
print("Starting Groove On Demand...")
debug = os.getenv('DEBUG', None)
logging.basicConfig(format='%(asctime)s - %(message)s', level=logging.DEBUG if debug else logging.INFO)
ondemand.server.run(
host=os.getenv('HOST', host),
port=os.getenv('PORT', port),
debug=debug,
server='paste',
quiet=True
)
initialize()
with database_manager as manager:
manager.import_from_filesystem()
webserver.start(host=host, port=port, debug=debug)
if __name__ == '__main__':
+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()
+11 -2
View File
@@ -11,11 +11,20 @@ from groove.helper import PlaylistDatabaseHelper
server = bottle.Bottle()
def initialize():
def start(host: str, port: int, debug: bool) -> None:
"""
Configure the sqlite database.
Start the Bottle app.
"""
logging.debug(f"Configuring sqllite using {os.environ.get('DATABASE_PATH')}")
server.install(sqlite.Plugin(dbfile=os.environ.get('DATABASE_PATH')))
logging.debug(f"Configuring webserver with host={host}, port={port}, debug={debug}")
server.run(
host=os.getenv('HOST', host),
port=os.getenv('PORT', port),
debug=debug,
server='paste',
quiet=True
)
@server.route('/')