From bd71321492811b5e7e1b2c0151085e2ce9dfddcd Mon Sep 17 00:00:00 2001 From: Humberto Rocha Date: Sat, 31 Jan 2026 16:11:01 -0500 Subject: [PATCH] Make service async and cleanup refs to old sqlite ref --- pyproject.toml | 2 +- src/wheke_sqlmodel/__init__.py | 14 ++++++------- src/wheke_sqlmodel/_cli.py | 13 +++++++++++- src/wheke_sqlmodel/_service.py | 35 +++++++++++++++++++++------------ src/wheke_sqlmodel/_settings.py | 2 ++ 5 files changed, 44 insertions(+), 22 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4ccd49e..9d68510 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "wheke-sqlmodel" -version = "0.2.0" +version = "0.3.0" description = "Add sql capabilities to wheke with SQLModel" readme = "README.md" requires-python = ">=3.12" diff --git a/src/wheke_sqlmodel/__init__.py b/src/wheke_sqlmodel/__init__.py index a1167cf..a86e403 100644 --- a/src/wheke_sqlmodel/__init__.py +++ b/src/wheke_sqlmodel/__init__.py @@ -1,10 +1,10 @@ -from ._pod import database_pod -from ._service import DatabaseService, get_database_service -from ._settings import DatabaseSettings +from ._pod import sqlmodel_pod +from ._service import SQLModelService, get_sqlmodel_service +from ._settings import SQLModelSettings __all__ = [ - "DatabaseService", - "DatabaseSettings", - "database_pod", - "get_database_service", + "SQLModelService", + "SQLModelSettings", + "get_sqlmodel_service", + "sqlmodel_pod", ] diff --git a/src/wheke_sqlmodel/_cli.py b/src/wheke_sqlmodel/_cli.py index 5c76f11..6cacbb5 100644 --- a/src/wheke_sqlmodel/_cli.py +++ b/src/wheke_sqlmodel/_cli.py @@ -1,3 +1,4 @@ +import anyio import typer from rich.console import Console from typer import Context @@ -16,4 +17,14 @@ def create_db(ctx: Context) -> None: console.print("Creating database...") - service.create_db() + anyio.run(service.create_db) + + +@cli.command() +def drop_db(ctx: Context) -> None: + container = get_container(ctx) + service = get_sqlmodel_service(container) + + console.print("Droping database...") + + anyio.run(service.create_db) diff --git a/src/wheke_sqlmodel/_service.py b/src/wheke_sqlmodel/_service.py index c7fdb54..e1aaad4 100644 --- a/src/wheke_sqlmodel/_service.py +++ b/src/wheke_sqlmodel/_service.py @@ -1,8 +1,9 @@ -from collections.abc import Generator -from contextlib import contextmanager +from collections.abc import AsyncGenerator +from contextlib import asynccontextmanager -from sqlalchemy import Engine -from sqlmodel import Session, SQLModel, create_engine +from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine +from sqlmodel import SQLModel +from sqlmodel.ext.asyncio.session import AsyncSession from svcs import Container from wheke import WhekeSettings, get_service, get_settings @@ -10,22 +11,30 @@ from ._settings import SQLModelSettings class SQLModelService: - engine: Engine + engine: AsyncEngine def __init__(self, *, sqlmodel_settings: SQLModelSettings) -> None: - self.engine = create_engine(sqlmodel_settings.connection_string) + self.engine = create_async_engine( + sqlmodel_settings.connection_string, + echo=sqlmodel_settings.echo_operations, + ) @property - @contextmanager - def session(self) -> Generator[Session]: - with Session(self.engine) as _session: + @asynccontextmanager + async def session(self) -> AsyncGenerator[AsyncSession]: + async with AsyncSession(self.engine) as _session: yield _session - def create_db(self) -> None: - SQLModel.metadata.create_all(self.engine) + async def create_db(self) -> None: + async with self.engine.begin() as conn: + await conn.run_sync(SQLModel.metadata.create_all) - def dispose(self) -> None: - self.engine.dispose() + async def drop_db(self) -> None: + async with self.engine.begin() as conn: + await conn.run_sync(SQLModel.metadata.drop_all) + + async def dispose(self) -> None: + await self.engine.dispose() def sqlmodel_service_factory(container: Container) -> SQLModelService: diff --git a/src/wheke_sqlmodel/_settings.py b/src/wheke_sqlmodel/_settings.py index 6723445..84b4d55 100644 --- a/src/wheke_sqlmodel/_settings.py +++ b/src/wheke_sqlmodel/_settings.py @@ -7,3 +7,5 @@ class SQLModelSettings(FeatureSettings): __feature_name__: ClassVar[str] = "sqlmodel" connection_string: str = "sqlite:///database.db" + + echo_operations: bool = False -- 2.51.2