diff options
author | 2024-02-13 14:31:01 -0500 | |
---|---|---|
committer | 2024-02-16 20:12:49 +0000 | |
commit | c0300517671076db453204c796637e206bf977e5 (patch) | |
tree | cdcba2e4019cdf1758b5e1b311120c5fe4392bdd | |
parent | dependencies.py: create DependencyKind enum (diff) | |
download | gentoolkit-c0300517671076db453204c796637e206bf977e5.tar.gz gentoolkit-c0300517671076db453204c796637e206bf977e5.tar.bz2 gentoolkit-c0300517671076db453204c796637e206bf977e5.zip |
dependencies.py: unify get_*depend methods
Instead of having separate functions for each DEPEND kind, the unified
method returns a dict with all of the packages *DEPEND values inside
of it. The dict can be indexed with a string or a field of the
DependencyKind enum.
This will be espeically useful for a future change that adds the
ability to filter out specific DEPEND kinds from the query.
The Dependencies class did not search IDEPEND dependencies, the
unified method searches all dependency kinds defined in the
DependencyKind enum, which includes IDEPEND!
Signed-off-by: John Turner <jturner.usa@gmail.com>
Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r-- | pym/gentoolkit/dependencies.py | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/pym/gentoolkit/dependencies.py b/pym/gentoolkit/dependencies.py index dd30312..4564d8c 100644 --- a/pym/gentoolkit/dependencies.py +++ b/pym/gentoolkit/dependencies.py @@ -11,7 +11,9 @@ __all__ = ("Dependencies",) # Imports # ======= +import itertools from enum import StrEnum +from typing import List, Dict import portage from portage.dep import paren_reduce @@ -100,22 +102,19 @@ class Dependencies(Query): except portage.exception.InvalidPackageName as err: raise errors.GentoolkitInvalidCPV(err) - def get_depend(self, **kwargs): - """Get the contents of DEPEND and parse it with self.parser.""" - return self._get_depend(("DEPEND",), **kwargs) + def get_raw_depends(self) -> str: + return self._get_depend([depkind for depkind in DependencyKind], raw=True) - def get_pdepend(self, **kwargs): - """Get the contents of PDEPEND and parse it with self.parser.""" - return self._get_depend(("PDEPEND",), **kwargs) + def get_depends(self) -> Dict[DependencyKind, List[Atom]]: + depends = dict() + for depkind in DependencyKind: + depend = self._get_depend([depkind]) + depends[depkind] = depend + return depends - def get_rdepend(self, **kwargs): - """Get the contents of RDEPEND and parse it with self.parser.""" - return self._get_depend(("RDEPEND",), **kwargs) - - def get_all_depends(self, **kwargs): - """Get the contents of ?DEPEND and parse it with self.parser.""" - env_vars = ("DEPEND", "PDEPEND", "RDEPEND", "BDEPEND") - return self._get_depend(env_vars, **kwargs) + def get_all_depends(self) -> List[Atom]: + # flatten Dict[DependencyKind, List[Atom]] into a List[Atom] + return list(itertools.chain.from_iterable(self.get_depends().values())) def graph_depends( self, @@ -246,8 +245,7 @@ class Dependencies(Query): pkgdep = None for pkgdep in pkgset: - raw_depends = pkgdep.get_all_depends(raw=True) - if self.cp not in raw_depends: + if self.cp not in pkgdep.get_raw_depends(): # fast path for obviously non-matching packages. This saves # us the work of instantiating a whole Atom() for *every* # dependency of *every* package in pkgset. @@ -255,7 +253,7 @@ class Dependencies(Query): try: all_depends = depcache[pkgdep] except KeyError: - all_depends = uniqify(pkgdep.get_all_depends()) + all_depends = pkgdep.get_all_depends() depcache[pkgdep] = all_depends dep_is_displayed = False |