-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add selected_resources
to the Jinja context
#5001
Changes from 4 commits
989e97d
78848b3
2df169f
015b3a9
d30ce14
b7b5ecd
f18a171
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
kind: Features | ||
body: Add a variable called selected_resources in the Jinja context containing a list | ||
of all the resources matching the nodes for the --select, --exclude and/or --selector | ||
parameters. | ||
time: 2022-04-04T19:04:39.347479+02:00 | ||
custom: | ||
Author: b-per | ||
Issue: "3471" | ||
PR: "5001" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
SELECTED_RESOURCES = [] | ||
|
||
|
||
def set_selected_resources(selected_resources): | ||
global SELECTED_RESOURCES | ||
SELECTED_RESOURCES = list(selected_resources) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
on_run_start_macro_assert_selected_models_expected_list = """ | ||
{% macro assert_selected_models_expected_list(expected_list) %} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Really like the way you use this macro to test the functionality! |
||
|
||
{% if execute %} | ||
|
||
{% set sorted_selected_resources = selected_resources | sort %} | ||
{% set sorted_expected_list = expected_list | sort %} | ||
|
||
{% if sorted_selected_resources != sorted_expected_list %} | ||
{{ exceptions.raise_compiler_error("FAIL: sorted_selected_resources" ~ sorted_selected_resources ~ " is different from " ~ sorted_expected_list) }} | ||
{% endif %} | ||
|
||
{% endif %} | ||
|
||
{% endmacro %} | ||
""" | ||
|
||
|
||
my_model1 = """ | ||
select 1 as id | ||
""" | ||
|
||
my_model2 = """ | ||
select * from {{ ref('model1') }} | ||
""" | ||
|
||
my_snapshot = """ | ||
{% snapshot cc_all_snapshot %} | ||
{{ config( | ||
check_cols='all', unique_key='id', strategy='check', | ||
target_database=database, target_schema=schema | ||
) }} | ||
select * from {{ ref('model2') }} | ||
{% endsnapshot %} | ||
""" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
import pytest | ||
from dbt.tests.util import run_dbt | ||
from tests.functional.selected_resources.fixtures import ( | ||
on_run_start_macro_assert_selected_models_expected_list, | ||
my_model1, | ||
my_model2, | ||
my_snapshot, | ||
) | ||
|
||
|
||
@pytest.fixture(scope="class") | ||
def macros(): | ||
return { | ||
"assert_selected_models_expected_list.sql": on_run_start_macro_assert_selected_models_expected_list, | ||
} | ||
|
||
|
||
@pytest.fixture(scope="class") | ||
def models(): | ||
return {"model1.sql": my_model1, "model2.sql": my_model2} | ||
|
||
|
||
@pytest.fixture(scope="class") | ||
def snapshots(): | ||
return { | ||
"my_snapshot.sql": my_snapshot, | ||
} | ||
|
||
|
||
@pytest.fixture(scope="class") | ||
def project_config_update(): | ||
return { | ||
"on-run-start": "{{ assert_selected_models_expected_list(var('expected_list',[])) }}", | ||
} | ||
|
||
|
||
def test_selected_resources_build(project): | ||
results = run_dbt( | ||
[ | ||
"build", | ||
"--select", | ||
"model1+", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we do a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I just modified a test to be It was failing at first (because |
||
"--vars", | ||
'{"expected_list": ["model.test.model1", "model.test.model2", "snapshot.test.cc_all_snapshot"]}', | ||
] | ||
) | ||
assert results[0].status == "success" | ||
|
||
|
||
def test_selected_resources_run(project): | ||
results = run_dbt( | ||
[ | ||
"run", | ||
"--select", | ||
"model1+", | ||
"--vars", | ||
'{"expected_list": ["model.test.model2", "model.test.model1"]}', | ||
] | ||
) | ||
assert results[0].status == "success" | ||
|
||
|
||
def test_selected_resources_build_all(project): | ||
results = run_dbt( | ||
[ | ||
"build", | ||
"--vars", | ||
'{"expected_list": ["model.test.model1", "model.test.model2", "snapshot.test.cc_all_snapshot"]}', | ||
] | ||
) | ||
assert results[0].status == "success" | ||
|
||
|
||
def test_selected_resources_build_no_model(project): | ||
results = run_dbt(["build", "--select", "model_that_does_not_exist"]) | ||
assert not results | ||
|
||
|
||
def test_selected_resources_test_no_model(project): | ||
results = run_dbt(["test", "--select", "model1+", "--vars", '{"expected_list": []}']) | ||
assert not results |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gshank could there be situations where
selected_resources
is referenced before it got set byget_graph_queue
? I think there isn't but want to double-check.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the selected_resources will be empty unless it's execution time, which should be okay. I suppose the list could be really big for a run command that executes the whole project, but I think that should be okay too; it doesn't do much except reference the list of nodes.