first commit
This commit is contained in:
87
public_web/app/config.py
Normal file
87
public_web/app/config.py
Normal file
@@ -0,0 +1,87 @@
|
||||
"""
|
||||
Configuration loader for Public Web Frontend
|
||||
|
||||
Loads environment-specific configuration from YAML files.
|
||||
"""
|
||||
|
||||
import yaml
|
||||
import os
|
||||
from pathlib import Path
|
||||
from dataclasses import dataclass
|
||||
from typing import Optional
|
||||
import structlog
|
||||
|
||||
|
||||
logger = structlog.get_logger(__name__)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ServerConfig:
|
||||
"""Server configuration settings."""
|
||||
host: str
|
||||
port: int
|
||||
debug: bool
|
||||
workers: int = 4
|
||||
|
||||
|
||||
@dataclass
|
||||
class APIConfig:
|
||||
"""API backend configuration."""
|
||||
base_url: str
|
||||
timeout: int = 30
|
||||
verify_ssl: bool = True
|
||||
|
||||
|
||||
@dataclass
|
||||
class SessionConfig:
|
||||
"""Session configuration."""
|
||||
lifetime_hours: int
|
||||
cookie_secure: bool
|
||||
cookie_httponly: bool
|
||||
cookie_samesite: str
|
||||
|
||||
|
||||
@dataclass
|
||||
class Config:
|
||||
"""Main configuration object."""
|
||||
server: ServerConfig
|
||||
api: APIConfig
|
||||
session: SessionConfig
|
||||
environment: str
|
||||
|
||||
|
||||
def load_config(environment: Optional[str] = None) -> Config:
|
||||
"""
|
||||
Load configuration from YAML file.
|
||||
|
||||
Args:
|
||||
environment: Environment name (development, production). If None, uses FLASK_ENV env var.
|
||||
|
||||
Returns:
|
||||
Config object with all settings.
|
||||
"""
|
||||
if environment is None:
|
||||
environment = os.getenv("FLASK_ENV", "development")
|
||||
|
||||
config_dir = Path(__file__).parent.parent / "config"
|
||||
config_path = config_dir / f"{environment}.yaml"
|
||||
|
||||
if not config_path.exists():
|
||||
raise FileNotFoundError(f"Configuration file not found: {config_path}")
|
||||
|
||||
with open(config_path, 'r') as f:
|
||||
data = yaml.safe_load(f)
|
||||
|
||||
config = Config(
|
||||
server=ServerConfig(**data['server']),
|
||||
api=APIConfig(**data['api']),
|
||||
session=SessionConfig(**data['session']),
|
||||
environment=environment
|
||||
)
|
||||
|
||||
logger.info("config_loaded",
|
||||
environment=environment,
|
||||
api_url=config.api.base_url,
|
||||
server_port=config.server.port)
|
||||
|
||||
return config
|
||||
Reference in New Issue
Block a user