Markus Sagen
11/16/2023, 7:47 AMclass UpdateParamsHook:
env: str | None
@hook_impl
def after_context_created(self, context: KedroContext):
# Load base parameters
# parameters loaded from Kedro using OmegaConf are already resolved as `context.params`
# instead, we need to load the base parameters first.
base_params_path = "conf/base/parameters.yml"
base_params = OmegaConf.load(base_params_path)
# Load environment-specific parameters
env = context.env
env_params_path = f"conf/{env}/parameters.yml"
env_params = OmegaConf.load(env_params_path)
# Merge parameters with priority to environment-specific params
merged_params = OmegaConf.merge(base_params, env_params)
# Ensure environment variable interpolation
OmegaConf.resolve(merged_params)
# Update context params
context._params = merged_params
Nok Lam Chan
11/16/2023, 8:22 AMcontext._params
doesn’t even exist afaikMarkus Sagen
11/16/2023, 8:34 AMconf/base/parameters.yml
and merge/update them with the parameters in conf/prod/parameters.yml
.
base/parameters.yml
env: local
training:
env: ${env}
prod/parameters.yml
env: prod
kedro run -e prod
Nok Lam Chan
11/16/2023, 8:41 AMenv: prod
training:
env: prod
Markus Sagen
11/16/2023, 8:42 AMNok Lam Chan
11/16/2023, 8:43 AMglobals
.globals
resolver, which happens before step1.