Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)