""" Configuration module for FactsDB service Loads configuration from environment variables """ import os from dataclasses import dataclass from typing import Optional @dataclass class DatabaseConfig: """Database configuration""" path: str = "./facts.db" @dataclass class AIEndpointConfig: """AI endpoint configuration""" url: str = "" auth_token: str = "" @dataclass class FTPServerConfig: """FTP server configuration""" host: str = "0.0.0.0" port: int = 2121 username: str = "" password: str = "" @dataclass class SchedulerConfig: """Scheduler configuration""" interval_minutes: int = 10 class Config: """Main configuration class""" def __init__(self): self.database = DatabaseConfig( path=os.getenv('DATABASE_PATH', './facts.db') ) self.ai_endpoint = AIEndpointConfig( url=os.getenv('AI_ENDPOINT_URL', ''), auth_token=os.getenv('AI_ENDPOINT_TOKEN', '') ) if not self.ai_endpoint.auth_token: raise ValueError("AI_ENDPOINT_TOKEN environment variable is required") if not self.ai_endpoint.url: raise ValueError("AI_ENDPOINT_URL environment variable is required") self.ftp_server = FTPServerConfig( host=os.getenv('FTP_HOST', '0.0.0.0'), port=int(os.getenv('FTP_PORT', '2121')), username=os.getenv('FTP_USERNAME', ''), password=os.getenv('FTP_PASSWORD', '') ) if not self.ftp_server.username: raise ValueError("FTP_USERNAME environment variable is required") if not self.ftp_server.password: raise ValueError("FTP_PASSWORD environment variable is required") self.scheduler = SchedulerConfig( interval_minutes=int(os.getenv('SCHEDULER_INTERVAL', '10')) )