From b491eca1237114b808e33ae06c45648fdc195758 Mon Sep 17 00:00:00 2001 From: Humberto Rocha Date: Thu, 1 Jan 2026 18:58:04 -0500 Subject: [PATCH] Make db service a singleton --- src/wheke_sqlite/_pod.py | 7 ++++++- src/wheke_sqlite/_service.py | 14 +++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/wheke_sqlite/_pod.py b/src/wheke_sqlite/_pod.py index b1b3c0e..af92ad4 100644 --- a/src/wheke_sqlite/_pod.py +++ b/src/wheke_sqlite/_pod.py @@ -6,7 +6,12 @@ from ._service import DatabaseService, database_service_factory database_pod = Pod( "database", services=[ - ServiceConfig(DatabaseService, database_service_factory, as_value=True), + ServiceConfig( + DatabaseService, + database_service_factory, + is_singleton=True, + singleton_cleanup_method="dispose", + ), ], cli=cli, ) diff --git a/src/wheke_sqlite/_service.py b/src/wheke_sqlite/_service.py index 5c50c34..ea3fe4f 100644 --- a/src/wheke_sqlite/_service.py +++ b/src/wheke_sqlite/_service.py @@ -1,4 +1,5 @@ from collections.abc import Generator +from contextlib import contextmanager from sqlalchemy import Engine from sqlmodel import Session, SQLModel, create_engine @@ -17,8 +18,10 @@ class DatabaseService: self.engine = create_engine(database_settings.connection_string) @property - def session(self) -> Session: - return Session(self.engine) + @contextmanager + def session(self) -> Generator[Session]: + with Session(self.engine) as _session: + yield _session def create_db(self) -> None: SQLModel.metadata.create_all(self.engine) @@ -27,13 +30,10 @@ class DatabaseService: self.engine.dispose() -def database_service_factory(container: Container) -> Generator[DatabaseService]: +def database_service_factory(container: Container) -> DatabaseService: settings = get_settings(container, WhekeSettings).get_feature(DatabaseSettings) - service = DatabaseService(database_settings=settings) - yield service - - service.dispose() + return DatabaseService(database_settings=settings) def get_database_service(container: Container) -> DatabaseService: -- 2.51.2