Add type hints to DependencySpec (#35021)
* DependencySpec: add type hints * DependencySpec: make deptypes a keyword only argument
This commit is contained in:
parent
fb7c8d1768
commit
8f8394a829
@ -233,7 +233,7 @@ def _packages_needed_to_bootstrap_compiler(compiler, architecture, pkgs):
|
|||||||
dep.concretize()
|
dep.concretize()
|
||||||
# mark compiler as depended-on by the packages that use it
|
# mark compiler as depended-on by the packages that use it
|
||||||
for pkg in pkgs:
|
for pkg in pkgs:
|
||||||
dep._dependents.add(spack.spec.DependencySpec(pkg.spec, dep, ("build",)))
|
dep._dependents.add(spack.spec.DependencySpec(pkg.spec, dep, deptypes=("build",)))
|
||||||
packages = [(s.package, False) for s in dep.traverse(order="post", root=False)]
|
packages = [(s.package, False) for s in dep.traverse(order="post", root=False)]
|
||||||
|
|
||||||
packages.append((dep.package, True))
|
packages.append((dep.package, True))
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
import ruamel.yaml as yaml
|
import ruamel.yaml as yaml
|
||||||
|
|
||||||
@ -653,8 +654,9 @@ def __repr__(self):
|
|||||||
|
|
||||||
|
|
||||||
@lang.lazy_lexicographic_ordering
|
@lang.lazy_lexicographic_ordering
|
||||||
class DependencySpec(object):
|
class DependencySpec:
|
||||||
"""DependencySpecs connect two nodes in the DAG, and contain deptypes.
|
"""DependencySpecs represent an edge in the DAG, and contain dependency types
|
||||||
|
and information on the virtuals being provided.
|
||||||
|
|
||||||
Dependencies can be one (or more) of several types:
|
Dependencies can be one (or more) of several types:
|
||||||
|
|
||||||
@ -662,20 +664,20 @@ class DependencySpec(object):
|
|||||||
- link: is linked to and added to compiler flags.
|
- link: is linked to and added to compiler flags.
|
||||||
- run: needs to be in the PATH for the package to run.
|
- run: needs to be in the PATH for the package to run.
|
||||||
|
|
||||||
Fields:
|
Args:
|
||||||
- spec: Spec depended on by parent.
|
parent: starting node of the edge
|
||||||
- parent: Spec that depends on `spec`.
|
spec: ending node of the edge.
|
||||||
- deptypes: list of strings, representing dependency relationships.
|
deptypes: list of strings, representing dependency relationships.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = "parent", "spec", "deptypes"
|
__slots__ = "parent", "spec", "deptypes"
|
||||||
|
|
||||||
def __init__(self, parent, spec, deptypes):
|
def __init__(self, parent: "Spec", spec: "Spec", *, deptypes: dp.DependencyArgument):
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.spec = spec
|
self.spec = spec
|
||||||
self.deptypes = dp.canonical_deptype(deptypes)
|
self.deptypes = dp.canonical_deptype(deptypes)
|
||||||
|
|
||||||
def update_deptypes(self, deptypes):
|
def update_deptypes(self, deptypes: dp.DependencyArgument) -> bool:
|
||||||
deptypes = set(deptypes)
|
deptypes = set(deptypes)
|
||||||
deptypes.update(self.deptypes)
|
deptypes.update(self.deptypes)
|
||||||
deptypes = tuple(sorted(deptypes))
|
deptypes = tuple(sorted(deptypes))
|
||||||
@ -684,10 +686,10 @@ def update_deptypes(self, deptypes):
|
|||||||
self.deptypes = deptypes
|
self.deptypes = deptypes
|
||||||
return changed
|
return changed
|
||||||
|
|
||||||
def copy(self):
|
def copy(self) -> "DependencySpec":
|
||||||
return DependencySpec(self.parent, self.spec, self.deptypes)
|
return DependencySpec(self.parent, self.spec, deptypes=self.deptypes)
|
||||||
|
|
||||||
def add_type(self, type):
|
def add_type(self, type: dp.DependencyArgument):
|
||||||
self.deptypes = dp.canonical_deptype(self.deptypes + dp.canonical_deptype(type))
|
self.deptypes = dp.canonical_deptype(self.deptypes + dp.canonical_deptype(type))
|
||||||
|
|
||||||
def _cmp_iter(self):
|
def _cmp_iter(self):
|
||||||
@ -695,17 +697,17 @@ def _cmp_iter(self):
|
|||||||
yield self.spec.name if self.spec else None
|
yield self.spec.name if self.spec else None
|
||||||
yield self.deptypes
|
yield self.deptypes
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self) -> str:
|
||||||
return "%s %s--> %s" % (
|
return "%s %s--> %s" % (
|
||||||
self.parent.name if self.parent else None,
|
self.parent.name if self.parent else None,
|
||||||
self.deptypes,
|
self.deptypes,
|
||||||
self.spec.name if self.spec else None,
|
self.spec.name if self.spec else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
def canonical(self):
|
def canonical(self) -> Tuple[str, str, Tuple[str, ...]]:
|
||||||
return self.parent.dag_hash(), self.spec.dag_hash(), self.deptypes
|
return self.parent.dag_hash(), self.spec.dag_hash(), self.deptypes
|
||||||
|
|
||||||
def flip(self):
|
def flip(self) -> "DependencySpec":
|
||||||
return DependencySpec(parent=self.spec, spec=self.parent, deptypes=self.deptypes)
|
return DependencySpec(parent=self.spec, spec=self.parent, deptypes=self.deptypes)
|
||||||
|
|
||||||
|
|
||||||
@ -1575,7 +1577,7 @@ def add_dependency_edge(self, dependency_spec, deptype):
|
|||||||
edge.add_type(deptype)
|
edge.add_type(deptype)
|
||||||
return
|
return
|
||||||
|
|
||||||
edge = DependencySpec(self, dependency_spec, deptype)
|
edge = DependencySpec(self, dependency_spec, deptypes=deptype)
|
||||||
self._dependencies.add(edge)
|
self._dependencies.add(edge)
|
||||||
dependency_spec._dependents.add(edge)
|
dependency_spec._dependents.add(edge)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user