Skip to content
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

[Tidy first] rename node, realnode to unique_id, node in selector_methods.py #9837

Merged
merged 1 commit into from
Mar 29, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 78 additions & 80 deletions core/dbt/graph/selector_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,37 +257,35 @@
:param str selector: The selector or node name
"""
non_source_nodes = list(self.non_source_nodes(included_nodes))
for node, real_node in non_source_nodes:
if self.node_is_match(selector, real_node.fqn, real_node.is_versioned):
yield node
for unique_id, node in non_source_nodes:
if self.node_is_match(selector, node.fqn, node.is_versioned):
yield unique_id


class TagSelectorMethod(SelectorMethod):
def search(self, included_nodes: Set[UniqueId], selector: str) -> Iterator[UniqueId]:
"""yields nodes from included that have the specified tag"""
for node, real_node in self.all_nodes(included_nodes):
if hasattr(real_node, "tags") and any(
fnmatch(tag, selector) for tag in real_node.tags
):
yield node
for unique_id, node in self.all_nodes(included_nodes):
if hasattr(node, "tags") and any(fnmatch(tag, selector) for tag in node.tags):
yield unique_id


class GroupSelectorMethod(SelectorMethod):
def search(self, included_nodes: Set[UniqueId], selector: str) -> Iterator[UniqueId]:
"""yields nodes from included in the specified group"""
for node, real_node in self.groupable_nodes(included_nodes):
if selector == real_node.config.get("group"):
yield node
for unique_id, node in self.groupable_nodes(included_nodes):
if selector == node.config.get("group"):
yield unique_id


class AccessSelectorMethod(SelectorMethod):
def search(self, included_nodes: Set[UniqueId], selector: str) -> Iterator[UniqueId]:
"""yields model nodes matching the specified access level"""
for node, real_node in self.parsed_nodes(included_nodes):
if not isinstance(real_node, ModelNode):
for unique_id, node in self.parsed_nodes(included_nodes):
if not isinstance(node, ModelNode):
continue
if selector == real_node.access:
yield node
if selector == node.access:
yield unique_id


class SourceSelectorMethod(SelectorMethod):
Expand All @@ -310,14 +308,14 @@
).format(selector)
raise DbtRuntimeError(msg)

for node, real_node in self.source_nodes(included_nodes):
if not fnmatch(real_node.package_name, target_package):
for unique_id, node in self.source_nodes(included_nodes):
if not fnmatch(node.package_name, target_package):
continue
if not fnmatch(real_node.source_name, target_source):
if not fnmatch(node.source_name, target_source):
continue
if not fnmatch(real_node.name, target_table):
if not fnmatch(node.name, target_table):
continue
yield node
yield unique_id


class ExposureSelectorMethod(SelectorMethod):
Expand All @@ -336,13 +334,13 @@
).format(selector)
raise DbtRuntimeError(msg)

for node, real_node in self.exposure_nodes(included_nodes):
if not fnmatch(real_node.package_name, target_package):
for unique_id, node in self.exposure_nodes(included_nodes):
if not fnmatch(node.package_name, target_package):
continue
if not fnmatch(real_node.name, target_name):
if not fnmatch(node.name, target_name):
continue

yield node
yield unique_id


class MetricSelectorMethod(SelectorMethod):
Expand All @@ -361,13 +359,13 @@
).format(selector)
raise DbtRuntimeError(msg)

for node, real_node in self.metric_nodes(included_nodes):
if not fnmatch(real_node.package_name, target_package):
for unique_id, node in self.metric_nodes(included_nodes):
if not fnmatch(node.package_name, target_package):
continue
if not fnmatch(real_node.name, target_name):
if not fnmatch(node.name, target_name):
continue

yield node
yield unique_id


class SemanticModelSelectorMethod(SelectorMethod):
Expand All @@ -386,13 +384,13 @@
).format(selector)
raise DbtRuntimeError(msg)

for node, real_node in self.semantic_model_nodes(included_nodes):
if not fnmatch(real_node.package_name, target_package):
for unique_id, node in self.semantic_model_nodes(included_nodes):
if not fnmatch(node.package_name, target_package):
continue
if not fnmatch(real_node.name, target_name):
if not fnmatch(node.name, target_name):
continue

yield node
yield unique_id


class SavedQuerySelectorMethod(SelectorMethod):
Expand All @@ -411,13 +409,13 @@
).format(selector)
raise DbtRuntimeError(msg)

for node, real_node in self.saved_query_nodes(included_nodes):
if not fnmatch(real_node.package_name, target_package):
for unique_id, node in self.saved_query_nodes(included_nodes):
if not fnmatch(node.package_name, target_package):
continue
if not fnmatch(real_node.name, target_name):
if not fnmatch(node.name, target_name):
continue

yield node
yield unique_id


class PathSelectorMethod(SelectorMethod):
Expand All @@ -430,35 +428,35 @@
else:
root = Path.cwd()
paths = set(p.relative_to(root) for p in root.glob(selector))
for node, real_node in self.all_nodes(included_nodes):
ofp = Path(real_node.original_file_path)
for unique_id, node in self.all_nodes(included_nodes):
ofp = Path(node.original_file_path)
if ofp in paths:
yield node
if hasattr(real_node, "patch_path") and real_node.patch_path: # type: ignore
pfp = real_node.patch_path.split("://")[1] # type: ignore
yield unique_id
if hasattr(node, "patch_path") and node.patch_path: # type: ignore
pfp = node.patch_path.split("://")[1] # type: ignore
ymlfp = Path(pfp)
if ymlfp in paths:
yield node
yield unique_id
if any(parent in paths for parent in ofp.parents):
yield node
yield unique_id


class FileSelectorMethod(SelectorMethod):
def search(self, included_nodes: Set[UniqueId], selector: str) -> Iterator[UniqueId]:
"""Yields nodes from included that match the given file name."""
for node, real_node in self.all_nodes(included_nodes):
if fnmatch(Path(real_node.original_file_path).name, selector):
yield node
elif fnmatch(Path(real_node.original_file_path).stem, selector):
yield node
for unique_id, node in self.all_nodes(included_nodes):
if fnmatch(Path(node.original_file_path).name, selector):
yield unique_id
elif fnmatch(Path(node.original_file_path).stem, selector):
yield unique_id


class PackageSelectorMethod(SelectorMethod):
def search(self, included_nodes: Set[UniqueId], selector: str) -> Iterator[UniqueId]:
"""Yields nodes from included that have the specified package"""
for node, real_node in self.all_nodes(included_nodes):
if fnmatch(real_node.package_name, selector):
yield node
for unique_id, node in self.all_nodes(included_nodes):
if fnmatch(node.package_name, selector):
yield unique_id


def _getattr_descend(obj: Any, attrs: List[str]) -> Any:
Expand Down Expand Up @@ -500,9 +498,9 @@
# search sources is kind of useless now source configs only have
# 'enabled', which you can't really filter on anyway, but maybe we'll
# add more someday, so search them anyway.
for node, real_node in self.configurable_nodes(included_nodes):
for unique_id, node in self.configurable_nodes(included_nodes):
try:
value = _getattr_descend(real_node.config, parts)
value = _getattr_descend(node.config, parts)
except AttributeError:
continue
else:
Expand All @@ -512,15 +510,15 @@
or (CaseInsensitive(selector) == "true" and True in value)
or (CaseInsensitive(selector) == "false" and False in value)
):
yield node
yield unique_id
else:
if (
(selector == value)
or (CaseInsensitive(selector) == "true" and value is True)
or (CaseInsensitive(selector) == "false")
and value is False
):
yield node
yield unique_id


class ResourceTypeSelectorMethod(SelectorMethod):
Expand All @@ -529,9 +527,9 @@
resource_type = NodeType(selector)
except ValueError as exc:
raise DbtRuntimeError(f'Invalid resource_type selector "{selector}"') from exc
for node, real_node in self.all_nodes(included_nodes):
if real_node.resource_type == resource_type:
yield node
for unique_id, node in self.all_nodes(included_nodes):
if node.resource_type == resource_type:
yield unique_id

Check warning on line 532 in core/dbt/graph/selector_methods.py

View check run for this annotation

Codecov / codecov/patch

core/dbt/graph/selector_methods.py#L530-L532

Added lines #L530 - L532 were not covered by tests


class TestNameSelectorMethod(SelectorMethod):
Expand Down Expand Up @@ -761,9 +759,9 @@
matches = set(
result.unique_id for result in self.previous_state.results if result.status == selector
)
for node, real_node in self.all_nodes(included_nodes):
if node in matches:
yield node
for unique_id, node in self.all_nodes(included_nodes):
if unique_id in matches:
yield unique_id


class SourceStatusSelectorMethod(SelectorMethod):
Expand Down Expand Up @@ -815,37 +813,37 @@
):
matches.remove(unique_id)

for node, real_node in self.all_nodes(included_nodes):
if node in matches:
yield node
for unique_id, node in self.all_nodes(included_nodes):
if unique_id in matches:
yield unique_id


class VersionSelectorMethod(SelectorMethod):
def search(self, included_nodes: Set[UniqueId], selector: str) -> Iterator[UniqueId]:
for node, real_node in self.parsed_nodes(included_nodes):
if isinstance(real_node, ModelNode):
for unique_id, node in self.parsed_nodes(included_nodes):
if isinstance(node, ModelNode):
if selector == "latest":
if real_node.is_latest_version:
yield node
if node.is_latest_version:
yield unique_id
elif selector == "prerelease":
if (
real_node.version
and real_node.latest_version
and UnparsedVersion(v=real_node.version)
> UnparsedVersion(v=real_node.latest_version)
node.version
and node.latest_version
and UnparsedVersion(v=node.version)
> UnparsedVersion(v=node.latest_version)
):
yield node
yield unique_id
elif selector == "old":
if (
real_node.version
and real_node.latest_version
and UnparsedVersion(v=real_node.version)
< UnparsedVersion(v=real_node.latest_version)
node.version
and node.latest_version
and UnparsedVersion(v=node.version)
< UnparsedVersion(v=node.latest_version)
):
yield node
yield unique_id
elif selector == "none":
if real_node.version is None:
yield node
if node.version is None:
yield unique_id
else:
raise DbtRuntimeError(
f'Invalid version type selector {selector}: expected one of: "latest", "prerelease", "old", or "none"'
Expand Down