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

1"""SQLite runtime configuration for snekql.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6from pathlib import Path 

7from typing import Literal 

8 

9from snekql.errors import DatabaseRuntimeError 

10from snekql.validation import NonNegativeFloat, PositiveInt, validate_boundary 

11 

12 

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. 

21 

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 """ 

26 

27 del acquire_timeout, database, pool_size 

28 

29 

30@dataclass(frozen=True, kw_only=True) 

31class Config: 

32 """SQLite backend configuration for explicit runtime initialization. 

33 

34 >>> from pathlib import Path 

35 >>> config = Config(database=Path("app.db")) 

36 >>> config.pool_size 

37 5 

38 """ 

39 

40 database: Path | Literal[":memory:"] 

41 acquire_timeout: NonNegativeFloat = 30.0 

42 pool_size: PositiveInt = 5 

43 

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 )