Source code for pcapkit.vendor.__main__

# -*- coding: utf-8 -*-
"""CLI for web crawlers."""

import argparse
import importlib
import sys
import warnings

import pcapkit.vendor as vendor_module
from pcapkit.utilities.warnings import InvalidVendorWarning, VendorRuntimeWarning
from pcapkit.vendor import __all__ as vendor_all

#: version string
__version__ = '0.15.1.post1'


[docs]def get_parser(): """CLI argument parser. Returns: argparse.ArgumentParser: Argument parser. """ parser = argparse.ArgumentParser(prog='pcapkit-vendor', description='update constant enumerations') parser.add_argument('-V', '--version', action='version', version=__version__) parser.add_argument('target', action='store', nargs=argparse.REMAINDER, help='update targets, supply none to update all') return parser
[docs]def run(vendor): """Script runner. Args: vendor (Type[Vendor]): Subclass of :class:`~pcapkit.vendor.default.Vendor` from :mod:`pcapkit.vendor`. Warns: VendorRuntimeWarning: If failed to initiate the ``vendor`` class. """ print(f'{vendor.__module__}.{vendor.__name__}: {vendor.__doc__}') try: vendor() except Exception as error: warnings.warn(f'{vendor.__module__}.{vendor.__name__} <{error!r}>', VendorRuntimeWarning, stacklevel=2)
[docs]def main(): """Entrypoint. Warns: InvalidVendorWarning: If vendor target not found in :mod:`pcapkit.vendor` module. """ parser = get_parser() args = parser.parse_args() target_list = list() for target in args.target: try: module = importlib.import_module(f'pcapkit.vendor.{target}') target_list.extend(getattr(module, name) for name in module.__all__) except ImportError: warnings.showwarning(f'invalid vendor updater: {target}', InvalidVendorWarning, filename=__file__, lineno=0, line=' '.join(sys.argv)) if not target_list: if args.target: parser.error('missing valid targets') target_list.extend(getattr(vendor_module, name) for name in vendor_all) # with multiprocessing.Pool() as pool: # pool.map(run, target_list) [run(vendor) for vendor in target_list] # pylint: disable=expression-not-assigned
if __name__ == "__main__": sys.exit(main())