diff --git a/data_diff/config.py b/data_diff/config.py index 3971f0be..1b091f07 100644 --- a/data_diff/config.py +++ b/data_diff/config.py @@ -4,6 +4,12 @@ import toml +_ARRAY_FIELDS = ( + "key_columns", + "columns", +) + + class ConfigParseError(Exception): pass @@ -38,6 +44,11 @@ def _apply_config(config: Dict[str, Any], run_name: str, kw: Dict[str, Any]): for index in "12": run_args[index] = {attr: kw.pop(f"{attr}{index}") for attr in ("database", "table")} + # Make sure array fields are decoded as list, since array fields in toml are decoded as list, but TableSegment object requires tuple type. + for field in _ARRAY_FIELDS: + if isinstance(run_args.get(field), list): + run_args[field] = tuple(run_args[field]) + # Process databases + tables for index in "12": try: diff --git a/tests/test_config.py b/tests/test_config.py index fb8a6245..960ee15d 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -15,6 +15,8 @@ def test_basic(self): [run.default] update_column = "timestamp" + key_columns = ["id"] + columns = ["name", "age"] verbose = true threads = 2 @@ -39,6 +41,8 @@ def test_basic(self): assert res["table2"] == "rating_del1" assert res["threads1"] == 11 assert res["threads2"] == 22 + assert res["key_columns"] == ("id",) + assert res["columns"] == ("name", "age") res = apply_config_from_string(config, "pg_pg", {"update_column": "foo", "table2": "bar"}) assert res["update_column"] == "foo"