def run(cloud, parser, _help): group = get_command_group(list(parser.unparsed), parser.arguments) if not group: #parser.parser.print_help() parser.print_help() _groups_help(parser.arguments) exit(0) nonargs = [term for term in parser.unparsed if not term.startswith('-')] set_command_params(nonargs) global _best_match _best_match = [] _cnf = parser.arguments['config'] group_spec = _cnf.get('global', '%s_cli' % group) spec_module = _load_spec_module(group_spec, parser.arguments, '_commands') if spec_module is None: raise CLIUnknownCommand( 'Could not find specs for %s commands' % group, details=[ 'Make sure %s is a valid command group' % group, 'Refer to kamaki documentation for setting custom command', 'groups or overide existing ones']) cmd_tree = _get_cmd_tree_from_spec(group, spec_module._commands) if _best_match: cmd = cmd_tree.get_command('_'.join(_best_match)) else: cmd = _get_best_match_from_cmd_tree(cmd_tree, parser.unparsed) _best_match = cmd.path.split('_') if cmd is None: kloger.info('Unexpected error: failed to load command (-d for more)') exit(1) update_parser_help(parser, cmd) if _help or not cmd.is_command: if cmd.cmd_class: parser.required = getattr(cmd.cmd_class, 'required', None) parser.print_help() if getattr(cmd, 'long_help', False): print 'Details:\n', cmd.long_help print_subcommands_help(cmd) exit(0) cls = cmd.cmd_class auth_base = init_cached_authenticator(_cnf, cloud, kloger) if ( cloud) else None executable = cls(parser.arguments, auth_base, cloud) parser.required = getattr(cls, 'required', None) parser.update_arguments(executable.arguments) for term in _best_match: parser.unparsed.remove(term) exec_cmd(executable, parser.unparsed, parser.print_help)
def run(cloud, parser): group = get_command_group(list(parser.unparsed), parser.arguments) if not group: parser.print_help() _groups_help(parser.arguments) exit(0) nonargs = [term for term in parser.unparsed if not term.startswith('-')] set_command_params(nonargs) global _best_match _best_match = [] _cnf = parser.arguments['config'] group_spec = _cnf.get('global', '%s_cli' % group) spec_module = _load_spec_module(group_spec, parser.arguments, 'namespaces') if spec_module is None: raise CLIUnknownCommand( 'Could not find specs for %s commands' % group, details=[ 'Make sure %s is a valid command group' % group, 'Refer to kamaki documentation for setting custom command', 'groups or overide existing ones' ]) # Get command tree from group try: cmd_tree = [t for t in spec_module.namespaces if t.name == group][0] except IndexError: raise CLIUnknownCommand('Unknown command group: %s' % group) cmd = None if _best_match: cmd = cmd_tree.get_command('_'.join(_best_match)) else: match = [term for term in parser.unparsed if not term.startswith('-')] while match: try: cmd = cmd_tree.get_command('_'.join(match)) _best_match = cmd.path.split('_') break except KeyError: match = match[:-1] if cmd is None: kloger.info('Unexpected error: failed to load command (-d for more)') exit(1) update_parser_help(parser, cmd) _help = parser.arguments['help'].value if _help or not cmd.is_command: if cmd.cmd_class: parser.required = getattr(cmd.cmd_class, 'required', None) parser.print_help() if getattr(cmd, 'long_help', False): print 'Details:\n', cmd.long_help print_subcommands_help(cmd) exit(0) cls = cmd.cmd_class astakos, help_message = init_cached_authenticator( _cnf, cloud, kloger) if (cloud) else (None, []) if not astakos: from kamaki.cli import is_non_api if not is_non_api(parser): raise CLIError('Failed to initialize an identity client', importance=3, details=help_message) executable = cls(parser.arguments, astakos, cloud) parser.required = getattr(cls, 'required', None) parser.update_arguments(executable.arguments) for term in _best_match: parser.unparsed.remove(term) exec_cmd(executable, parser.unparsed, parser.print_help)
def run(cloud, parser): group = get_command_group(list(parser.unparsed), parser.arguments) if not group: parser.print_help() _groups_help(parser.arguments) exit(0) nonargs = [term for term in parser.unparsed if not term.startswith('-')] set_command_params(nonargs) global _best_match _best_match = [] _cnf = parser.arguments['config'] group_spec = _cnf.get('global', '%s_cli' % group) spec_module = _load_spec_module(group_spec, parser.arguments, 'namespaces') if spec_module is None: raise CLIUnknownCommand( 'Could not find specs for %s commands' % group, details=[ 'Make sure %s is a valid command group' % group, 'Refer to kamaki documentation for setting custom command', 'groups or overide existing ones']) # Get command tree from group try: cmd_tree = [t for t in spec_module.namespaces if t.name == group][0] except IndexError: raise CLIUnknownCommand('Unknown command group: %s' % group) cmd = None if _best_match: cmd = cmd_tree.get_command('_'.join(_best_match)) else: match = [term for term in parser.unparsed if not term.startswith('-')] while match: try: cmd = cmd_tree.get_command('_'.join(match)) _best_match = cmd.path.split('_') break except KeyError: match = match[:-1] if cmd is None: kloger.info('Unexpected error: failed to load command (-d for more)') exit(1) update_parser_help(parser, cmd) _help = parser.arguments['help'].value if _help or not cmd.is_command: if cmd.cmd_class: parser.required = getattr(cmd.cmd_class, 'required', None) parser.print_help() if getattr(cmd, 'long_help', False): print 'Details:\n', cmd.long_help print_subcommands_help(cmd) exit(0) cls = cmd.cmd_class astakos, help_message = init_cached_authenticator(_cnf, cloud, kloger) if ( cloud) else (None, []) if not astakos: from kamaki.cli import is_non_api if not is_non_api(parser): raise CLIError( 'Failed to initialize an identity client', importance=3, details=help_message) executable = cls(parser.arguments, astakos, cloud) parser.required = getattr(cls, 'required', None) parser.update_arguments(executable.arguments) for term in _best_match: parser.unparsed.remove(term) exec_cmd(executable, parser.unparsed, parser.print_help)