mirror of
ssh://git.janware.com/janware/proj/jw-pkg
synced 2026-04-24 09:13:37 +02:00
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 <jan@janware.com>
This commit is contained in:
parent
4e1ec7eaf6
commit
fc6af091eb
1 changed files with 11 additions and 2 deletions
|
|
@ -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]:
|
||||
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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue