Returns a boolean representing whether these commands can be
    grouped together or not.

    A few things are taken into account for this decision:

    For ``set`` commands:

    - Are all arguments other than the key/value the same?

    For ``delete`` and ``get`` commands:

    - Are all arguments other than the key the same?

def can_group_commands(command, next_command):
    """
    Returns a boolean representing whether these commands can be
    grouped together or not.

    A few things are taken into account for this decision:

    For ``set`` commands:

    - Are all arguments other than the key/value the same?

    For ``delete`` and ``get`` commands:

    - Are all arguments other than the key the same?
    """
    multi_capable_commands = ('get', 'set', 'delete')

    if next_command is None:
        return False

    name = command.get_name()

    # TODO: support multi commands
    if name not in multi_capable_commands:
        return False

    if name != next_command.get_name():
        return False

    # if the shared args (key, or key/value) do not match, we cannot group
    if grouped_args_for_command(command) != grouped_args_for_command(next_command):
        return False

    # If the keyword arguments do not much (e.g. key_prefix, or timeout on set)
    # then we cannot group
    if command.get_kwargs() != next_command.get_kwargs():
        return False

    return True