Source code for pkgcore.repository.configured

"""
wrap a repository, binding configuration to pkgs returned from the repository
"""

__all__ = ("tree",)

from functools import partial

import snakeoil.klass
from snakeoil.klass import DirProxy, GetAttrProxy

from ..operations.repo import operations_proxy
from ..package.conditionals import make_wrapper
from . import prototype


[docs] class tree(prototype.tree): configured = True operations_kls = operations_proxy def __init__(self, raw_repo, wrapped_attrs, pkg_kls_injections=()): """ :param raw_repo: repo to wrap :type raw_repo: :obj:`pkgcore.repository.prototype.tree` :param wrapped_attrs: sequence of attrs to wrap for each pkg """ # yes, we're intentionally not using tree's init. # not perfect I know. self.raw_repo = raw_repo self.wrapped_attrs = wrapped_attrs self._pkg_klass = self._mk_kls(pkg_kls_injections) def _mk_kls(self, pkg_kls_injections): return make_wrapper( self, self.configurable, self.wrapped_attrs, kls_injections=pkg_kls_injections, ) def _get_pkg_kwds(self, pkg): raise NotImplementedError
[docs] def package_class(self, pkg): return self._pkg_klass(pkg, **self._get_pkg_kwds(pkg))
@property def pkg_masks(self): # required to override empty pkg_masks inherited from prototype.tree return self.raw_repo.pkg_masks # add explicit alises to 'show' ABCMeta that the methods are addressed. _get_categories = snakeoil.klass.alias_method("raw_repo._get_categories") _get_packages = snakeoil.klass.alias_method("raw_repo._get_packages") _get_versions = snakeoil.klass.alias_method("raw_repo._get_versions") __getattr__ = GetAttrProxy("raw_repo") __dir__ = DirProxy("raw_repo")
[docs] def itermatch(self, restrict, **kwds): kwds.setdefault("force", True) o = kwds.get("pkg_cls") if o is not None: kwds["pkg_cls"] = partial(self.package_class, o) else: kwds["pkg_cls"] = self.package_class return self.raw_repo.itermatch(restrict, **kwds)
itermatch.__doc__ = prototype.tree.itermatch.__doc__.replace( "@param", "@keyword" ).replace(":keyword restrict:", ":param restrict:") def __getitem__(self, key): obj = self.package_class(self.raw_repo[key]) if not obj.is_supported: raise KeyError(key) return obj def __repr__(self): return "<%s.%s raw_repo=%r wrapped=%r @%#8x>" % ( self.__class__.__module__, self.__class__.__name__, getattr(self, "raw_repo", "unset"), list(getattr(self, "wrapped_attrs", {}).keys()), id(self), )