From 9c9912ddcbb5e287d09f9a18e720f7f9bbb597d9 Mon Sep 17 00:00:00 2001 From: hyein Date: Tue, 17 May 2022 11:19:18 +0900 Subject: [PATCH] Allow row_filter_id and row_filter_ids both --- clouddq/classes/dq_rule_binding.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/clouddq/classes/dq_rule_binding.py b/clouddq/classes/dq_rule_binding.py index a88b9cf3..1b1fcbf5 100644 --- a/clouddq/classes/dq_rule_binding.py +++ b/clouddq/classes/dq_rule_binding.py @@ -92,14 +92,22 @@ def from_dict( ) if column_id: column_id.upper() - row_filter_ids: list[str] = get_from_dict_and_assert( + row_filter_config: dict = get_keys_from_dict_and_assert_oneof( config_id=rule_binding_id, kwargs=kwargs, - key="row_filter_ids", - assertion=lambda x: type(x) == list, - error_msg=f"Rule Binding ID: '{rule_binding_id}' must have defined value " - f"'row_filter_ids' of type 'list'.", + keys=["row_filter_id", "row_filter_ids"] ) + row_filter_ids = [] + if "row_filter_id" in row_filter_config: + row_filter_ids.append(row_filter_config["row_filter_id"].upper()) + if "row_filter_ids" in row_filter_config: + for row_filter in row_filter_config["row_filter_ids"]: + if type(row_filter) == str: + row_filter_ids.append(row_filter.upper()) + if type(row_filter) == dict: + row_filter_ids.extend( + [id.upper() for id in row_filter] + ) rule_ids: list[str] = get_from_dict_and_assert( config_id=rule_binding_id, kwargs=kwargs, @@ -262,9 +270,9 @@ def resolve_row_filter_config_list( if len(row_filter) > 1: raise ValueError( f"Rule Binding {self.rule_binding_id} has " - f"invalid configs in rule_ids. " + f"invalid configs in row_filter_ids. " f"Each nested row_filter_id objects cannot " - f"have more than one rule_id. " + f"have more than one row_filter_id. " f"Current value: \n {row_filter}" ) else: @@ -273,7 +281,7 @@ def resolve_row_filter_config_list( else: row_filter_id = row_filter arguments = None - row_filter_config = configs_cache.get_row_filter_id(row_filter_id.upper()) + row_filter_config = configs_cache.get_row_filter_id(row_filter_id) row_filter_config.resolve_sql_expr(arguments) resolved_row_filter_config_list.append(row_filter_config) assert_not_none_or_empty(