commit: 9110374e5cfd83970f0f11a64a2a1b83a08c68be Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Wed Jan 18 11:06:57 2023 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Wed Jan 18 11:06:57 2023 +0000 URL: https://gitweb.gentoo.org/proj/gentoopm.git/commit/?id=9110374e
repo: Support getting licenses Signed-off-by: Michał Górny <mgorny <AT> gentoo.org> gentoopm/basepm/repo.py | 18 ++++++++++++++++++ gentoopm/basepm/stack.py | 12 +++++++++++- gentoopm/pkgcorepm/repo.py | 8 +++++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/gentoopm/basepm/repo.py b/gentoopm/basepm/repo.py index 960ee88..d10e81e 100644 --- a/gentoopm/basepm/repo.py +++ b/gentoopm/basepm/repo.py @@ -3,6 +3,7 @@ # (c) 2011-2023 Michał Górny <[email protected]> # Released under the terms of the 2-clause BSD license. +import os import os.path import typing @@ -113,6 +114,12 @@ class ArchDesc(typing.NamedTuple): stability: typing.Optional[str] = None +class LicenseDesc(typing.NamedTuple): + """License information""" + + name: str + + class PMEbuildRepository(PMRepository, FillMissingComparisons): """ Base abstract class for an ebuild repository (on livefs). @@ -212,6 +219,17 @@ class PMEbuildRepository(PMRepository, FillMissingComparisons): return arches + @property + def licenses(self) -> dict[str, LicenseDesc]: + try: + return { + name: LicenseDesc(name) for name + in os.listdir(Path(self.path) / "licenses") + if not name.startswith(".") + } + except FileNotFoundError: + return {} + @abstractmethod def __lt__(self, other): pass diff --git a/gentoopm/basepm/stack.py b/gentoopm/basepm/stack.py index 868fb81..864af37 100644 --- a/gentoopm/basepm/stack.py +++ b/gentoopm/basepm/stack.py @@ -3,7 +3,9 @@ # (c) 2011 Michał Górny <[email protected]> # Released under the terms of the 2-clause BSD license. -from .repo import PMRepository, GlobalUseFlag, UseExpand, ArchDesc +from .repo import (PMRepository, GlobalUseFlag, UseExpand, ArchDesc, + LicenseDesc, + ) from .pkgset import PMPackageSet @@ -47,6 +49,14 @@ class PMRepoStackWrapper(PMRepository): ret.update(r.arches) return ret + @property + def licenses(self) -> dict[str, LicenseDesc]: + """Get dict of known licenses""" + ret = {} + for r in self._repos: + ret.update(r.licenses) + return ret + class PMFilteredStackPackageSet(PMPackageSet): """ diff --git a/gentoopm/pkgcorepm/repo.py b/gentoopm/pkgcorepm/repo.py index e2e32ee..22174cd 100644 --- a/gentoopm/pkgcorepm/repo.py +++ b/gentoopm/pkgcorepm/repo.py @@ -16,7 +16,7 @@ except ImportError: from pkgcore.ebuild.repository import _UnconfiguredTree as UnconfiguredTree from ..basepm.repo import (PMRepository, PMRepositoryDict, PMEbuildRepository, - GlobalUseFlag, UseExpand, ArchDesc, + GlobalUseFlag, UseExpand, ArchDesc, LicenseDesc, ) from ..util import FillMissingComparisons @@ -170,6 +170,12 @@ class PkgCoreEbuildRepo(PkgCoreRepository, PMEbuildRepository, FillMissingCompar stability=stability) return arches + @property + def licenses(self) -> dict[str, LicenseDesc]: + return { + name: LicenseDesc(name) for name in self._repo.licenses.licenses + } + def __lt__(self, other): return other._index < self._index
