Inheritance#
Dialect and dataset definitions support inheritance to reduce
duplication. Use the inherits_from key to base a new definition
on an existing one and override only the properties that differ.
Dialect inheritance#
If you have a dialect that is nearly identical to another, you can
create a new dialect inheriting from it. For instance, suppose
nextgems is derived from cmip6 but uses a different
specs_file and some overrides:
TOML CONFIG
[drs_settings.dialect.nextgems]
inherits_from = "cmip6"
specs_file = ["variable", "time", "level"]
defaults = { project = "NEXTGEMS" }
When the config is loaded, the parent dialect (cmip6) is copied
and then the child’s fields are merged on top. Empty tables in the
child override the parent’s tables; nested dictionaries are merged
recursively. Multiple levels of inheritance are supported.
Dataset inheritance#
Datasets can also inherit from other datasets. Use this when two datasets share the same root or storage options but differ in defaults or dialect choice. For example:
TOML CONFIG
[cmip6-cycle3]
inherits_from = "cmip6-fs"
root_path = "/data/cmip6/cycle3"
defaults = { version = -2 }
In this case all fields from cmip6-fs (root_path, fs_type,
storage_options, defaults, etc.) are copied; only root_path and
defaults.version are overridden. Using inheritance reduces
duplication in complex configuration files.
Note that cyclic inheritance is not allowed. If a parent dialect or dataset cannot be found the loader will raise an error.