From 46b533a3b306b0934b248ca3e5970f23ff9b3a79 Mon Sep 17 00:00:00 2001 From: Kshitij Aranke Date: Tue, 11 Feb 2025 14:22:12 +0000 Subject: [PATCH] Expand doc_blocks backcompat test --- core/dbt/artifacts/resources/v1/components.py | 21 ++++++++++ .../docs/test_doc_blocks_backcompat.py | 38 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 tests/functional/docs/test_doc_blocks_backcompat.py diff --git a/core/dbt/artifacts/resources/v1/components.py b/core/dbt/artifacts/resources/v1/components.py index 6f3781b06c0..2823b6bd7bc 100644 --- a/core/dbt/artifacts/resources/v1/components.py +++ b/core/dbt/artifacts/resources/v1/components.py @@ -70,6 +70,18 @@ class ColumnInfo(AdditionalPropertiesMixin, ExtensibleDbtClassMixin): granularity: Optional[TimeGranularity] = None doc_blocks: List[str] = field(default_factory=list) + def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None) -> dict: + dct = super().__post_serialize__(dct, context) + + # Remove doc_blocks from output if they are not a list of strings + if isinstance(dct["doc_blocks"], list): + if not all(isinstance(x, str) for x in dct["doc_blocks"]): + dct["doc_blocks"] = [] + else: + dct["doc_blocks"] = [] + + return dct + @dataclass class InjectedCTE(dbtClassMixin): @@ -202,10 +214,19 @@ class ParsedResource(ParsedResourceMandatory): def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None): dct = super().__post_serialize__(dct, context) + if context and context.get("artifact") and "config_call_dict" in dct: del dct["config_call_dict"] if context and context.get("artifact") and "unrendered_config_call_dict" in dct: del dct["unrendered_config_call_dict"] + + # Remove doc_blocks from output if they are not a list of strings + if isinstance(dct["doc_blocks"], list): + if not all(isinstance(x, str) for x in dct["doc_blocks"]): + dct["doc_blocks"] = [] + else: + dct["doc_blocks"] = [] + return dct diff --git a/tests/functional/docs/test_doc_blocks_backcompat.py b/tests/functional/docs/test_doc_blocks_backcompat.py new file mode 100644 index 00000000000..9623331c60a --- /dev/null +++ b/tests/functional/docs/test_doc_blocks_backcompat.py @@ -0,0 +1,38 @@ +import json +import os + +import pytest + +from dbt.tests.util import run_dbt + +schema_yml = """ +models: + - name: my_colors + doc_blocks: 2 + columns: + - name: id + doc_blocks: 2 + - name: color + doc_blocks: ["hello", 2, "world"] +""" + + +class TestDocBlocksBackCompat: + @pytest.fixture(scope="class") + def models(self): + return { + "my_colors.sql": "select 1 as id, 'blue' as color", + "schema.yml": schema_yml, + } + + def test_doc_blocks_back_compat(self, project): + run_dbt(["parse"]) + + assert os.path.exists("./target/manifest.json") + + with open("./target/manifest.json") as fp: + manifest = json.load(fp) + + model_data = manifest["nodes"]["model.test.my_colors"] + assert model_data["doc_blocks"] == [] + assert all(column["doc_blocks"] == [] for column in model_data["columns"].values())