or config.{ENV}.yaml if ENV is set and file exists,
else config.yaml.
If ENV is not set, it may be obtained from a bootstrap dotenv adapter declared in config.yaml.
Configuration/Dependencies
YAML parsing: yaml.safe_load
Templating: jinja2.Template
YAML content is treated as a Jinja2 template.
A secret object is injected; you can reference secrets like {{ secret.MY_KEY }}.
Secret resolution order
During first pass (before secret service exists):
os.environ
bootstrap dotenv adapter (if declared in YAML)
fallback string message (no prompt)
During second pass (secret service loaded):
os.environ
secret_service.get(name)
if missing:
prompt on TTY and persist via secret_service.set(name, value)
raise ValueError if no TTY available
Bootstrap dotenv adapter detection
Looks for: services.secret.secret_adapters[] entry with adapter: "dotenv"
Reads optional config.path (default .env); must be a non-empty string.
Usage
Load from standard files (config.yaml or config.{ENV}.yaml)
from naas_abi_core.engine.engine_configuration.EngineConfiguration import EngineConfigurationconfig = EngineConfiguration.load_configuration()print(config.api.title)print([m.module or m.path for m in config.modules])
Load from an in-memory YAML string (useful for tests)