def get_value_with_source(self, layer=None):
        """Returns a tuple of the value's source and the value at the specified
        layer. If no layer is specified then the outer layer is used.

        Parameters
        ----------
        layer : str
            Name of the layer to use. If None then the outermost where the value
            exists will be used.

        Raises
        ------
        KeyError
            If the value is not set for the specified layer
        """
        if layer:
            return self._values[layer]

        for layer in reversed(self._layers):
            if layer in self._values:
                return self._values[layer]
        raise KeyError(layer)
Returns a tuple of the value's source and the value at the specified
        layer. If no layer is specified then the outer layer is used.

        Parameters
        ----------
        layer : str
            Name of the layer to use. If None then the outermost where the value
            exists will be used.

        Raises
        ------
        KeyError
            If the value is not set for the specified layer