def compose_args(self, action_name, in_argdict):
        """Compose the argument list from an argument dictionary, with
        respect for default values.

        Args:
            action_name (str): The name of the action to be performed.
            in_argdict (dict): Arguments as a dict, eg
                ``{'InstanceID': 0, 'Speed': 1}. The values
                can be a string or something with a string representation.

        Returns:
            list: a list of ``(name, value)`` tuples.

        Raises:
            `AttributeError`: If this service does not support the action.
            `ValueError`: If the argument lists do not match the action
                signature.
        """

        for action in self.actions:
            if action.name == action_name:
                # The found 'action' will be visible from outside the loop
                break
        else:
            raise AttributeError('Unknown Action: {0}'.format(action_name))

        # Check for given argument names which do not occur in the expected
        # argument list
        # pylint: disable=undefined-loop-variable
        unexpected = set(in_argdict) - \
            set(argument.name for argument in action.in_args)
        if unexpected:
            raise ValueError(
                "Unexpected argument '{0}'. Method signature: {1}"
                .format(next(iter(unexpected)), str(action))
            )

        # List the (name, value) tuples for each argument in the argument list
        composed = []
        for argument in action.in_args:
            name = argument.name
            if name in in_argdict:
                composed.append((name, in_argdict[name]))
                continue
            if name in self.DEFAULT_ARGS:
                composed.append((name, self.DEFAULT_ARGS[name]))
                continue
            if argument.vartype.default is not None:
                composed.append((name, argument.vartype.default))
            raise ValueError(
                "Missing argument '{0}'. Method signature: {1}"
                .format(argument.name, str(action))
            )
        return composed
Compose the argument list from an argument dictionary, with
        respect for default values.

        Args:
            action_name (str): The name of the action to be performed.
            in_argdict (dict): Arguments as a dict, eg
                ``{'InstanceID': 0, 'Speed': 1}. The values
                can be a string or something with a string representation.

        Returns:
            list: a list of ``(name, value)`` tuples.

        Raises:
            `AttributeError`: If this service does not support the action.
            `ValueError`: If the argument lists do not match the action
                signature.