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
 

Reply via email to