|
38 | 38 | {% set any_refs = modules.re.findall("ref\(\'(?P<name>.*)\'\)", el.node.test_metadata.kwargs['model']) %}
|
39 | 39 | {% set any_source = modules.re.findall("source\(\'(?P<one>.*)\'\,\s+\'(?P<two>.*)\'\)", el.node.test_metadata.kwargs['model']) %}
|
40 | 40 |
|
| 41 | + -- Separate `depends_on` nodes into sources and models to avoid incorrect matching of a test to a source |
| 42 | + -- when it fact it refers to a model (snapshot or regular model) |
| 43 | + {% set depends_on_sources = [] %} |
| 44 | + {% set depends_on_models = [] %} |
| 45 | + {% for full_name in el.node.depends_on.nodes %} |
| 46 | + {%- if full_name.split('.')[0] == "source" -%} |
| 47 | + {% do depends_on_sources.append(full_name)%} |
| 48 | + {%- else -%} |
| 49 | + {% do depends_on_models.append(full_name)%} |
| 50 | + {%- endif -%} |
| 51 | + {% endfor %} |
| 52 | + |
41 | 53 | {% if any_refs %}
|
42 | 54 | {% set name = any_refs[0] %}
|
43 |
| - -- NOTE: This relies on snapshot models to include the word "snapshot" in the model name. |
44 |
| - -- There doesn't seem to be an easily accessible field to tell us that this node is a snapshot |
45 |
| - -- without relying on the name or other proxies. |
46 |
| - {% if "snapshot" in name %} |
47 |
| - {% set ref_type = "snapshot" %} |
48 |
| - {% else %} |
49 |
| - {% set ref_type = "model" %} |
50 |
| - {% endif %} |
51 |
| - {% set node_name = re_data.priv_full_name_from_depends(el.node, name, ref_type) %} |
| 55 | + {% set node_name = re_data.priv_full_name_from_depends(el.node, name, depends_on_models) %} |
52 | 56 | {% set schema = graph.nodes.get(node_name)['schema'] %}
|
53 | 57 | {% set database = graph.nodes.get(node_name)['database'] %}
|
54 | 58 | {% set table_name = (database + '.' + schema + '.' + name) | lower %}
|
55 | 59 |
|
56 | 60 | {% elif any_source %}
|
57 | 61 | {% set package_name = any_source[0][0] %}
|
58 | 62 | {% set name = any_source[0][1] %}
|
59 |
| - {% set node_name = re_data.priv_full_name_from_depends(el.node, name, "source") %} |
| 63 | + {% set node_name = re_data.priv_full_name_from_depends(el.node, name, depends_on_sources) %} |
60 | 64 | {% set schema = graph.sources.get(node_name)['schema'] %}
|
61 | 65 | {% set database = graph.sources.get(node_name)['database'] %}
|
62 | 66 | {% set table_name = (database + '.' + schema + '.' + name) | lower %}
|
|
106 | 110 |
|
107 | 111 | {% endmacro %}
|
108 | 112 |
|
109 |
| -{% macro priv_full_name_from_depends(node, name, type) %} |
| 113 | +{% macro priv_full_name_from_depends(node, name, depends_on_nodes) %} |
110 | 114 |
|
111 |
| - {% for full_name in node.depends_on.nodes %} |
| 115 | + {% for full_name in depends_on_nodes %} |
112 | 116 | {% set node_name = full_name.split('.')[-1] %}
|
113 |
| - {% set node_type = full_name.split('.')[0] %} |
114 |
| - {% if node_name == name and node_type == type %} |
| 117 | + {% if node_name == name %} |
115 | 118 | {{ return(full_name) }}
|
116 | 119 | {% endif %}
|
117 | 120 | {% endfor %}
|
|
0 commit comments