You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
|
|
# Copyright (C) 2020 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import argparse
|
|
|
|
from datumaro.cli.util import MultilineFormatter
|
|
from datumaro.util import to_snake_case
|
|
|
|
|
|
class CliPlugin:
|
|
@staticmethod
|
|
def _get_name(cls):
|
|
return getattr(cls, 'NAME',
|
|
remove_plugin_type(to_snake_case(cls.__name__)))
|
|
|
|
@staticmethod
|
|
def _get_doc(cls):
|
|
return getattr(cls, '__doc__', "")
|
|
|
|
@classmethod
|
|
def build_cmdline_parser(cls, **kwargs):
|
|
args = {
|
|
'prog': cls._get_name(cls),
|
|
'description': cls._get_doc(cls),
|
|
'formatter_class': MultilineFormatter,
|
|
}
|
|
args.update(kwargs)
|
|
|
|
return argparse.ArgumentParser(**args)
|
|
|
|
@classmethod
|
|
def from_cmdline(cls, args=None):
|
|
if args and args[0] == '--':
|
|
args = args[1:]
|
|
parser = cls.build_cmdline_parser()
|
|
args = parser.parse_args(args)
|
|
return vars(args)
|
|
|
|
def remove_plugin_type(s):
|
|
for t in {'transform', 'extractor', 'converter', 'launcher', 'importer'}:
|
|
s = s.replace('_' + t, '')
|
|
return s
|