From e9a2b548cb2039c36272bb046bd4b7bbbc396508 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Wed, 13 Nov 2024 13:52:11 -0500 Subject: [PATCH] fix deprecation firing for microbatch model w custom strategy (#10989) --- .../unreleased/Fixes-20241112-210839.yaml | 6 +++ core/dbt/parser/manifest.py | 2 +- .../functional/microbatch/test_microbatch.py | 42 ++++++++++--------- 3 files changed, 30 insertions(+), 20 deletions(-) create mode 100644 .changes/unreleased/Fixes-20241112-210839.yaml diff --git a/.changes/unreleased/Fixes-20241112-210839.yaml b/.changes/unreleased/Fixes-20241112-210839.yaml new file mode 100644 index 00000000000..031e160f092 --- /dev/null +++ b/.changes/unreleased/Fixes-20241112-210839.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Correct when custom microbatch macro deprecation warning is fired +time: 2024-11-12T21:08:39.866837-06:00 +custom: + Author: QMalcolm MichelleArk + Issue: "10994" diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 6743bf5e6e7..fbfc83cd6c5 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -662,7 +662,7 @@ def check_for_microbatch_deprecations(self) -> None: has_microbatch_model = True break - if has_microbatch_model and self.manifest._microbatch_macro_is_core( + if has_microbatch_model and not self.manifest._microbatch_macro_is_core( self.root_project.project_name ): dbt.deprecations.warn("microbatch-macro-outside-of-batches-deprecation") diff --git a/tests/functional/microbatch/test_microbatch.py b/tests/functional/microbatch/test_microbatch.py index b98ad38caa9..3de48225f44 100644 --- a/tests/functional/microbatch/test_microbatch.py +++ b/tests/functional/microbatch/test_microbatch.py @@ -182,19 +182,16 @@ def test_use_custom_microbatch_strategy_by_default( project, deprecation_catcher: EventCatcher, ): - with mock.patch.object( - type(project.adapter), "valid_incremental_strategies", lambda _: [] - ): - # Initial run - run_dbt(["run"]) + # Initial run fires deprecation + run_dbt(["run"], callbacks=[deprecation_catcher.catch]) + # Deprecation warning about custom microbatch macro fired + assert len(deprecation_catcher.caught_events) == 1 - # Incremental run uses custom strategy - _, logs = run_dbt_and_capture(["run"]) - assert "custom microbatch strategy" in logs - # The custom strategy wasn't used with batch functionality - assert "START batch" not in logs - # Deprecation warning about custom microbatch macro fired - assert len(deprecation_catcher.caught_events) == 0 + # Incremental run uses custom strategy + _, logs = run_dbt_and_capture(["run"]) + assert "custom microbatch strategy" in logs + # The custom strategy wasn't used with batch functionality + assert "START batch" not in logs class TestMicrobatchCustomUserStrategyProjectFlagTrueValid(BaseMicrobatchCustomUserStrategy): @@ -208,7 +205,9 @@ def test_use_custom_microbatch_strategy_project_flag_true_invalid_incremental_st ): # Initial run with patch_microbatch_end_time("2020-01-03 13:57:00"): - run_dbt(["run"]) + run_dbt(["run"], callbacks=[deprecation_catcher.catch]) + # Deprecation warning about custom microbatch macro not fired + assert len(deprecation_catcher.caught_events) == 0 # Incremental run uses custom strategy with patch_microbatch_end_time("2020-01-03 13:57:00"): @@ -216,11 +215,11 @@ def test_use_custom_microbatch_strategy_project_flag_true_invalid_incremental_st assert "custom microbatch strategy" in logs # The custom strategy was used with batch functionality assert "START batch" in logs - # Deprecation warning about custom microbatch macro not fired - assert len(deprecation_catcher.caught_events) == 0 -class TestMicrobatchCustomUserStrategyProjectFlagTrueInvalid(BaseMicrobatchCustomUserStrategy): +class TestMicrobatchCustomUserStrategyProjectFlagTrueNoValidBuiltin( + BaseMicrobatchCustomUserStrategy +): def test_use_custom_microbatch_strategy_project_flag_true_invalid_incremental_strategy( self, project ): @@ -228,10 +227,15 @@ def test_use_custom_microbatch_strategy_project_flag_true_invalid_incremental_st type(project.adapter), "valid_incremental_strategies", lambda _: [] ): # Run of microbatch model while adapter doesn't have a "valid" - # microbatch strategy causes an error to be raised + # microbatch strategy causes no error when behaviour flag set to true + # and there is a custom microbatch macro with patch_microbatch_end_time("2020-01-03 13:57:00"): - _, logs = run_dbt_and_capture(["run"], expect_pass=False) - assert "'microbatch' is not valid" in logs + _, logs = run_dbt_and_capture(["run"]) + assert "'microbatch' is not valid" not in logs + assert ( + "The use of a custom microbatch macro outside of batched execution is deprecated" + not in logs + ) class BaseMicrobatchTest: