Source code for mipcandy.config

from os import PathLike
from os.path import abspath, exists

from yaml import load, SafeLoader, dump, SafeDumper

from mipcandy.types import Settings

_DIR: str = abspath(__file__)[:-9]
_DEFAULT_SETTINGS_PATH: str = f"{_DIR}settings.yml"
_DEFAULT_SECRETS_PATH: str = f"{_DIR}secrets.yml"


[docs] def _load(path: str | PathLike[str], *, hint: str = "fill in your settings here") -> Settings: if not exists(path): with open(path, "w") as f: f.write(f"# {hint}\n") with open(path) as f: settings = load(f.read(), SafeLoader) if settings is None: return {} if not isinstance(settings, dict): raise ValueError(f"Invalid settings file: {path}") return settings
[docs] def _save(settings: Settings, path: str | PathLike[str], *, hint: str = "fill in your settings here") -> None: with open(path, "w") as f: f.write(f"# {hint}\n") dump(settings, f, SafeDumper)
[docs] def load_settings(*, path: str | PathLike[str] = _DEFAULT_SETTINGS_PATH) -> Settings: return _load(path)
[docs] def save_settings(settings: Settings, *, path: str | PathLike[str] = _DEFAULT_SETTINGS_PATH) -> None: _save(settings, path)
[docs] def load_secrets(*, path: str | PathLike[str] = _DEFAULT_SECRETS_PATH) -> Settings: return _load(path, hint="fill in your secrets here, do not commit this file")
[docs] def save_secrets(secrets: Settings, *, path: str | PathLike[str] = _DEFAULT_SECRETS_PATH) -> None: _save(secrets, path, hint="fill in your secrets here, do not commit this file")