PKonfig Recipes (Copy-Paste Patterns)ΒΆ
Env overrides file defaults
from pkonfig.config import Config from pkonfig import storage class App(Config): host: str = "127.0.0.1" port: int = 8000 cfg = App( storage.Env(prefix="APP"), storage.Yaml("settings.yaml", missing_ok=True), )
Nested config with alias
from pkonfig.config import Config class DB(Config): host: str = "localhost" port: int = 5432 class App(Config): db = DB(alias="db")
Required field (no default)
from pkonfig.config import Config class App(Config): workers: int
Choice of environment with Literal typing
from typing import Literal from pkonfig.config import Config from pkonfig.fields import Choice class App(Config): env: Literal["local", "prod", "test"] = Choice(["local", "prod", "test"], default="prod")
Parse comma-delimited list
from pkonfig.config import Config from pkonfig.storage import DictStorage class App(Config): tags: list[str] cfg = App(DictStorage(tags="a,b,c")) # cfg.tags == ["a", "b", "c"]
Logging level from strings
from pkonfig.config import Config from pkonfig.fields import LogLevel class App(Config): log_level: int = LogLevel("INFO")
Defer validation until later
from pkonfig.config import Config from pkonfig.fields import Int class App(Config): port: int = 8000 cfg = App(fail_fast=False) # ... later cfg.check()