Load configuration from YAML or JSON
Two approaches:
- Sources (recommended for files):
YamlSource/JsonSource/TomlSource - Manual parse:
from_yaml/from_json(or stdlib), then pass a dict asvalue=
Using sources
from pathlib import Path
from superconf import ConfigurationObj, FieldBool, FieldConf, FieldInt, FieldString
from superconf import YamlSource, JsonSource, View
class ServerConfig(ConfigurationObj):
host = FieldString(default="localhost")
port = FieldInt(default=8080)
class AppConfig(ConfigurationObj):
app_name = FieldString(default="app")
debug = FieldBool(default=False)
server = FieldConf(ServerConfig)
# Load a single file
file_src = YamlSource("file", path="config.yml")
config = AppConfig(value=file_src.load())
# Or materialize layered sources (file + env + defaults, etc.)
view = View(order=["file"])
view.add(file_src)
config = AppConfig(value=view.materialize())
JsonSource and TomlSource work the same way (path= or inline data=).
Helpers (manual parse)
from_yaml(string)/from_json(string)→ Python objectto_yaml(obj)/to_json(obj)→ string (useful withconfig.get_value())
You can also use yaml.safe_load / json.loads directly.
Example
config.yml:
from pathlib import Path
from superconf import ConfigurationObj, FieldBool, FieldConf, FieldInt, FieldString
from superconf.common import from_yaml
class ServerConfig(ConfigurationObj):
host = FieldString(default="localhost")
port = FieldInt(default=8080)
class AppConfig(ConfigurationObj):
app_name = FieldString(default="app")
debug = FieldBool(default=False)
server = FieldConf(ServerConfig)
raw = from_yaml(Path("config.yml").read_text(encoding="utf-8"))
config = AppConfig(value=raw)
assert config.app_name == "demo"
assert config.debug is True
assert config.server.port == 9000
JSON
from pathlib import Path
import json
from superconf.common import from_json
raw = from_json(Path("config.json").read_text(encoding="utf-8"))
# or: raw = json.loads(Path("config.json").read_text(encoding="utf-8"))
config = AppConfig(value=raw)
Dump back
from superconf.common import to_yaml, to_json
print(to_yaml(config.get_value()))
print(to_json(config.get_value()))
Layered with environment / CLI
For 12-factor apps (cli → env → file → defaults), prefer the
from_12factor helper instead of wiring View by hand.