From fc6af091eb92749cafe0ace2b884f555d074fdc6 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Tue, 21 Apr 2026 11:36:21 +0200 Subject: [PATCH] lib.Distro.select(): Add filter parameter Add an optional "filter: PackageFilter|None" parameter to .select(), and if it's not None, call a new version of ._select() with it. ._select() is not abstract anylonger. Its default implementation filters the results of ._select_by_name(), can be reimplemented by deriving classes for better performance, but doesn't have to. Signed-off-by: Jan Lindemann --- src/python/jw/pkg/lib/Distro.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/python/jw/pkg/lib/Distro.py b/src/python/jw/pkg/lib/Distro.py index 35cfe602..b2a3cc47 100644 --- a/src/python/jw/pkg/lib/Distro.py +++ b/src/python/jw/pkg/lib/Distro.py @@ -11,6 +11,7 @@ if TYPE_CHECKING: import abc, importlib, re +from .PackageFilter import PackageFilter from .ExecContext import ExecContext from .base import Result, InputMode from .Package import Package @@ -326,8 +327,16 @@ class Distro(abc.ABC): async def _select_by_name(self, names: Iterable[str]) -> Iterable[Package]: pass - async def select(self, names: Iterable[str] = []) -> Iterable[Package]: - return await self._select_by_name(names) + async def _select(self, names: Iterable[str], filter: PackageFilter) -> Iterable[Package]: + assert filter, "No filter in _select()" + return [p for p in await self._select_by_name(names) if filter.match(p)] + + async def select(self, names: Iterable[str] = [], filter: PackageFilter|None=None) -> Iterable[Package]: + if not filter: + filter = self.__default_pkg_filter + if not filter: + return await self._select_by_name(names) + return await self._select(names, filter) # -- install