Skip to content

Commit

Permalink
active project > local project in ConfiguredVar (#7441)
Browse files Browse the repository at this point in the history
  • Loading branch information
MichelleArk authored Apr 28, 2023
1 parent c56a9b2 commit a7eb89d
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 3 deletions.
6 changes: 6 additions & 0 deletions .changes/unreleased/Fixes-20230427-230714.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
kind: Fixes
body: 'Fix var precedence in configs: root vars override package vars'
time: 2023-04-27T23:07:14.992529-04:00
custom:
Author: MichelleArk
Issue: "6705"
3 changes: 2 additions & 1 deletion core/dbt/context/configured.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ def __call__(self, var_name, default=Var._VAR_NOTSET):
adapter_type = self._config.credentials.type
lookup = FQNLookup(self._project_name)
active_vars = self._config.vars.vars_for(lookup, adapter_type)
all_vars = MultiDict([active_vars])

all_vars = MultiDict()
if self._config.project_name != my_config.project_name:
all_vars.add(my_config.vars.vars_for(lookup, adapter_type))
all_vars.add(active_vars)

if var_name in all_vars:
return all_vars[var_name]
Expand Down
39 changes: 38 additions & 1 deletion tests/functional/context_methods/first_dependency.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
vars:
first_dep:
first_dep_global: 'first_dep_global_value_overridden'
test_config_root_override: 'configured_from_dependency'
test_config_package: 'configured_from_dependency'
seeds:
quote_columns: True
Expand All @@ -42,6 +43,24 @@
first_dep_global_value_overridden,root_first_value
"""

first_dependency__models__nested__first_dep_model_var_expected_csv = """test_config_root_override,test_config_package
configured_from_root,configured_from_dependency
"""

first_dependency__models__nested__first_dep_model_var_sql = """
select
'{{ config.get("test_config_root_override") }}' as test_config_root_override,
'{{ config.get("test_config_package") }}' as test_config_package
"""

first_dependency__model_var_in_config_schema = """
models:
- name: first_dep_model
config:
test_config_root_override: "{{ var('test_config_root_override') }}"
test_config_package: "{{ var('test_config_package') }}"
"""


class FirstDependencyProject:
@pytest.fixture(scope="class")
Expand All @@ -56,3 +75,21 @@ def first_dependency(self, project):
"seeds": {"first_dep_expected.csv": first_dependency__seeds__first_dep_expected_csv},
}
write_project_files(project.project_root, "first_dependency", first_dependency_files)


class FirstDependencyConfigProject:
@pytest.fixture(scope="class")
def first_dependency(self, project):
first_dependency_files = {
"dbt_project.yml": first_dependency__dbt_project_yml,
"models": {
"nested": {
"first_dep_model.sql": first_dependency__models__nested__first_dep_model_var_sql,
"schema.yml": first_dependency__model_var_in_config_schema,
}
},
"seeds": {
"first_dep_expected.csv": first_dependency__models__nested__first_dep_model_var_expected_csv
},
}
write_project_files(project.project_root, "first_dependency", first_dependency_files)
29 changes: 28 additions & 1 deletion tests/functional/context_methods/test_var_dependency.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import pytest
from dbt.tests.util import run_dbt, check_relations_equal

from tests.functional.context_methods.first_dependency import FirstDependencyProject
from tests.functional.context_methods.first_dependency import (
FirstDependencyProject,
FirstDependencyConfigProject,
)

dependency_seeds__root_model_expected_csv = """first_dep_global,from_root
dep_never_overridden,root_root_value
Expand Down Expand Up @@ -52,3 +55,27 @@ def test_var_mutual_overrides_v1_conversion(self, project, first_dependency):
assert len(run_dbt(["run"])) == 2
check_relations_equal(project.adapter, ["root_model_expected", "model"])
check_relations_equal(project.adapter, ["first_dep_expected", "first_dep_model"])


class TestVarConfigDependencyInheritance(FirstDependencyConfigProject):
@pytest.fixture(scope="class")
def packages(self):
return {
"packages": [
{"local": "first_dependency"},
]
}

@pytest.fixture(scope="class")
def project_config_update(self):
return {
"vars": {
"test_config_root_override": "configured_from_root",
},
}

def test_root_var_overrides_package_var(self, project, first_dependency):
run_dbt(["deps"])
run_dbt(["seed"])
assert len(run_dbt(["run"])) == 1
check_relations_equal(project.adapter, ["first_dep_expected", "first_dep_model"])

0 comments on commit a7eb89d

Please sign in to comment.