fix: remove spurious await, guard contextvar reset, auto StaticPool for :memory:
Some checks failed
docs / deploy (push) Has been cancelled
Some checks failed
docs / deploy (push) Has been cancelled
This commit is contained in:
@@ -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:
|
||||||
self._session_context.reset(token)
|
try:
|
||||||
|
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:
|
||||||
self._session_context.reset(token)
|
try:
|
||||||
|
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)
|
||||||
|
|||||||
@@ -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"}
|
||||||
|
|||||||
Reference in New Issue
Block a user