Litestar#
Full Litestar integration with plugin lifecycle, dependency injection, CLI commands, channels backend, and key-value store.
Plugin#
- class sqlspec.extensions.litestar.SQLSpecPlugin[source]#
Bases:
InitPluginProtocol,CLIPluginLitestar plugin for SQLSpec database integration.
Automatically configures NumPy array serialization when NumPy is installed, enabling seamless bidirectional conversion between NumPy arrays and JSON for vector embedding workflows.
- Session Table Migrations:
The Litestar extension includes migrations for creating session storage tables. To include these migrations in your database migration workflow, add 'litestar' to the include_extensions list in your migration configuration.
- __init__(sqlspec, *, loader=None)[source]#
Initialize SQLSpec plugin.
- Parameters:
sqlspec¶ (
SQLSpec) -- Pre-configured SQLSpec instance with registered database configs.loader¶ (
SQLFileLoader|None) -- Optional SQL file loader instance (SQLSpec may already have one).
- property config: list[SyncDatabaseConfig[Any, Any, Any] | NoPoolSyncConfig[Any, Any] | AsyncDatabaseConfig[Any, Any, Any] | NoPoolAsyncConfig[Any, Any]]#
Return the plugin configurations.
- Returns:
List of database configurations.
- on_app_init(app_config)[source]#
Configure Litestar application with SQLSpec database integration.
Automatically registers NumPy array serialization when NumPy is installed.
- get_annotations()[source]#
Return the list of annotations.
- Return type:
list[type[Union[SyncDatabaseConfig[Any,Any,Any],NoPoolSyncConfig[Any,Any],AsyncDatabaseConfig[Any,Any,Any],NoPoolAsyncConfig[Any,Any]]]]- Returns:
List of annotations.
- get_annotation(key)[source]#
Return the annotation for the given configuration.
- Parameters:
key¶ (
Union[str,SyncDatabaseConfig[Any,Any,Any],NoPoolSyncConfig[Any,Any],AsyncDatabaseConfig[Any,Any,Any],NoPoolAsyncConfig[Any,Any],type[Union[SyncDatabaseConfig[Any,Any,Any],NoPoolSyncConfig[Any,Any],AsyncDatabaseConfig[Any,Any,Any],NoPoolAsyncConfig[Any,Any]]]]) -- The configuration instance or key to lookup.- Raises:
KeyError -- If no configuration is found for the given key.
- Return type:
type[Union[SyncDatabaseConfig[Any,Any,Any],NoPoolSyncConfig[Any,Any],AsyncDatabaseConfig[Any,Any,Any],NoPoolAsyncConfig[Any,Any]]]- Returns:
The annotation for the configuration.
- get_config(name)[source]#
Get a configuration instance by name.
- Overloads:
self, name (type[SyncDatabaseConfig[Any, Any, Any] | NoPoolSyncConfig[Any, Any]]) → SyncDatabaseConfig[Any, Any, Any] | NoPoolSyncConfig[Any, Any]
self, name (type[AsyncDatabaseConfig[Any, Any, Any] | NoPoolAsyncConfig[Any, Any]]) → AsyncDatabaseConfig[Any, Any, Any] | NoPoolAsyncConfig[Any, Any]
self, name (str) → AnyDatabaseConfig
- Parameters:
name¶ (
Union[type[DatabaseConfigProtocol[typing.Any, typing.Any, typing.Any]],str, typing.Any]) -- The configuration identifier.- Raises:
KeyError -- If no configuration is found for the given name.
- Returns:
The configuration instance for the specified name.
- provide_request_session(key, state, scope)[source]#
Provide a database session for the specified configuration key from request scope.
- Overloads:
self, key (SyncDatabaseConfig[Any, Any, DriverT] | NoPoolSyncConfig[Any, DriverT] | type[SyncDatabaseConfig[Any, Any, DriverT] | NoPoolSyncConfig[Any, DriverT]]), state (State), scope (Scope) → DriverT
self, key (AsyncDatabaseConfig[Any, Any, DriverT] | NoPoolAsyncConfig[Any, DriverT] | type[AsyncDatabaseConfig[Any, Any, DriverT] | NoPoolAsyncConfig[Any, DriverT]]), state (State), scope (Scope) → DriverT
self, key (str), state (State), scope (Scope) → SyncDriverAdapterBase | AsyncDriverAdapterBase
This method requires the connection to already exist in scope. For on-demand connection creation, use
provide_request_session_syncorprovide_request_session_asyncinstead.- Parameters:
key¶ (
Union[str,SyncDatabaseConfig[Any,Any,Any],NoPoolSyncConfig[Any,Any],AsyncDatabaseConfig[Any,Any,Any],NoPoolAsyncConfig[Any,Any],type[Union[SyncDatabaseConfig[Any,Any,Any],NoPoolSyncConfig[Any,Any],AsyncDatabaseConfig[Any,Any,Any],NoPoolAsyncConfig[Any,Any]]]]) -- The configuration identifier (same as get_config).scope¶ (
Union[HTTPScope,WebSocketScope]) -- The ASGI scope containing the request context.
- Returns:
A driver session instance for the specified database configuration.
- provide_request_session_sync(key, state, scope)[source]#
Provide a sync database session for the specified configuration key from request scope.
- Overloads:
self, key (SyncDatabaseConfig[Any, Any, DriverT] | NoPoolSyncConfig[Any, DriverT]), state (State), scope (Scope) → DriverT
self, key (type[SyncDatabaseConfig[Any, Any, DriverT] | NoPoolSyncConfig[Any, DriverT]]), state (State), scope (Scope) → DriverT
self, key (str), state (State), scope (Scope) → SyncDriverAdapterBase
If no connection exists in scope, one will be created from the pool and stored in scope for reuse. The connection will be cleaned up by the before_send handler.
For async configurations, use
provide_request_session_asyncinstead.- Parameters:
key¶ (
Union[str,SyncDatabaseConfig[typing.Any, typing.Any, typing.Any],NoPoolSyncConfig[typing.Any, typing.Any],type[Union[SyncDatabaseConfig[typing.Any, typing.Any, typing.Any],NoPoolSyncConfig[typing.Any, typing.Any]]]]) -- The configuration identifier (same as get_config).scope¶ (
Union[HTTPScope,WebSocketScope]) -- The ASGI scope containing the request context.
- Returns:
A sync driver session instance for the specified database configuration.
- async provide_request_session_async(key, state, scope)[source]#
Provide an async database session for the specified configuration key from request scope.
- Overloads:
self, key (AsyncDatabaseConfig[Any, Any, DriverT] | NoPoolAsyncConfig[Any, DriverT]), state (State), scope (Scope) → DriverT
self, key (type[AsyncDatabaseConfig[Any, Any, DriverT] | NoPoolAsyncConfig[Any, DriverT]]), state (State), scope (Scope) → DriverT
self, key (str), state (State), scope (Scope) → AsyncDriverAdapterBase
If no connection exists in scope, one will be created from the pool and stored in scope for reuse. The connection will be cleaned up by the before_send handler.
For sync configurations, use
provide_request_sessioninstead.- Parameters:
key¶ (
Union[str,AsyncDatabaseConfig[typing.Any, typing.Any, typing.Any],NoPoolAsyncConfig[typing.Any, typing.Any],type[Union[AsyncDatabaseConfig[typing.Any, typing.Any, typing.Any],NoPoolAsyncConfig[typing.Any, typing.Any]]]]) -- The configuration identifier (same as get_config).scope¶ (
Union[HTTPScope,WebSocketScope]) -- The ASGI scope containing the request context.
- Returns:
An async driver session instance for the specified database configuration.
- provide_request_connection(key, state, scope)[source]#
Provide a database connection for the specified configuration key from request scope.
- Overloads:
self, key (SyncDatabaseConfig[ConnectionT, Any, Any] | NoPoolSyncConfig[ConnectionT, Any] | AsyncDatabaseConfig[ConnectionT, Any, Any] | NoPoolAsyncConfig[ConnectionT, Any]), state (State), scope (Scope) → ConnectionT
self, key (type[SyncDatabaseConfig[ConnectionT, Any, Any] | NoPoolSyncConfig[ConnectionT, Any] | AsyncDatabaseConfig[ConnectionT, Any, Any] | NoPoolAsyncConfig[ConnectionT, Any]]), state (State), scope (Scope) → ConnectionT
self, key (str), state (State), scope (Scope) → Any
This method requires the connection to already exist in scope. For on-demand connection creation, use
provide_request_connection_syncorprovide_request_connection_asyncinstead.- Parameters:
key¶ (
Union[str,SyncDatabaseConfig[Any,Any,Any],NoPoolSyncConfig[Any,Any],AsyncDatabaseConfig[Any,Any,Any],NoPoolAsyncConfig[Any,Any],type[Union[SyncDatabaseConfig[Any,Any,Any],NoPoolSyncConfig[Any,Any],AsyncDatabaseConfig[Any,Any,Any],NoPoolAsyncConfig[Any,Any]]]]) -- The configuration identifier (same as get_config).scope¶ (
Union[HTTPScope,WebSocketScope]) -- The ASGI scope containing the request context.
- Returns:
A database connection instance for the specified database configuration.
- provide_request_connection_sync(key, state, scope)[source]#
Provide a sync database connection for the specified configuration key from request scope.
- Overloads:
self, key (SyncDatabaseConfig[ConnectionT, Any, Any] | NoPoolSyncConfig[ConnectionT, Any]), state (State), scope (Scope) → ConnectionT
self, key (type[SyncDatabaseConfig[ConnectionT, Any, Any] | NoPoolSyncConfig[ConnectionT, Any]]), state (State), scope (Scope) → ConnectionT
self, key (str), state (State), scope (Scope) → Any
If no connection exists in scope, one will be created from the pool and stored in scope for reuse. The connection will be cleaned up by the before_send handler.
For async configurations, use
provide_request_connection_asyncinstead.- Parameters:
key¶ (
Union[str,SyncDatabaseConfig[typing.Any, typing.Any, typing.Any],NoPoolSyncConfig[typing.Any, typing.Any],type[Union[SyncDatabaseConfig[typing.Any, typing.Any, typing.Any],NoPoolSyncConfig[typing.Any, typing.Any]]]]) -- The configuration identifier (same as get_config).scope¶ (
Union[HTTPScope,WebSocketScope]) -- The ASGI scope containing the request context.
- Returns:
A database connection instance for the specified database configuration.
- async provide_request_connection_async(key, state, scope)[source]#
Provide an async database connection for the specified configuration key from request scope.
- Overloads:
self, key (AsyncDatabaseConfig[ConnectionT, Any, Any] | NoPoolAsyncConfig[ConnectionT, Any]), state (State), scope (Scope) → ConnectionT
self, key (type[AsyncDatabaseConfig[ConnectionT, Any, Any] | NoPoolAsyncConfig[ConnectionT, Any]]), state (State), scope (Scope) → ConnectionT
self, key (str), state (State), scope (Scope) → Any
If no connection exists in scope, one will be created from the pool and stored in scope for reuse. The connection will be cleaned up by the before_send handler.
For sync configurations, use
provide_request_connectioninstead.- Parameters:
key¶ (
Union[str,AsyncDatabaseConfig[typing.Any, typing.Any, typing.Any],NoPoolAsyncConfig[typing.Any, typing.Any],type[Union[AsyncDatabaseConfig[typing.Any, typing.Any, typing.Any],NoPoolAsyncConfig[typing.Any, typing.Any]]]]) -- The configuration identifier (same as get_config).scope¶ (
Union[HTTPScope,WebSocketScope]) -- The ASGI scope containing the request context.
- Returns:
A database connection instance for the specified database configuration.
Configuration#
- class sqlspec.extensions.litestar.LitestarConfig[source]#
Bases:
TypedDictConfiguration options for Litestar session store extension.
All fields are optional with sensible defaults. Use in extension_config["litestar"]:
- manage_schema: NotRequired[bool]#
True.
- Type:
Apply additive target-schema reconciliation. Default
- create_schema: NotRequired[bool]#
True.
- Type:
Create the session table during managed reconciliation. Default
- run_migrations: NotRequired[bool]#
False.
- Type:
Run packaged versioned migrations when an integration supplies a runner. Default
- session_table: NotRequired[str]#
'litestar_session'
- Type:
Name of the sessions table. Default
- in_memory: NotRequired[bool]#
False.
When enabled, tables are created with the in-memory attribute for databases that support it.
- This is an Oracle-specific feature that requires:
Oracle Database 12.1.0.2 or higher
Database In-Memory option license (Enterprise Edition)
Sufficient INMEMORY_SIZE configured in the database instance
Other database adapters ignore this setting.
- Type:
Enable in-memory table storage (Oracle-specific). Default
- shard_count: NotRequired[int]#
Optional hash shard count for session table primary key.
When set (>1), adapters that support computed shard columns will create a generated shard_id using MOD(FARM_FINGERPRINT(session_id), shard_count) and include it in the primary key to reduce hotspotting. Ignored by adapters that do not support computed shards.
- table_options: NotRequired[str]#
Optional raw OPTIONS/engine-specific table options string.
Passed verbatim when the adapter supports table-level OPTIONS/clauses. Ignored by adapters that do not support table options.
- index_options: NotRequired[str]#
Optional raw OPTIONS/engine-specific options for the expires_at index.
Passed verbatim to the index definition for adapters that support index OPTIONS/clauses. Ignored by adapters that do not support index options.
- partitioning: NotRequired[dict[str, Any]]#
Configure adapter-specific session-table partitioning where supported.
- partition_expiration_days: NotRequired[int]#
Set BigQuery partition expiration in days.
- require_partition_filter: NotRequired[bool]#
Require partition filters for BigQuery session queries.
- enable_hash_sharded_indexes: NotRequired[bool]#
Enable CockroachDB hash-sharded session indexes.
- hash_shard_bucket_count: NotRequired[int]#
Set the CockroachDB hash-shard bucket count.
- ttl_expiration_expression: NotRequired[Literal[False, 'expires_at']]#
Enable CockroachDB row-level TTL using the session
expires_atcolumn.
- fillfactor: NotRequired[int]#
- Type:
Set PostgreSQL-family session-table fillfactor. Default
- autovacuum_vacuum_scale_factor: NotRequired[float]#
Set the PostgreSQL-family autovacuum vacuum scale factor.
- autovacuum_analyze_scale_factor: NotRequired[float]#
Set the PostgreSQL-family autovacuum analyze scale factor.
- pragma_profile: NotRequired[bool]#
False.
- Type:
Apply the SQLite extension-store PRAGMA profile. Default
Channels Backend#
- class sqlspec.extensions.litestar.SQLSpecChannelsBackend[source]#
Bases:
ChannelsBackendA Litestar Channels backend implemented on top of SQLSpec's EventChannel.
This backend allows Litestar's ChannelsPlugin to use a SQLSpec database as the broker. Under the hood it relies on SQLSpec's events extension, which can be configured to use a durable table queue or native adapter backends.
- async publish_many(data, channels)[source]#
Publish independent payloads through one event-channel batch.
Store#
- class sqlspec.extensions.litestar.BaseSQLSpecStore[source]#
-
Base class for SQLSpec-backed Litestar session stores.
Implements the litestar.stores.base.Store protocol for server-side session storage using SQLSpec database adapters.
This abstract base class provides common functionality for all database-specific store implementations including: - Connection management via SQLSpec configs - Session expiration calculation - Table creation utilities
Subclasses must implement dialect-specific SQL queries.
- Parameters:
config¶ (
TypeVar(ConfigT)) -- SQLSpec database configuration with extension_config["litestar"] settings.
- property config: ConfigT#
Return the database configuration.
- abstractmethod async get(key, renew_for=None)[source]#
Get a session value by key.
- Parameters:
- Return type:
- Returns:
Session data as bytes if found and not expired, None otherwise.
- abstractmethod async delete_expired()[source]#
Delete all expired sessions.
- Return type:
- Returns:
Number of sessions deleted.
- abstractmethod async create_table()[source]#
Create the session table if it doesn't exist.
- Return type:
- prepare_schema_sync(driver)[source]#
Prepare adapter-specific schema decisions with a synchronous driver.
- Return type:
Providers#
create_filter_dependencies() accepts camel-case aliases for configured
orderBy fields by default. Use sort_field_aliases to map explicit API
names to configured SQL-facing fields, or set sort_field_camelize=False when
an endpoint must accept only raw configured values. Alias values are normalized
before OrderByFilter is created, and unknown aliases cannot bypass the
sort_field allowlist.
- class sqlspec.extensions.litestar.providers.FilterConfig[source]#
Bases:
TypedDictConfiguration for generated Litestar filter dependencies.
All keys are optional. A filter dependency is created only for each enabled key. Field names are SQL-facing allowlist values; generated query parameter names and order-by aliases remain API-facing.
- id_filter: NotRequired[type[UUID | int | str]]#
Type of ID filter to enable. When set, creates an
idscollection filter.
- id_field: NotRequired[str]#
SQL-facing field name for ID filtering. Defaults to
"id".
- sort_field: NotRequired[str | set[str] | list[str]]#
Allowed SQL-facing field or fields for
orderBysorting.
- sort_field_aliases: NotRequired[dict[str, str]]#
Additional API-facing
orderByaliases mapped to configuredsort_fieldvalues.
- sort_field_camelize: NotRequired[bool]#
Whether to accept camel-case aliases for configured sort fields. Defaults to
True.
- sort_order: NotRequired[Literal['asc', 'desc']]#
Default sort order. Defaults to
"desc".
- pagination_type: NotRequired[Literal['limit_offset']]#
Pagination strategy to enable. Currently supports
"limit_offset".
- pagination_size: NotRequired[int]#
Default page size for limit/offset pagination.
- search: NotRequired[str | set[str] | list[str]]#
SQL-facing field or fields to search. Strings may be comma-separated.
- search_ignore_case: NotRequired[bool]#
Whether search filtering is case-insensitive. Defaults to
False.
- created_at: NotRequired[bool]#
Whether to enable
created_atbefore/after range filtering.
- updated_at: NotRequired[bool]#
Whether to enable
updated_atbefore/after range filtering.
- not_in_fields: NotRequired[FieldNameType | set[FieldNameType] | list[str | FieldNameType]]#
Field or fields that support
NOT INcollection filtering.
- in_fields: NotRequired[FieldNameType | set[FieldNameType] | list[str | FieldNameType]]#
Field or fields that support
INcollection filtering.
- null_fields: NotRequired[str | set[str] | list[str]]#
Field or fields that support
IS NULLfiltering.
- not_null_fields: NotRequired[str | set[str] | list[str]]#
Field or fields that support
IS NOT NULLfiltering.
- boolean_fields: NotRequired[str | set[str] | list[str]]#
Field or fields that support boolean filtering.
- choice_fields: NotRequired[ChoiceField | set[ChoiceField] | list[str | ChoiceField]]#
Field or fields that support choices filtering.
CLI#
- sqlspec.extensions.litestar.database_group#
Click command group for managing SQLSpec database components (migrations, etc.).
- Type: