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