Spec: filter conditional edges in Spec.dependencies/edges_to_dependencies

Signed-off-by: Gregory Becker <becker33@llnl.gov>
This commit is contained in:
Gregory Becker 2025-05-12 14:14:04 -07:00
parent 79610ce80e
commit ebf4c8b445
No known key found for this signature in database
GPG Key ID: 2362541F6D14ED84

View File

@ -1027,6 +1027,7 @@ def select(
child: Optional[str] = None,
depflag: dt.DepFlag = dt.ALL,
virtuals: Optional[Union[str, Sequence[str]]] = None,
when: Optional["Spec"] = None,
) -> List[DependencySpec]:
"""Selects a list of edges and returns them.
@ -1046,6 +1047,7 @@ def select(
child: name of the child package
depflag: allowed dependency types in flag form
virtuals: list of virtuals or specific virtual on the edge
when: condition on conditional dependency, or Spec() for unconditional dependency only
"""
if not depflag:
return []
@ -1071,6 +1073,9 @@ def select(
else:
selected = (dep for dep in selected if any(v in dep.virtuals for v in virtuals))
if when is not None:
selected = (dep for dep in selected if dep.when == when)
return list(selected)
def clear(self):
@ -1618,6 +1623,7 @@ def edges_to_dependencies(
depflag: dt.DepFlag = dt.ALL,
*,
virtuals: Optional[Union[str, Sequence[str]]] = None,
when: Optional["Spec"] = None,
) -> List[DependencySpec]:
"""Returns a list of edges connecting this node in the DAG to children.
@ -1625,9 +1631,13 @@ def edges_to_dependencies(
name: filter dependencies by package name
depflag: allowed dependency types
virtuals: allowed virtuals
when: condition on conditional dependencies (or Spec() for unconditional)
"""
return [
d for d in self._dependencies.select(child=name, depflag=depflag, virtuals=virtuals)
d
for d in self._dependencies.select(
child=name, depflag=depflag, virtuals=virtuals, when=when
)
]
@property
@ -1666,6 +1676,7 @@ def dependencies(
deptype: Union[dt.DepTypes, dt.DepFlag] = dt.ALL,
*,
virtuals: Optional[Union[str, Sequence[str]]] = None,
when: Optional["Spec"] = None,
) -> List["Spec"]:
"""Returns a list of direct dependencies (nodes in the DAG)
@ -1673,11 +1684,15 @@ def dependencies(
name: filter dependencies by package name
deptype: allowed dependency types
virtuals: allowed virtuals
when: condition on conditional dependency or Spec() for unconditional
"""
if not isinstance(deptype, dt.DepFlag):
deptype = dt.canonicalize(deptype)
return [
d.spec for d in self.edges_to_dependencies(name, depflag=deptype, virtuals=virtuals)
d.spec
for d in self.edges_to_dependencies(
name, depflag=deptype, virtuals=virtuals, when=when
)
]
def dependents(