Skip to content

Commit 41a7b4d

Browse files
authored
Feat: provide useful error for invalid model kind (#3581)
1 parent 001899c commit 41a7b4d

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

sqlmesh/core/dialect.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,12 @@ def parse(self: Parser) -> t.Optional[exp.Expression]:
577577
if not field or isinstance(field, (MacroVar, MacroFunc)):
578578
value = field
579579
else:
580-
kind = ModelKindName[field.name.upper()]
580+
try:
581+
kind = ModelKindName[field.name.upper()]
582+
except KeyError:
583+
raise SQLMeshError(
584+
f"Model kind specified as '{field.name}', but that is not a valid model kind.\n\nPlease specify one of {', '.join(ModelKindName)}."
585+
)
581586

582587
if kind in (
583588
ModelKindName.INCREMENTAL_BY_TIME_RANGE,

tests/core/test_model.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5910,6 +5910,22 @@ def test_model_kind_to_expression():
59105910
)
59115911

59125912

5913+
def test_bad_model_kind():
5914+
with pytest.raises(
5915+
SQLMeshError,
5916+
match=f"Model kind specified as 'BAD_KIND', but that is not a valid model kind.\n\nPlease specify one of {', '.join(ModelKindName)}.",
5917+
):
5918+
d.parse(
5919+
"""
5920+
MODEL (
5921+
name db.table,
5922+
kind BAD_KIND
5923+
);
5924+
SELECT a, b
5925+
"""
5926+
)
5927+
5928+
59135929
def test_merge_filter():
59145930
expressions = d.parse(
59155931
"""
@@ -5945,7 +5961,7 @@ def test_merge_filter():
59455961
merge_filter (
59465962
source.ds > (SELECT MAX(ds) FROM db.test) AND
59475963
source.ds > @start_ds AND
5948-
source._operation <> 1 AND
5964+
source._operation <> 1 AND
59495965
target.start_date > dateadd(day, -7, current_date)
59505966
)
59515967
)

0 commit comments

Comments
 (0)