Skip to content

Commit

Permalink
Adds support for File selector matcher (#273)
Browse files Browse the repository at this point in the history
* Adds support for file matcher in docs site

* update deps

Co-authored-by: Emily Rockman <emily.rockman@dbtlabs.com>
  • Loading branch information
drewbanin and emmyoop authored Jul 6, 2022
1 parent 1d5b935 commit 4d8cc4d
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
- [Snyk] Upgrade prismjs from 1.27.0 to 1.28.0 ([#271](https://github.com/dbt-labs/dbt-docs/issues/271))
- Fixed sample SQL Code for sources when no database is defined ([docs#272](https://github.com/dbt-labs/dbt-docs/pull/272))
- Run build and tests in CI checks ([docs#274](https://github.com/dbt-labs/dbt-docs/pull/274))
- Add support for `file:` selector in DAG viz ([docs#273](https://github.com/dbt-labs/dbt-docs/pull/273))
- Improve metrics DAG viz and documentation page ([docs#285](https://github.com/dbt-labs/dbt-docs/pull/285))

Contributors:
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 32 additions & 1 deletion src/app/services/selector_integration.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ dag.setNode("a", {
source_name: 'event',
unique_id: 'a',
name: 'a',
tags: ['pii']
tags: ['pii'],
original_file_path: "models/schema.yml",
});

dag.setNode("b", {
Expand All @@ -33,6 +34,7 @@ dag.setNode("b", {
name: 'b',
fqn: ['my_package', 'b'],
tags: ['nightly'],
original_file_path: "models/b.sql",
});

dag.setNode("c", {
Expand All @@ -42,6 +44,7 @@ dag.setNode("c", {
name: 'c',
fqn: ['my_package', 'dir', 'c'],
tags: ['nightly'],
original_file_path: "models/dir/c.sql",
});

dag.setNode("d", {
Expand All @@ -51,6 +54,7 @@ dag.setNode("d", {
name: 'd',
fqn: ['my_package', 'dir', 'd'],
tags: ['daily', 'nightly'],
original_file_path: "models/dir/d.sql",
});

dag.setNode("e", {
Expand All @@ -60,6 +64,7 @@ dag.setNode("e", {
name: 'e',
fqn: ['my_package', 'dir', 'e'],
tags: ['nightly'],
original_file_path: "models/dir/e.sql",
});

dag.setNode("f", {
Expand All @@ -69,6 +74,7 @@ dag.setNode("f", {
name: 'f',
fqn: ['other_package', 'dir', 'f'],
tags: ['imported'],
original_file_path: "models/dir/f.sql",
});


Expand Down Expand Up @@ -327,6 +333,31 @@ test("Test getting nodes by tag with no edges", () => {
})


test("Test getting nodes by file name", () => {
var matched = matcher.getNodesFromSpec(
dag,
pristine_nodes,
undefined,
{
select_at: false,
select_parents: false,
parents_depth: null,
children_depth: null,
select_children: false,
selector_type: 'file',
selector_value: 'd.sql',
raw: 'd.sql'
}
)
matched.selected = matched.selected.sort()

expect(matched).toStrictEqual({
matched: ['d'],
selected: ['d'],
})
})


/*
* Test root-level selectNodes method
*/
Expand Down
27 changes: 24 additions & 3 deletions src/app/services/selector_matcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ var SELECTOR_TYPE = {
EXPOSURE: 'exposure',
METRIC: 'metric',
PATH: 'path',
FILE: 'file',
PACKAGE: 'package',
CONFIG: 'config',
TEST_NAME: 'test_name',
Expand All @@ -24,6 +25,7 @@ NODE_MATCHERS[SELECTOR_TYPE.SOURCE] = getNodesBySource;
NODE_MATCHERS[SELECTOR_TYPE.EXPOSURE] = getNodesByExposure;
NODE_MATCHERS[SELECTOR_TYPE.METRIC] = getNodesByMetric;
NODE_MATCHERS[SELECTOR_TYPE.PATH] = getNodesByPath;
NODE_MATCHERS[SELECTOR_TYPE.FILE] = getNodesByFile;
NODE_MATCHERS[SELECTOR_TYPE.PACKAGE] = getNodesByPackage;
NODE_MATCHERS[SELECTOR_TYPE.CONFIG] = getNodesByConfig;
NODE_MATCHERS[SELECTOR_TYPE.TEST_NAME] = getNodesByTestName;
Expand Down Expand Up @@ -125,14 +127,33 @@ function getNodesByPath(elements, path) {
return nodes;
}

function getNodesByFile(elements, path) {
var nodes = [];

_.each(elements, function(node) {
var path_parts = node.data.original_file_path.split("/");
var fname = _.last(path_parts);
if (fname == path) {
nodes.push(node.data);
}
})
return nodes;
}

function getNodesByImplicitSelection(elements, selector) {
var fqn_matched = getNodesByFQN(elements, selector);
var path_matched = getNodesByPath(elements, selector);

var file_matched = [];
if (selector.toLowerCase().endsWith('.sql')) {
file_matched = getNodesByFile(elements, selector);
}

var node_ids = _.uniq(
_.map(fqn_matched, 'unique_id')
.concat(
_.map(path_matched, 'unique_id')
[].concat(
_.map(fqn_matched, 'unique_id'),
_.map(path_matched, 'unique_id'),
_.map(file_matched, 'unique_id'),
)
)

Expand Down

0 comments on commit 4d8cc4d

Please sign in to comment.