44 lines
985 B
Python
44 lines
985 B
Python
|
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
|