diff --git a/experimental/python/databricks/bundles/build.py b/experimental/python/databricks/bundles/build.py index 87bc60d41c..d9ddc626b8 100644 --- a/experimental/python/databricks/bundles/build.py +++ b/experimental/python/databricks/bundles/build.py @@ -6,7 +6,7 @@ import os.path import sys from copy import deepcopy -from dataclasses import dataclass, field, replace +from dataclasses import dataclass, field, fields, replace from typing import Callable, Optional, TextIO from databricks.bundles.core import Bundle, Diagnostics, Location, Resources @@ -35,7 +35,7 @@ class _Conf: @classmethod def from_dict(cls, d: dict) -> "_Conf": - known_keys = {"resources", "mutators", "venv_path"} + known_keys = [f.name for f in fields(cls)] unknown_keys = d.keys() - known_keys if unknown_keys: diff --git a/experimental/python/databricks_tests/test_build.py b/experimental/python/databricks_tests/test_build.py index 26ecdb1247..980cbbe76e 100644 --- a/experimental/python/databricks_tests/test_build.py +++ b/experimental/python/databricks_tests/test_build.py @@ -5,6 +5,7 @@ from databricks.bundles.build import ( _append_resources, _Args, + _Conf, _load_object, _parse_args, _parse_bundle_info, @@ -266,3 +267,32 @@ def test_parse_args_unknown(): locations=None, unknown_args=["--unknown"], ) + + +def test_conf_from_dict(): + actual = _Conf.from_dict( + { + "resources": [ + "resources:load_resources", + "resources:load_more_resources", + ], + "mutators": [ + "resources:add_notifications", + "resources:add_more_notifications", + ], + "venv_path": "venv", + "unknown": "unknown", + } + ) + + assert actual == _Conf( + resources=[ + "resources:load_resources", + "resources:load_more_resources", + ], + mutators=[ + "resources:add_notifications", + "resources:add_more_notifications", + ], + venv_path="venv", + )