From 3d28450ce9cac7f2f468e65c0bdd656ab4a591bf Mon Sep 17 00:00:00 2001 From: Chris Rericha Date: Wed, 27 Aug 2025 13:56:34 -0400 Subject: [PATCH] Fix: Handle case where partition_by is explicitly passed in as None to dbt ModelConfig --- sqlmesh/dbt/model.py | 6 +++++- tests/dbt/test_transformation.py | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/sqlmesh/dbt/model.py b/sqlmesh/dbt/model.py index c646392368..6d31efe772 100644 --- a/sqlmesh/dbt/model.py +++ b/sqlmesh/dbt/model.py @@ -154,7 +154,11 @@ def _validate_sql(cls, v: t.Union[str, SqlStr]) -> SqlStr: @field_validator("partition_by", mode="before") @classmethod - def _validate_partition_by(cls, v: t.Any) -> t.Union[t.List[str], t.Dict[str, t.Any]]: + def _validate_partition_by( + cls, v: t.Any + ) -> t.Optional[t.Union[t.List[str], t.Dict[str, t.Any]]]: + if v is None: + return None if isinstance(v, str): return [v] if isinstance(v, list): diff --git a/tests/dbt/test_transformation.py b/tests/dbt/test_transformation.py index 320b036e6d..c976e56744 100644 --- a/tests/dbt/test_transformation.py +++ b/tests/dbt/test_transformation.py @@ -1329,6 +1329,23 @@ def test_partition_by(sushi_test_project: Project): assert model_config.to_sqlmesh(context).partitioned_by == [exp.to_column("ds", quoted=True)] +@pytest.mark.xdist_group("dbt_manifest") +def test_partition_by_none(sushi_test_project: Project): + context = sushi_test_project.context + context.target = BigQueryConfig(name="production", database="main", schema="sushi") + model_config = ModelConfig( + name="model", + alias="model", + schema="test", + package_name="package", + materialized="table", + unique_key="ds", + partition_by=None, + sql="""SELECT 1 AS one, ds FROM foo""", + ) + assert model_config.partition_by is None + + @pytest.mark.xdist_group("dbt_manifest") def test_relation_info_to_relation(): assert _relation_info_to_relation(