From fb8e8e9f485de7cba7c10398160a7aacb7e756c1 Mon Sep 17 00:00:00 2001 From: tlento Date: Mon, 9 Oct 2023 18:13:29 -0700 Subject: [PATCH] Throw exceptions on invalid entity names in filter and group by expressions The previous logic was simply calling an error string formatting function, and one which would return an incorrect error message at that. This raises an exception with an entity-specific name formatting error message. --- .changes/unreleased/Fixes-20231009-211057.yaml | 7 +++++++ .../parsing/where_filter/parameter_set_factory.py | 5 ++++- tests/implementations/where_filter/test_parse_calls.py | 8 ++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .changes/unreleased/Fixes-20231009-211057.yaml diff --git a/.changes/unreleased/Fixes-20231009-211057.yaml b/.changes/unreleased/Fixes-20231009-211057.yaml new file mode 100644 index 00000000..47edb506 --- /dev/null +++ b/.changes/unreleased/Fixes-20231009-211057.yaml @@ -0,0 +1,7 @@ +kind: Fixes +body: Throw an exception when invalid entity names are encountered in filter/group + by parameters +time: 2023-10-09T21:10:57.456012-07:00 +custom: + Author: tlento + Issue: "172" diff --git a/dbt_semantic_interfaces/parsing/where_filter/parameter_set_factory.py b/dbt_semantic_interfaces/parsing/where_filter/parameter_set_factory.py index a268b13d..78561ba0 100644 --- a/dbt_semantic_interfaces/parsing/where_filter/parameter_set_factory.py +++ b/dbt_semantic_interfaces/parsing/where_filter/parameter_set_factory.py @@ -84,7 +84,10 @@ def create_entity(entity_name: str, entity_path: Sequence[str] = ()) -> EntityCa """Gets called by Jinja when rendering {{ Entity(...) }}.""" group_by_item_name = DunderedNameFormatter.parse_name(entity_name) if len(group_by_item_name.entity_links) > 0 or group_by_item_name.time_granularity is not None: - ParameterSetFactory._exception_message_for_incorrect_format(entity_name) + raise ParseWhereFilterException( + f"Entity name is in an incorrect format: '{entity_name}'. " + f"It should not contain any dunders (double underscores, or __)." + ) return EntityCallParameterSet( entity_path=tuple(EntityReference(element_name=arg) for arg in entity_path), diff --git a/tests/implementations/where_filter/test_parse_calls.py b/tests/implementations/where_filter/test_parse_calls.py index e1741473..4ad77c5b 100644 --- a/tests/implementations/where_filter/test_parse_calls.py +++ b/tests/implementations/where_filter/test_parse_calls.py @@ -137,3 +137,11 @@ def test_metric_time_in_dimension_call_error() -> None: # noqa: D PydanticWhereFilter(where_sql_template="{{ Dimension('metric_time') }} > '2020-01-01'").call_parameter_sets is not None ) + + +def test_invalid_entity_name_error() -> None: + """Test to ensure we throw an error if an entity name is invalid.""" + bad_entity_filter = PydanticWhereFilter(where_sql_template="{{ Entity('order_id__is_food_order' )}}") + + with pytest.raises(ParseWhereFilterException, match="Entity name is in an incorrect format"): + bad_entity_filter.call_parameter_sets