Sources
April 11, 2026 ยท View on GitHub
A source loads configuration from one origin and returns a plain dict. ConfigLoader merges multiple sources in order.
DictSource
Wraps an in-memory dict. Useful for defaults and test fixtures.
from molcfg import DictSource
src = DictSource({"db": {"host": "localhost", "port": 5432}}, name="defaults")
data = src.load()
JsonFileSource
Reads a JSON file from disk.
from molcfg import JsonFileSource
src = JsonFileSource("config.json", name="file")
TomlFileSource
Reads a TOML file from disk.
from molcfg import TomlFileSource
src = TomlFileSource("config.toml", name="file")
EnvSource
Reads environment variables and maps them into nested keys by splitting on _.
from molcfg import EnvSource
src = EnvSource(
prefix="APP",
environ={
"APP_DB_HOST": "prod-db",
"APP_DB_PORT": "5432",
"APP_DEBUG": "true",
},
)
assert src.load() == {
"db": {"host": "prod-db", "port": 5432},
"debug": True,
}
prefix is stripped and not included in the output key. Keys are lowercased. Pass environ= to inject a custom env dict (useful in tests); omit it to read os.environ.
CliSource
Parses a list of --key=value or --key value arguments.
from molcfg import CliSource
src = CliSource(["--db.host=localhost", "--db.port", "5432", "--debug=true"])
assert src.load() == {"db": {"host": "localhost", "port": 5432}, "debug": True}
Dotted keys map directly to nested dicts.
Coercion
EnvSource and CliSource coerce string values by default:
| Input | Result |
|---|---|
"true" / "false" | bool |
"5432" | int |
"3.14" | float |
"null" / "none" | None |
'["a","b"]' | list |
'{"x":1}' | dict |
Pass coerce=False to keep raw strings.
Naming sources
All sources accept a name argument recorded in metadata:
DictSource({"x": 1}, name="defaults")
EnvSource(prefix="APP", name="env")
Use stable, descriptive names. They appear in Config.meta() history.