Spaces:
Sleeping
Sleeping
File size: 2,130 Bytes
bdef324 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | # config.py — Centralized configuration using pydantic-settings
# .env hanya menyimpan DB credentials & secrets
# Runtime config bisa diubah via API tanpa restart
import os
from pydantic_settings import BaseSettings
from functools import lru_cache
class Settings(BaseSettings):
"""Database & secrets — loaded from .env file."""
DB_HOST: str = "localhost"
DB_PORT: int = 3306
DB_NAME: str = "sikomo_db"
DB_USER: str = "root"
DB_PASSWORD: str = ""
API_SECRET_KEY: str = "default-key"
DASHBOARD_PASSWORD: str = "Bandulan112"
@property
def DATABASE_URL(self) -> str:
return (
f"mysql+pymysql://{self.DB_USER}:{self.DB_PASSWORD}"
f"@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}"
)
class Config:
env_file = ".env"
extra = "ignore"
@lru_cache()
def get_settings() -> Settings:
return Settings()
class RuntimeConfig:
"""Runtime configuration — can be changed via dashboard API without restart."""
def __init__(self):
self.optuna_trials: int = int(os.getenv("OPTUNA_TRIALS", "30"))
self.model_dir: str = os.getenv("MODEL_DIR", "models")
self.forecast_days: int = int(os.getenv("FORECAST_DAYS", "7"))
self.default_schedules: str = os.getenv("DEFAULT_SCHEDULES", "0 1 * * *")
def to_dict(self) -> dict:
return {
"optuna_trials": self.optuna_trials,
"model_dir": self.model_dir,
"forecast_days": self.forecast_days,
"default_schedules": self.default_schedules,
}
def update(self, key: str, value: str):
allowed = {
"optuna_trials": lambda v: setattr(self, "optuna_trials", int(v)),
"model_dir": lambda v: setattr(self, "model_dir", v),
"forecast_days": lambda v: setattr(self, "forecast_days", int(v)),
"default_schedules": lambda v: setattr(self, "default_schedules", v),
}
if key not in allowed:
raise ValueError(f"Key '{key}' tidak diizinkan untuk diubah.")
allowed[key](value)
runtime_config = RuntimeConfig()
|