Source code for pkgcore.restrictions.util

"""
restriction related utilities
"""

from snakeoil.sequences import iflatten_func

from . import boolean, packages, restriction


def _is_package_instance(inst):
    return getattr(inst, "type", None) == restriction.package_type and not isinstance(
        inst, boolean.base
    )


[docs] def collect_package_restrictions(restrict, attrs=None, invert=False): """Collect PackageRestriction instances inside a restriction. :param restrict: package instance to scan :param attrs: None (return all package restrictions), or a sequence of specific attrs the package restriction must work against. """ if not isinstance(restrict, (list, tuple)): restrict = [restrict] for r in restrict: if not isinstance(r, restriction.base): raise TypeError( "restrict must be of a restriction.base, " f"not {r.__class__.__class__}: {r!r}" ) i = iflatten_func(restrict, _is_package_instance) if attrs is None: return i attrs = frozenset(attrs) return (r for r in i if invert == attrs.isdisjoint(getattr(r, "attrs", ())))