1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
# SPDX-License-Identifer: GPL-3.0-or-later
class PackageFilter:
def __init__(self) -> None:
self.include_source_name: set[str] = set()
self.exclude_source_name: set[str] = set()
self.include_binary_packages: set[str] = set()
self.exclude_binary_packages: set[str] = set()
self.include_sections: set[str] = set()
self.exclude_sections: set[str] = set()
self.include_tags: set[str] = set()
self.exclude_tags: set[str] = set()
def package_allowed(
self,
source_name: str,
package_name: str | None = None,
section: str | None = None,
tags: set[str] | None = None,
) -> bool:
if self.include_source_name and source_name not in self.include_source_name:
return False
if self.exclude_source_name and source_name in self.exclude_source_name:
return False
if package_name:
if (
self.include_binary_packages
and package_name not in self.include_binary_packages
):
return False
if (
self.exclude_binary_packages
and package_name in self.exclude_binary_packages
):
return False
if section:
if self.include_sections and not any(
s == section for s in self.include_sections
):
return False
if self.exclude_sections and any(
s == section for s in self.exclude_sections
):
return False
if tags:
tags = self._split_tags(tags)
if self.include_tags and not any(t in tags for t in self.include_tags):
return False
if self.exclude_tags and any(t in tags for t in self.exclude_tags):
return False
return True
def _split_tags(self, tags: set[str]) -> set[str]:
return tags.union({t.split("::")[0] for t in tags})
|