Spec: filter conditional edges in Spec.dependencies/edges_to_dependencies
Signed-off-by: Gregory Becker <becker33@llnl.gov>
This commit is contained in:
parent
79610ce80e
commit
ebf4c8b445
@ -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(
|
||||
|
Loading…
Reference in New Issue
Block a user