Ejemplo n.º 1
0
def enable_aliases_autocomplete(_, **kwargs):
    """
    Enable aliases autocomplete by injecting aliases into Azure CLI tab completion list.
    """
    external_completions = kwargs.get('external_completions', [])
    prefix = kwargs.get('cword_prefix', [])
    cur_commands = kwargs.get('comp_words', [])
    alias_table = get_alias_table()
    # Transform aliases if they are in current commands,
    # so parser can get the correct subparser when chaining aliases
    _transform_cur_commands(cur_commands, alias_table=alias_table)

    for alias, alias_command in filter_aliases(alias_table):
        if alias.startswith(
                prefix) and alias.strip() != prefix and _is_autocomplete_valid(
                    cur_commands, alias_command):
            # Only autocomplete the first word because alias is space-delimited
            external_completions.append(alias)

    # Append spaces if necessary (https://github.com/kislyuk/argcomplete/blob/master/argcomplete/__init__.py#L552-L559)
    prequote = kwargs.get('cword_prequote', '')
    continuation_chars = "=/:"
    if len(external_completions) == 1 and external_completions[0][
            -1] not in continuation_chars and not prequote:
        external_completions[0] += ' '
Ejemplo n.º 2
0
def enable_aliases_autocomplete_interactive(_, **kwargs):
    """
    Enable aliases autocomplete on interactive mode by injecting aliases in the command tree.
    """
    subtree = kwargs.get('subtree', None)
    if not subtree or not hasattr(subtree, 'children'):
        return

    for alias, alias_command in filter_aliases(get_alias_table()):
        # Only autocomplete the first word because alias is space-delimited
        if subtree.in_tree(alias_command.split()):
            subtree.add_child(CommandBranch(alias))
Ejemplo n.º 3
0
def remove_alias(alias_name):
    """
    Remove an alias.

    Args:
        alias_name: The name of the alias to be removed.
    """
    alias_table = get_alias_table()
    if alias_name not in alias_table.sections():
        raise CLIError(ALIAS_NOT_FOUND_ERROR.format(alias_name))
    alias_table.remove_section(alias_name)
    _commit_change(alias_table)
Ejemplo n.º 4
0
def enable_aliases_autocomplete_interactive(_, **kwargs):
    """
    Enable aliases autocomplete on interactive mode by injecting aliases in the command tree.
    """
    subtree = kwargs.get('subtree', None)
    if not subtree or not hasattr(subtree, 'children'):
        return

    for alias, alias_command in filter_aliases(get_alias_table()):
        # Only autocomplete the first word because alias is space-delimited
        if subtree.in_tree(alias_command.split()):
            subtree.add_child(CommandBranch(alias))
Ejemplo n.º 5
0
def remove_alias(alias_names):
    """
    Remove an alias.

    Args:
        alias_name: The name of the alias to be removed.
    """
    alias_table = get_alias_table()
    for alias_name in alias_names:
        if alias_name not in alias_table.sections():
            raise CLIError(ALIAS_NOT_FOUND_ERROR.format(alias_name))
        alias_table.remove_section(alias_name)
    _commit_change(alias_table)
Ejemplo n.º 6
0
def import_aliases(alias_source):
    """
    Import aliases from a file or an URL.

    Args:
        alias_source: The source of the alias. It can be a filepath or an URL.
    """
    alias_table = get_alias_table()
    if is_url(alias_source):
        alias_source = retrieve_file_from_url(alias_source)
        alias_table.read(alias_source)
        os.remove(alias_source)
    else:
        alias_table.read(alias_source)
    _commit_change(alias_table)
Ejemplo n.º 7
0
def create_alias(alias_name, alias_command):
    """
    Create an alias.

    Args:
        alias_name: The name of the alias.
        alias_command: The command that the alias points to.
    """
    alias_name, alias_command = alias_name.strip(), alias_command.strip()
    alias_table = get_alias_table()
    if alias_name not in alias_table.sections():
        alias_table.add_section(alias_name)

    alias_table.set(alias_name, 'command', alias_command)
    _commit_change(alias_table)
Ejemplo n.º 8
0
def import_aliases(alias_source):
    """
    Import aliases from a file or an URL.

    Args:
        alias_source: The source of the alias. It can be a filepath or an URL.
    """
    alias_table = get_alias_table()
    if is_url(alias_source):
        alias_source = retrieve_file_from_url(alias_source)
        alias_table.read(alias_source)
        os.remove(alias_source)
    else:
        alias_table.read(alias_source)
    _commit_change(alias_table)
Ejemplo n.º 9
0
def create_alias(alias_name, alias_command):
    """
    Create an alias.

    Args:
        alias_name: The name of the alias.
        alias_command: The command that the alias points to.
    """
    alias_name, alias_command = alias_name.strip(), alias_command.strip()
    alias_table = get_alias_table()
    if alias_name not in alias_table.sections():
        alias_table.add_section(alias_name)

    alias_table.set(alias_name, 'command', alias_command)
    _commit_change(alias_table)
