fix: загрузка sac-api.env через pydantic, не EnvironmentFile systemd
This commit is contained in:
+23
-4
@@ -1,3 +1,4 @@
|
||||
import os
|
||||
from functools import lru_cache
|
||||
from pathlib import Path
|
||||
|
||||
@@ -5,15 +6,33 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
SCHEMA_PATH = ROOT / "schemas" / "event-schema-v1.json"
|
||||
DEFAULT_CONFIG_FILE = Path("/opt/security-alert-center/config/sac-api.env")
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
model_config = SettingsConfigDict(
|
||||
env_file=".env",
|
||||
def _resolve_config_files() -> tuple[str, ...]:
|
||||
"""Файлы конфигурации для pydantic (корректный разбор кавычек и URL)."""
|
||||
candidates: list[Path] = []
|
||||
explicit = os.environ.get("SAC_CONFIG_FILE", "").strip()
|
||||
if explicit:
|
||||
candidates.append(Path(explicit))
|
||||
else:
|
||||
candidates.append(DEFAULT_CONFIG_FILE)
|
||||
candidates.append(Path(".env"))
|
||||
return tuple(str(p) for p in candidates if p.is_file())
|
||||
|
||||
|
||||
def _settings_config() -> SettingsConfigDict:
|
||||
files = _resolve_config_files()
|
||||
return SettingsConfigDict(
|
||||
env_file=files if files else None,
|
||||
env_file_encoding="utf-8",
|
||||
extra="ignore",
|
||||
)
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
model_config = _settings_config()
|
||||
|
||||
database_url: str = "postgresql+psycopg2://sac:sac@localhost:5432/sac"
|
||||
sac_public_url: str = "http://localhost:8000"
|
||||
jwt_secret: str = "change-me-in-production"
|
||||
@@ -24,7 +43,7 @@ class Settings(BaseSettings):
|
||||
sac_admin_username: str = "admin"
|
||||
sac_admin_password: str = ""
|
||||
|
||||
event_schema_path: str = str(SCHEMA_PATH) # override: EVENT_SCHEMA_PATH
|
||||
event_schema_path: str = str(SCHEMA_PATH)
|
||||
cors_origins: str = "*"
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user