Connection.use()

This commit is contained in:
Jörn-Michael Miehe 2022-03-20 00:12:56 +00:00
parent 21411694e8
commit 00bdf88b6e
3 changed files with 22 additions and 2 deletions

View file

@ -6,6 +6,19 @@ from sqlalchemy.orm import Session, sessionmaker
from .models import ORMBaseModel
class SessionManager:
__session: Session
def __init__(self, session: Session) -> None:
self.__session = session
def __enter__(self) -> Session:
return self.__session
def __exit__(self, *args) -> None:
self.__session.close()
class Connection:
engine: Engine | None = None
session_local: sessionmaker | None = None
@ -18,6 +31,13 @@ class Connection:
)
ORMBaseModel.metadata.create_all(bind=engine)
@classmethod
def use(cls) -> SessionManager | None:
if cls.session_local is None:
return None
return SessionManager(cls.session_local())
@classmethod
async def get(cls) -> Generator[Session | None, None, None]:
if cls.session_local is None:

View file

@ -39,7 +39,7 @@ async def on_startup() -> None:
Connection.connect(await current_config.db.db_engine)
# some testing
async for db in Connection.get():
with Connection.use() as db:
print(schemas.User.from_db(db, "admin"))
print(schemas.User.from_db(db, "nonexistent"))

View file

@ -25,7 +25,7 @@ async def install(
await config.save()
Connection.connect(await config.db.db_engine)
async for db in Connection.get():
with Connection.use() as db:
admin_user = schemas.User.create(
db=db,
user=admin_user,