From 33ff46e7b303d5a3cdf6e28d41cbb6fd11f03c9c Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Tue, 21 Apr 2026 11:13:20 +0200 Subject: [PATCH] lib.PackageFilter: Add module Add a package filter abstraction designed to replace the package filter string tossed around various functions througout jw-pkg. Signed-off-by: Jan Lindemann --- src/python/jw/pkg/lib/PackageFilter.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/python/jw/pkg/lib/PackageFilter.py diff --git a/src/python/jw/pkg/lib/PackageFilter.py b/src/python/jw/pkg/lib/PackageFilter.py new file mode 100644 index 00000000..cbe02e1b --- /dev/null +++ b/src/python/jw/pkg/lib/PackageFilter.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +import abc, re + +from .Package import Package + +class PackageFilter(abc.ABC): + + @abc.abstractmethod + def _match(self, package: Package) -> bool: + raise NotImplementedError() + + def match(self, package: Package) -> bool: + return self._match(package) + +class PackageFilterString(PackageFilter): + + def __init__(self, definition: str) -> None: + # -- Poor man's parsing for now + url_rx_str = re.sub(r'^\s*url\s*=~\s*', '', definition) + if url_rx_str == definition: + raise Exception(f'Unsupported filter string "{definition}"') + self.__definition = url_rx_str + + def _match(self, package: Package) -> bool: + return re.search(self.__definition, package.url) is not None