Ejemplo n.º 10
0
def _transform_cur_commands(cur_commands, alias_table=None):
    """
    Transform any aliases in cur_commands into their respective commands.

    Args:
        alias_table: The alias table.
        cur_commands: current commands typed in the console.
    """
    transformed = []
    alias_table = alias_table if alias_table else get_alias_table()
    for cmd in cur_commands:
        if cmd in alias_table.sections() and alias_table.has_option(cmd, 'command'):
            transformed += alias_table.get(cmd, 'command').split()
        else:
            transformed.append(cmd)
    cur_commands[:] = transformed
Ejemplo n.º 11
0
def _transform_cur_commands(cur_commands, alias_table=None):
    """
    Transform any aliases in cur_commands into their respective commands.

    Args:
        alias_table: The alias table.
        cur_commands: current commands typed in the console.
    """
    transformed = []
    alias_table = alias_table if alias_table else get_alias_table()
    for cmd in cur_commands:
        if cmd in alias_table.sections() and alias_table.has_option(
                cmd, 'command'):
            transformed += alias_table.get(cmd, 'command').split()
        else:
            transformed.append(cmd)
    cur_commands[:] = transformed
Ejemplo n.º 12
0
def list_alias():
    """
    List all registered aliases.

    Returns:
        An array of  dictionary containing the alias and the command that it points to.
    """
    alias_table = get_alias_table()
    output = []
    for alias in alias_table.sections():
        if alias_table.has_option(alias, 'command'):
            output.append({
                'alias': alias,
                # Remove unnecessary whitespaces
                'command': ' '.join(alias_table.get(alias, 'command').split())
            })

    return output
Ejemplo n.º 13
0
def export_aliases(export_path=None, exclusions=None):
    """
    Export all registered aliases to a given path, as an INI configuration file.

    Args:
        export_path: The path of the alias configuration file to export to.
        exclusions: Space-separated aliases excluded from export.
    """
    if not export_path:
        export_path = os.path.abspath(ALIAS_FILE_NAME)

    alias_table = get_alias_table()
    for exclusion in exclusions or []:
        if exclusion not in alias_table.sections():
            raise CLIError(ALIAS_NOT_FOUND_ERROR.format(exclusion))
        alias_table.remove_section(exclusion)

    _commit_change(alias_table, export_path=export_path, post_commit=False)
    logger.warning(POST_EXPORT_ALIAS_MSG, export_path)  # pylint: disable=superfluous-parens
Ejemplo n.º 14
0
def export_aliases(export_path=None, exclusions=None):
    """
    Export all registered aliases to a given path, as an INI configuration file.

    Args:
        export_path: The path of the alias configuration file to export to.
        exclusions: Space-separated aliases excluded from export.
    """
    if not export_path:
        export_path = os.path.abspath(ALIAS_FILE_NAME)

    alias_table = get_alias_table()
    for exclusion in exclusions or []:
        if exclusion not in alias_table.sections():
            raise CLIError(ALIAS_NOT_FOUND_ERROR.format(exclusion))
        alias_table.remove_section(exclusion)

    _commit_change(alias_table, export_path=export_path, post_commit=False)
    logger.warning(POST_EXPORT_ALIAS_MSG, export_path)  # pylint: disable=superfluous-parens
Ejemplo n.º 15
0
def list_alias():
    """
    List all registered aliases.

    Returns:
        An array of  dictionary containing the alias and the command that it points to.
    """
    alias_table = get_alias_table()
    output = []
    for alias in alias_table.sections():
        if alias_table.has_option(alias, 'command'):
            output.append({
                'alias':
                alias,
                # Remove unnecessary whitespaces
                'command':
                ' '.join(alias_table.get(alias, 'command').split())
            })

    return output
Ejemplo n.º 16
0
def enable_aliases_autocomplete(_, **kwargs):
    """
    Enable aliases autocomplete by injecting aliases into Azure CLI tab completion list.
    """
    external_completions = kwargs.get('external_completions', [])
    prefix = kwargs.get('cword_prefix', [])
    cur_commands = kwargs.get('comp_words', [])
    alias_table = get_alias_table()
    # Transform aliases if they are in current commands,
    # so parser can get the correct subparser when chaining aliases
    _transform_cur_commands(cur_commands, alias_table=alias_table)

    for alias, alias_command in filter_aliases(alias_table):
        if alias.startswith(prefix) and alias.strip() != prefix and _is_autocomplete_valid(cur_commands, alias_command):
            # Only autocomplete the first word because alias is space-delimited
            external_completions.append(alias)

    # Append spaces if necessary (https://github.com/kislyuk/argcomplete/blob/master/argcomplete/__init__.py#L552-L559)
    prequote = kwargs.get('cword_prequote', '')
    continuation_chars = "=/:"
    if len(external_completions) == 1 and external_completions[0][-1] not in continuation_chars and not prequote:
        external_completions[0] += ' '
Ejemplo n.º 17
0
def get_alias_completer(cmd, prefix, namespace, **kwargs):  # pylint: disable=unused-argument
    """
    An argument completer for alias name.
    """
    return get_alias_table().sections()
Ejemplo n.º 18
0
def get_alias_completer(cmd, prefix, namespace, **kwargs):  # pylint: disable=unused-argument
    """
    An argument completer for alias name.
    """
    return get_alias_table().sections()