From 9205e1bcf1bcb3d803de151182aa44c67260deb5 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 17 Mar 2026 18:48:35 -0400 Subject: [PATCH] feat: SQLAlchemy async database setup --- fablednetmon/database.py | 20 ++++++++++++++++++++ fablednetmon/models/__init__.py | 4 ++++ fablednetmon/models/base.py | 5 +++++ fablednetmon/models/users.py | 2 ++ 4 files changed, 31 insertions(+) create mode 100644 fablednetmon/database.py create mode 100644 fablednetmon/models/__init__.py create mode 100644 fablednetmon/models/base.py create mode 100644 fablednetmon/models/users.py diff --git a/fablednetmon/database.py b/fablednetmon/database.py new file mode 100644 index 0000000..b04ce15 --- /dev/null +++ b/fablednetmon/database.py @@ -0,0 +1,20 @@ +from __future__ import annotations +from typing import TYPE_CHECKING +from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession + +if TYPE_CHECKING: + from quart import Quart + + +def init_db(app: "Quart") -> None: + """Create async engine and attach db_sessionmaker to app. + + Called during create_app() after config is loaded. + Does not create tables — Alembic handles migrations. + """ + db_url: str = app.config["DATABASE_URL"] + engine = create_async_engine(db_url, echo=False) + app.db_sessionmaker: async_sessionmaker[AsyncSession] = async_sessionmaker( + engine, expire_on_commit=False + ) + app._db_engine = engine diff --git a/fablednetmon/models/__init__.py b/fablednetmon/models/__init__.py new file mode 100644 index 0000000..c0704da --- /dev/null +++ b/fablednetmon/models/__init__.py @@ -0,0 +1,4 @@ +from .base import Base +from .users import User + +__all__ = ["Base", "User"] diff --git a/fablednetmon/models/base.py b/fablednetmon/models/base.py new file mode 100644 index 0000000..fa2b68a --- /dev/null +++ b/fablednetmon/models/base.py @@ -0,0 +1,5 @@ +from sqlalchemy.orm import DeclarativeBase + + +class Base(DeclarativeBase): + pass diff --git a/fablednetmon/models/users.py b/fablednetmon/models/users.py new file mode 100644 index 0000000..f49237c --- /dev/null +++ b/fablednetmon/models/users.py @@ -0,0 +1,2 @@ +# fablednetmon/models/users.py — stub, filled in Task 4 +from .base import Base