Source code for sqlspec.adapters.aiosqlite.litestar.store

"""AioSQLite session store for Litestar integration."""

from datetime import datetime, timedelta, timezone
from typing import TYPE_CHECKING, Any

from sqlspec.adapters.aiosqlite.config import _apply_extension_pragmas, _extension_pragma_statements
from sqlspec.extensions.litestar.store import BaseSQLSpecStore

if TYPE_CHECKING:
    from sqlspec.adapters.aiosqlite.config import AiosqliteConfig

__all__ = ("AiosqliteStore",)


SECONDS_PER_DAY = 86400.0
JULIAN_EPOCH = 2440587.5


class AiosqliteStore(BaseSQLSpecStore["AiosqliteConfig"]):
    """SQLite session store using AioSQLite driver.

    Implements server-side session storage for Litestar using SQLite
    via the AioSQLite driver. Provides efficient session management with:
    - Native async SQLite operations
    - INSERT OR REPLACE for UPSERT functionality
    - Automatic expiration handling
    - Efficient cleanup of expired sessions

    Args:
        config: AiosqliteConfig instance.
    """

    __slots__ = ("_pragma_statements",)
    extension_config_options = BaseSQLSpecStore.extension_config_options | frozenset({
        "pragma_overrides",
        "pragma_profile",
    })

    def __init__(self, config: "AiosqliteConfig") -> None:
        """Initialize AioSQLite session store.

        Args:
            config: AiosqliteConfig instance.
        """
        super().__init__(config)
        self._pragma_statements = _extension_pragma_statements(config, "litestar")
async def create_table(self) -> None: """Create the session table if it doesn't exist.""" if not self.create_schema_enabled: await self.reconcile_schema() return sql = self._table_ddl() async with self._config.provide_session() as driver: await _apply_extension_pragmas(driver.connection, self._pragma_statements) await driver.execute_script(sql) self._log_table_created() await self.reconcile_schema(assume_existing=True)