Add type hints to DependencySpec (#35021)

* DependencySpec: add type hints

* DependencySpec: make deptypes a keyword only argument
This commit is contained in:
Massimiliano Culpo 2023-01-20 09:53:57 +01:00 committed by GitHub
parent fb7c8d1768
commit 8f8394a829
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 16 deletions

View File

@ -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))

View File

@ -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)