Source code for deriva.core.base_cli

import argparse
import logging

from . import init_logging, __version__
from .utils.version_utils import get_installed_version


[docs]class BaseCLI(object): def __init__(self, description, epilog, version=__version__, hostname_required=False, config_file_required=False): self.version = get_installed_version(version) self.parser = argparse.ArgumentParser(description=description, epilog=epilog) self.parser.add_argument( '--version', action='version', version=self.version, help="Print version and exit.") self.parser.add_argument( '--quiet', action="store_true", help="Suppress logging output.") self.parser.add_argument( '--debug', action="store_true", help="Enable debug logging output.") self.parser.add_argument( '--credential-file', metavar='<file>', help="Optional path to a credential file.") token_group = self.parser.add_mutually_exclusive_group() token_group.add_argument( "--token", metavar="<auth-token>", help="Authorization bearer token.") token_group.add_argument( "--oauth2-token", metavar="<oauth2-token>", help="OAuth2 bearer token.") self.parser.add_argument( 'host' if hostname_required else '--host', metavar='<host>', help="Fully qualified host name.") self.parser.add_argument( 'config_file' if config_file_required else '--config-file', metavar='<config file>', help="Path to a configuration file.")
[docs] def remove_options(self, options): for option in options: for action in self.parser._actions: if option in vars(action)['option_strings']: self.parser._handle_conflict_resolve(None, [(option, action)]) break
[docs] def parse_cli(self): args = self.parser.parse_args() init_logging(level=logging.CRITICAL if args.quiet else (logging.DEBUG if args.debug else logging.INFO)) return args
[docs]class KeyValuePairArgs(argparse.Action): def __init__(self, option_strings, dest, nargs=None, **kwargs): self._nargs = nargs super(KeyValuePairArgs, self).__init__(option_strings, dest, nargs=nargs, **kwargs) def __call__(self, parser, namespace, values, option_string=None): kwargs = dict() for kv in values: arg = kv.split("=", 1) if len(arg) < 2: raise ValueError( "Invalid key-value argument %s: Key-Value pairs must be given in the form <key=value>." % arg) kwargs[arg[0]] = arg[1] setattr(namespace, self.dest, kwargs)