Source code for datumaro.components.cli_plugin

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

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

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