def test_find_evaluation_parameter_dependencies(): parameter_expression = "(-3 * urn:great_expectations:validations:profile:expect_column_stdev_to_be_between.result.observed_value:column=norm) + urn:great_expectations:validations:profile:expect_column_mean_to_be_between.result.observed_value:column=norm" dependencies = find_evaluation_parameter_dependencies(parameter_expression) assert dependencies == { "urns": { "urn:great_expectations:validations:profile:expect_column_stdev_to_be_between.result.observed_value:column=norm", "urn:great_expectations:validations:profile:expect_column_mean_to_be_between.result.observed_value:column=norm", }, "other": set(), } parameter_expression = "upstream_value * urn:great_expectations:validations:profile:expect_column_stdev_to_be_between.result.observed_value:column=norm" dependencies = find_evaluation_parameter_dependencies(parameter_expression) assert dependencies == { "urns": { "urn:great_expectations:validations:profile:expect_column_stdev_to_be_between.result.observed_value:column=norm", }, "other": {"upstream_value"}, } parameter_expression = "upstream_value" dependencies = find_evaluation_parameter_dependencies(parameter_expression) assert dependencies == {"urns": set(), "other": {"upstream_value"}} parameter_expression = "3 * upstream_value" dependencies = find_evaluation_parameter_dependencies(parameter_expression) assert dependencies == {"urns": set(), "other": {"upstream_value"}} parameter_expression = "3" dependencies = find_evaluation_parameter_dependencies(parameter_expression) assert dependencies == {"urns": set(), "other": set()}
def get_evaluation_parameter_dependencies(self): parsed_dependencies = dict() for key, value in self.kwargs.items(): if isinstance(value, dict) and "$PARAMETER" in value: param_string_dependencies = find_evaluation_parameter_dependencies( value["$PARAMETER"] ) nested_update(parsed_dependencies, param_string_dependencies) dependencies = dict() urns = parsed_dependencies.get("urns", []) for string_urn in urns: try: urn = ge_urn.parseString(string_urn) except ParserError: logger.warning( "Unable to parse great_expectations urn {}".format( value["$PARAMETER"] ) ) continue if not urn.get("metric_kwargs"): nested_update( dependencies, {urn["expectation_suite_name"]: [urn["metric_name"]]}, ) else: nested_update( dependencies, { urn["expectation_suite_name"]: [ { "metric_kwargs_id": { urn["metric_kwargs"]: [urn["metric_name"]] } } ] }, ) dependencies = _deduplicate_evaluation_parameter_dependencies(dependencies) return dependencies