fix: remove spurious await, guard contextvar reset, auto StaticPool for :memory:
Some checks failed
docs / deploy (push) Has been cancelled

This commit is contained in:
2026-10-01 22:02:22 +03:00
parent ae082b5c87
commit ef6fe645e1
2 changed files with 14 additions and 5 deletions

View File

@@ -4,6 +4,7 @@ from contextlib import asynccontextmanager
from typing import TypeVar from typing import TypeVar
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
from sqlalchemy.pool import StaticPool
from sqlmodel.ext.asyncio.session import AsyncSession from sqlmodel.ext.asyncio.session import AsyncSession
from .settings import RepositorySettings from .settings import RepositorySettings
@@ -17,7 +18,9 @@ class RepositoriesContainer:
"url": settings.dsn, "url": settings.dsn,
"pool_recycle": settings.pool_recycle, "pool_recycle": settings.pool_recycle,
} }
if not settings.dsn.startswith("sqlite"): if settings.dsn == "sqlite+aiosqlite:///:memory:":
engine_parameters["poolclass"] = StaticPool
elif not settings.dsn.startswith("sqlite"):
engine_parameters["pool_timeout"] = settings.pool_timeout engine_parameters["pool_timeout"] = settings.pool_timeout
engine_parameters["pool_size"] = settings.pool_size engine_parameters["pool_size"] = settings.pool_size
@@ -37,7 +40,7 @@ class RepositoriesContainer:
async def create_tables(self, *repository_classes: type[RepositoryType]) -> None: async def create_tables(self, *repository_classes: type[RepositoryType]) -> None:
repositories = [ repositories = [
await self.get_repository(repository_class=repository_class) self.get_repository(repository_class=repository_class)
for repository_class in repository_classes for repository_class in repository_classes
] ]
for repository in repositories: for repository in repositories:
@@ -60,7 +63,10 @@ class RepositoriesContainer:
async with session.begin(): async with session.begin():
yield session yield session
finally: finally:
try:
self._session_context.reset(token) self._session_context.reset(token)
except ValueError:
pass
@asynccontextmanager @asynccontextmanager
async def nested_transaction(self) -> AsyncGenerator[AsyncSession]: async def nested_transaction(self) -> AsyncGenerator[AsyncSession]:
@@ -80,7 +86,10 @@ class RepositoriesContainer:
async with session.begin_nested(): async with session.begin_nested():
yield session yield session
finally: finally:
try:
self._session_context.reset(token) self._session_context.reset(token)
except ValueError:
pass
def get_repository(self, repository_class: type[RepositoryType]) -> RepositoryType: def get_repository(self, repository_class: type[RepositoryType]) -> RepositoryType:
return repository_class(container=self) return repository_class(container=self)

View File

@@ -1,6 +1,6 @@
[project] [project]
name = "metaorm" name = "metaorm"
version = "0.2.0" version = "0.2.1"
description = "Async repository layer over SQLModel" description = "Async repository layer over SQLModel"
readme = "README.md" readme = "README.md"
license = {text = "MIT"} license = {text = "MIT"}