"""Konfiguracja warstwy bazodanowej (z ENV). Najważniejsza zmienna: DATA_PROVIDER. Zmiana 'excel' -> 'sql' przełącza całą warstwę na bazę SQL bez dotykania pozostałych modułów (patrz providers/factory.py). """ from __future__ import annotations import os from dataclasses import dataclass, field from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent # .../services/data @dataclass class Settings: # 'excel' (dziś) albo 'sql' (po migracji) provider: str = field(default_factory=lambda: os.getenv("DATA_PROVIDER", "excel")) # Warstwa Excel excel_dir: Path = field( default_factory=lambda: Path(os.getenv("EXCEL_DIR", str(BASE_DIR / "data_files"))) ) cache_dir: Path = field( default_factory=lambda: Path(os.getenv("CACHE_DIR", str(BASE_DIR / ".cache"))) ) header_scan_rows: int = field(default_factory=lambda: int(os.getenv("HEADER_SCAN_ROWS", "15"))) # Klucze kanoniczne, które trafiają do odwróconego indeksu (przyspiesza wyszukiwanie). indexed_keys: tuple[str, ...] = field( default_factory=lambda: tuple( k.strip() for k in os.getenv("INDEXED_KEYS", "name,id,symbol").split(",") if k.strip() ) ) # Cache zapytań (in-memory) query_cache_size: int = field(default_factory=lambda: int(os.getenv("QUERY_CACHE_SIZE", "512"))) query_cache_ttl: int = field(default_factory=lambda: int(os.getenv("QUERY_CACHE_TTL", "300"))) # Warstwa SQL (po migracji) sql_url: str = field( default_factory=lambda: os.getenv("SQL_URL", "sqlite:///./.cache/astrololo.db") ) def __post_init__(self) -> None: self.cache_dir.mkdir(parents=True, exist_ok=True) self.excel_dir.mkdir(parents=True, exist_ok=True) settings = Settings()