Skip to content
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ check-domain = "workflow.scripts.check_domain:app"
gcmt-auto-simulate = "workflow.scripts.gcmt_auto_simulate:app"
import-realisation = "workflow.scripts.import_realisation:app"
lf-to-xarray = "workflow.scripts.lf_to_xarray:app"
migrate = "workflow.scripts.migrate:app"

[tool.setuptools.package-dir]
workflow = "workflow"
Expand Down
28 changes: 2 additions & 26 deletions workflow/defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import importlib
from enum import StrEnum
from importlib import resources
from typing import Any

import yaml

import workflow.default_parameters.root as root
from workflow import utils


class DefaultsVersion(StrEnum):
Expand All @@ -19,30 +19,6 @@ class DefaultsVersion(StrEnum):
develop = "develop"


def _merge_defaults(defaults_a: dict[str, Any], defaults_b: dict[str, Any]) -> None:
"""Deep-merge dictionaries in place, updating the first with values from the second.

Parameters
----------
defaults_a : dict[str, Any]
Base dictionary to be updated. This dictionary is modified in place with
merged values.
defaults_b : dict[str, Any]
Dictionary providing overriding values. Keys in this dictionary are
preferred when keys conflict. This dictionary is not modified.
"""

for key, value in defaults_b.items():
if (
key in defaults_a
and isinstance(defaults_a[key], dict)
and isinstance(value, dict)
):
_merge_defaults(defaults_a[key], defaults_b[key])
else:
defaults_a[key] = value


def load_defaults(version: DefaultsVersion) -> dict[str, int | float | str]:
"""Load default parameters for EMOD3D simulation from a YAML file.

Expand Down Expand Up @@ -72,5 +48,5 @@ def load_defaults(version: DefaultsVersion) -> dict[str, int | float | str]:
defaults_path = resources.files(defaults_package) / "defaults.yaml"
with defaults_path.open(encoding="utf-8") as emod3d_defaults_file_handle:
defaults = yaml.safe_load(emod3d_defaults_file_handle)
_merge_defaults(root_defaults, defaults)
utils.merge_dictionaries(root_defaults, defaults)
return root_defaults
Loading
Loading