Skip to content

Commit

Permalink
preserve previous behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
ChenyuLInx committed Oct 18, 2024
1 parent fa2ef04 commit 7358dbb
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 6 deletions.
4 changes: 2 additions & 2 deletions core/dbt/task/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -768,8 +768,8 @@ def after_run(self, adapter, results) -> None:
extras = {
"schemas": list({s for _, s in database_schema_set}),
"results": [
r for r in results if r.thread_id != "main"
], # exclude hooks to preserve backwards compatibility
r for r in results if r.thread_id != "main" or r.status == RunStatus.Error
], # exclude that didn't fail to preserve backwards compatibility
"database_schemas": list(database_schema_set),
}
with adapter.connection_named("master"):
Expand Down
1 change: 0 additions & 1 deletion core/dbt/task/runnable.py
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,6 @@ def execute_with_hooks(self, selected_uids: AbstractSet[str]):
self.started_at = time.time()
try:
before_run_status = self.before_run(adapter, selected_uids)

if before_run_status == RunStatus.Success or (
not get_flags().skip_nodes_if_on_run_start_fails
):
Expand Down
42 changes: 39 additions & 3 deletions tests/functional/adapter/hooks/test_on_run_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def test_results(self, project):
assert run_results["results"] == []


class Test__HookContext:
class Test__HookContext__HookSuccess:
@pytest.fixture(scope="class")
def project_config_update(self):
return {
Expand Down Expand Up @@ -192,9 +192,45 @@ def macros(self):
def models(self):
return {"my_model.sql": "select 1"}

def test_results_in_context(self, project):
def test_results_in_context_success(self, project):
results, log_output = run_dbt_and_capture(["--debug", "run"])
assert "Thread ID: " in log_output
assert "Thread ID: main" not in log_output
assert results[0].thread_id == "main" # hook still exists in run results
assert "Num Results in context: 1" in log_output # only model given hook was successful


class Test__HookContext__HookFail:
@pytest.fixture(scope="class")
def project_config_update(self):
return {
"on-run-start": [
"select a as id", # fail
],
"on-run-end": [
'{{ log("Num Results in context: " ~ results|length)}}'
"{{ output_thread_ids(results) }}",
],
}

@pytest.fixture(scope="class")
def macros(self):
return {
"log.sql": """
{% macro output_thread_ids(results) %}
{% for result in results %}
{{ log("Thread ID: " ~ result.thread_id) }}
{% endfor %}
{% endmacro %}
"""
}

@pytest.fixture(scope="class")
def models(self):
return {"my_model.sql": "select 1"}

def test_results_in_context_hook_fail(self, project):
results, log_output = run_dbt_and_capture(["--debug", "run"], expect_pass=False)
assert "Thread ID: main" in log_output
assert results[0].thread_id == "main"
assert "Num Results in context: 1" in log_output
assert "Num Results in context: 2" in log_output # failed hook and model

0 comments on commit 7358dbb

Please sign in to comment.