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()
|
||||
# mark compiler as depended-on by the packages that use it
|
||||
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.append((dep.package, True))
|
||||
|
@ -56,6 +56,7 @@
|
||||
import re
|
||||
import sys
|
||||
import warnings
|
||||
from typing import Tuple
|
||||
|
||||
import ruamel.yaml as yaml
|
||||
|
||||
@ -653,8 +654,9 @@ def __repr__(self):
|
||||
|
||||
|
||||
@lang.lazy_lexicographic_ordering
|
||||
class DependencySpec(object):
|
||||
"""DependencySpecs connect two nodes in the DAG, and contain deptypes.
|
||||
class DependencySpec:
|
||||
"""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:
|
||||
|
||||
@ -662,20 +664,20 @@ class DependencySpec(object):
|
||||
- link: is linked to and added to compiler flags.
|
||||
- run: needs to be in the PATH for the package to run.
|
||||
|
||||
Fields:
|
||||
- spec: Spec depended on by parent.
|
||||
- parent: Spec that depends on `spec`.
|
||||
- deptypes: list of strings, representing dependency relationships.
|
||||
Args:
|
||||
parent: starting node of the edge
|
||||
spec: ending node of the edge.
|
||||
deptypes: list of strings, representing dependency relationships.
|
||||
"""
|
||||
|
||||
__slots__ = "parent", "spec", "deptypes"
|
||||
|
||||
def __init__(self, parent, spec, deptypes):
|
||||
def __init__(self, parent: "Spec", spec: "Spec", *, deptypes: dp.DependencyArgument):
|
||||
self.parent = parent
|
||||
self.spec = spec
|
||||
self.deptypes = dp.canonical_deptype(deptypes)
|
||||
|
||||
def update_deptypes(self, deptypes):
|
||||
def update_deptypes(self, deptypes: dp.DependencyArgument) -> bool:
|
||||
deptypes = set(deptypes)
|
||||
deptypes.update(self.deptypes)
|
||||
deptypes = tuple(sorted(deptypes))
|
||||
@ -684,10 +686,10 @@ def update_deptypes(self, deptypes):
|
||||
self.deptypes = deptypes
|
||||
return changed
|
||||
|
||||
def copy(self):
|
||||
return DependencySpec(self.parent, self.spec, self.deptypes)
|
||||
def copy(self) -> "DependencySpec":
|
||||
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))
|
||||
|
||||
def _cmp_iter(self):
|
||||
@ -695,17 +697,17 @@ def _cmp_iter(self):
|
||||
yield self.spec.name if self.spec else None
|
||||
yield self.deptypes
|
||||
|
||||
def __str__(self):
|
||||
def __str__(self) -> str:
|
||||
return "%s %s--> %s" % (
|
||||
self.parent.name if self.parent else None,
|
||||
self.deptypes,
|
||||
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
|
||||
|
||||
def flip(self):
|
||||
def flip(self) -> "DependencySpec":
|
||||
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)
|
||||
return
|
||||
|
||||
edge = DependencySpec(self, dependency_spec, deptype)
|
||||
edge = DependencySpec(self, dependency_spec, deptypes=deptype)
|
||||
self._dependencies.add(edge)
|
||||
dependency_spec._dependents.add(edge)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user