15 """Utility functions for build file generation scripts."""
21 from typing
import Any, List, Mapping, Union
25 """Imports the Python file at the given path, returns a module object."""
26 module_name = os.path.basename(path).replace(
'.py',
'')
27 spec = importlib.util.spec_from_file_location(module_name, path)
28 module = importlib.util.module_from_spec(spec)
29 sys.modules[module_name] = module
30 spec.loader.exec_module(module)
35 """Allows dot-accessible dictionaries."""
38 dict.__init__(self, d)
43 """Converts any kind of variable to a Bunch."""
44 if isinstance(var, list):
46 if isinstance(var, dict):
48 for k, v
in list(var.items()):
49 if isinstance(v, (list, dict)):
57 def merge_json(dst: Union[Mapping, List], add: Union[Mapping, List]) ->
None:
58 """Merges JSON objects recursively."""
59 if isinstance(dst, dict)
and isinstance(add, dict):
60 for k, v
in list(add.items()):
67 elif isinstance(dst, list)
and isinstance(add, list):
71 'Tried to merge incompatible objects %s %s\n\n%r\n\n%r' %
72 (
type(dst).__name__,
type(add).__name__, dst, add))