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))