loom.core.repository.sqlalchemy¶
- class loom.core.repository.sqlalchemy.AuditActorMixin[source]¶
Bases:
objectOptional actor tracking for auth-enabled deployments.
- class loom.core.repository.sqlalchemy.AuditableModel(*args, **kwargs)[source]¶
Bases:
Base,IdentityMixin,TimestampMixin,AuditActorMixinOptional model base that also tracks actor fields.
- Parameters:
args (Any)
kwargs (Any)
- Return type:
Any
- class loom.core.repository.sqlalchemy.Base(*args, **kwargs)[source]¶
Bases:
DeclarativeBaseBase SQLAlchemy declarative class.
- Parameters:
args (Any)
kwargs (Any)
- Return type:
Any
- class loom.core.repository.sqlalchemy.BaseModel(*args, **kwargs)[source]¶
Bases:
Base,IdentityMixin,TimestampMixinDefault project model base (identity + timestamps).
- Parameters:
args (Any)
kwargs (Any)
- Return type:
Any
- class loom.core.repository.sqlalchemy.IdentityMixin[source]¶
Bases:
objectInteger primary key for entities with standard identity.
- class loom.core.repository.sqlalchemy.Projection(*, loader, profiles=('default',), depends_on=(), default=None)[source]¶
Bases:
Generic[T]Descriptor for derived fields with cache dependency metadata.
- class loom.core.repository.sqlalchemy.RepositorySQLAlchemy(session_manager, model)[source]¶
Bases:
SQLAlchemyCreateMixin[OutputT,IdT],SQLAlchemyReadMixin[OutputT,IdT],SQLAlchemyUpdateMixin[OutputT,IdT],SQLAlchemyDeleteMixin[OutputT,IdT],Readable[OutputT],Creatable[OutputT],Updatable[OutputT],Deletable[OutputT],Listable[OutputT],Countable[OutputT],Generic[OutputT,IdT]Base SQLAlchemy repository with context-aware session management.
Pass
model(a Struct-basedBaseModel) to__init__; the repository uses the compiled SA class for queries and returns the Struct directly.- Parameters:
session_manager (SessionManager)
- class loom.core.repository.sqlalchemy.SessionManager(url, *, echo=False, pool_pre_ping=True, pool_size=10, max_overflow=20, pool_timeout=30, pool_recycle=1800, connect_args=None, inject_trace_id=True, **engine_kwargs)[source]¶
Bases:
objectAsync SQLAlchemy session manager with pooling support.
- Parameters:
- session()[source]¶
Yield a scoped async session that is automatically closed on exit.
- Yields:
An
AsyncSessionbound to the managed engine.- Return type:
AsyncIterator[sqlalchemy.ext.asyncio.AsyncSession]
- async dispose()[source]¶
Dispose of the engine and release all pooled connections.
- Return type:
None
- property engine: sqlalchemy.ext.asyncio.AsyncEngine¶
The underlying async SQLAlchemy engine.
- property session_factory: sqlalchemy.ext.asyncio.async_sessionmaker.sqlalchemy.ext.asyncio.AsyncSession¶
The configured async session factory bound to the engine.
- class loom.core.repository.sqlalchemy.SupportsPostCommit(*args, **kwargs)[source]¶
Bases:
ProtocolProtocol for objects that react to committed transactions.
- class loom.core.repository.sqlalchemy.TimestampMixin[source]¶
Bases:
objectCreated/updated timestamps for all persistent entities.
- class loom.core.repository.sqlalchemy.SQLAlchemyDefaultRepositoryBuilder(session_manager)[source]¶
Bases:
objectDefault repository builder for SQLAlchemy-backed models.
A frozen dataclass that receives a
SessionManagerat construction time — injected by the SQLAlchemy DI module. The bootstrap and any other infrastructure layer must not construct this class directly; register it via the DI module so that theSessionManagersingleton is shared across all repositories.- Parameters:
session_manager (SessionManager) – Shared SQLAlchemy session manager.
- loom.core.repository.sqlalchemy.build_sqlalchemy_repository_registration_module(session_manager, models, *, logical_models=())[source]¶
Build a DI module that registers model repositories and their capability bindings.
The module self-declares its infrastructure dependencies: it registers both
SessionManagerandDefaultRepositoryBuilderin the container so that the bootstrap does not need to know about SQLAlchemy internals.To swap the default builder, register your own
DefaultRepositoryBuilderin the container before loading this module — the module will not overwrite an existing registration.
- loom.core.repository.sqlalchemy.transactional(method)[source]¶
Create a single transaction boundary for service/orchestrator use cases.
- Parameters:
method (Callable[[Concatenate[Any, ~P]], Awaitable[T]])
- Return type:
Callable[[Concatenate[Any, ~P]], Awaitable[T]]