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