JustinTX's picture
Add files using upload-large-folder tool
7f611c5 verified
"""Helpers for loading backend-specific default configs."""
import os
import yaml
_DIR = os.path.dirname(__file__)
def load_defaults(filename: str) -> dict:
"""Load a YAML defaults file from the defaults directory."""
path = os.path.join(_DIR, filename)
if not os.path.exists(path):
return {}
with open(path) as f:
return yaml.safe_load(f) or {}
def apply_defaults(obj, defaults: dict):
"""Recursively apply dict values to a dataclass-like object.
Only sets attributes that already exist on the object.
For nested dicts whose corresponding attribute is also an object,
recurses into the sub-object.
"""
for key, value in defaults.items():
if not hasattr(obj, key):
continue
if isinstance(value, dict):
sub = getattr(obj, key)
if hasattr(sub, "__dict__"):
apply_defaults(sub, value)
else:
setattr(obj, key, value)
else:
setattr(obj, key, value)