Coverage for snekql/sqlite/config.py: 100%
16 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-07 21:13 +0300
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-07 21:13 +0300
1"""SQLite runtime configuration for snekql."""
3from __future__ import annotations
5from dataclasses import dataclass
6from pathlib import Path
7from typing import Literal
9from snekql.errors import DatabaseRuntimeError
10from snekql.validation import NonNegativeFloat, PositiveInt, validate_boundary
13@validate_boundary(error_type=DatabaseRuntimeError)
14def _validate_sqlite_config(
15 *,
16 acquire_timeout: NonNegativeFloat,
17 database: Path | Literal[":memory:"],
18 pool_size: PositiveInt,
19) -> None:
20 """Validate SQLite configuration at construction time.
22 Backend configuration objects are the future public seam between database
23 families, so invalid numeric and database target values should fail before
24 runtime initialization begins.
25 """
27 del acquire_timeout, database, pool_size
30@dataclass(frozen=True, kw_only=True)
31class Config:
32 """SQLite backend configuration for explicit runtime initialization.
34 >>> from pathlib import Path
35 >>> config = Config(database=Path("app.db"))
36 >>> config.pool_size
37 5
38 """
40 database: Path | Literal[":memory:"]
41 acquire_timeout: NonNegativeFloat = 30.0
42 pool_size: PositiveInt = 5
44 def __post_init__(self) -> None:
45 _validate_sqlite_config(
46 acquire_timeout=self.acquire_timeout,
47 database=self.database,
48 pool_size=self.pool_size,
49 )