Source code for pkgcheck.api
"""Implements pkgcheck API to be exported."""
from functools import partial
import lazy_object_proxy
from snakeoil.contexts import patch
from snakeoil.mappings import AttrAccessible
from . import objects
from .base import PkgcheckException
[docs]
def scan(args=None, /, *, base_args=None):
    """Run ``pkgcheck scan`` using given arguments.
    Args:
        args (:obj:`list`, optional): command-line args for ``pkgcheck scan``
        base_args (:obj:`list`, optional): pkgcore-specific command-line args for ``pkgcheck``
    Raises:
        PkgcheckException on failure
    Returns:
        iterator of Result objects
    """
    # avoid circular imports
    from .pipeline import Pipeline
    from .scripts import pkgcheck
    def parser_exit(parser, status=0, message=None):
        """Stub function to handle argparse errors.
        Exit calls with no message arguments signify truncated scans, i.e. no
        restriction targets are specified.
        """
        if message:
            raise PkgcheckException(message.strip())
    if args is None:
        args = []
    if base_args is None:
        base_args = []
    with patch("argparse.ArgumentParser.exit", parser_exit):
        options = pkgcheck.argparser.parse_args(base_args + ["scan"] + args)
    return Pipeline(options) 
def _keywords():
    """Proxy to delay module imports until keywords are requested."""
    class Keywords(AttrAccessible):
        """Mapping of keyword names to related result classes.
        Result classes are also accessible via accessing their keyword
        name as a attribute.
        """
    return Keywords(objects.KEYWORDS)
keywords = lazy_object_proxy.Proxy(partial(_keywords))