Source code for datumaro.components.cli_plugin

# Copyright (C) 2020-2021 Intel Corporation
#
# SPDX-License-Identifier: MIT

from typing import List, Type
import argparse
import logging as log

from datumaro.cli.util import MultilineFormatter
from datumaro.util import to_snake_case

_plugin_types = None
[docs]def plugin_types() -> List[Type['CliPlugin']]: global _plugin_types if _plugin_types is None: from datumaro.components.converter import Converter from datumaro.components.extractor import Extractor, Importer, Transform from datumaro.components.launcher import Launcher from datumaro.components.validator import Validator _plugin_types = [Launcher, Extractor, Transform, Importer, Converter, Validator] return _plugin_types
[docs]def remove_plugin_type(s): for t in {'transform', 'extractor', 'converter', 'launcher', 'importer', 'validator'}: s = s.replace('_' + t, '') return s
class _PluginNameDescriptor: def __get__(self, obj, objtype=None): if not objtype: objtype = type(obj) return remove_plugin_type(to_snake_case(objtype.__name__))
[docs]class CliPlugin: NAME = _PluginNameDescriptor() @staticmethod def _get_doc(cls): doc = getattr(cls, '__doc__', "") if doc: if any(getattr(t, '__doc__', '') == doc for t in plugin_types()): doc = '' return doc
[docs] @classmethod def build_cmdline_parser(cls, **kwargs): args = { 'prog': cls.NAME, 'description': cls._get_doc(cls), 'formatter_class': MultilineFormatter, } args.update(kwargs) return argparse.ArgumentParser(**args)
[docs] @classmethod def parse_cmdline(cls, args=None): if args and args[0] == '--': args = args[1:] parser = cls.build_cmdline_parser() args = parser.parse_args(args) args = vars(args) log.debug("Parsed parameters: \n\t%s", '\n\t'.join('%s: %s' % (k, v) for k, v in args.items())) return args