Coverage for narrative_harm_classifier/core/config.py: 100%
34 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-20 13:25 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-20 13:25 +0000
1"""
2core/config.py — Application settings loaded from environment variables.
3All Azure service bindings, model settings, and classification parameters live here.
4"""
6from pydantic_settings import BaseSettings
7from functools import lru_cache
8from pathlib import Path
11class Settings(BaseSettings):
12 # --- App ---
13 app_name: str = "Narrative Harm Classifier"
14 app_version: str = "1.0.0"
15 debug: bool = False
17 # --- Azure ---
18 azure_text_analytics_endpoint: str = ""
19 azure_text_analytics_key: str = ""
20 azure_storage_connection_string: str = ""
21 azure_storage_container: str = "classifications"
22 azure_function_app_name: str = ""
24 # --- Database (Azure SQL or PostgreSQL) ---
25 database_url: str = "sqlite:///./dev.db" # override with Azure SQL/Postgres in prod
27 # --- Escalation tracking ---
28 tracking_db_url: str = "" # defaults to database_url when unset
30 # --- Classification ---
31 taxonomy_config_path: str = str(
32 Path(__file__).parent.parent / "data" / "taxonomy_v1.yaml"
33 )
34 benchmark_templates_path: str = str(
35 Path(__file__).parent.parent / "data" / "benchmark_templates.yaml"
36 )
37 patterns_dir: str = str(Path(__file__).parent.parent / "data" / "patterns")
38 dogwhistles_path: str = str(Path(__file__).parent.parent / "data" / "dogwhistles.yaml")
39 i18n_smoke_tests_path: str = str(Path(__file__).parent.parent / "data" / "i18n_smoke_tests.yaml")
40 taxonomy_version: str = "1.0.0"
41 default_confidence_threshold: float = 0.65
42 context_window_tokens: int = 256
43 max_text_length: int = 10000
45 # --- Logging ---
46 log_level: str = "INFO"
47 log_format: str = "json"
49 class Config:
50 env_file = ".env"
51 case_sensitive = False
53 @property
54 def effective_tracking_db_url(self) -> str:
55 return self.tracking_db_url or self.database_url
58@lru_cache()
59def get_settings() -> Settings:
60 return Settings()