def _resolve_attribute(self, attribute):
        """Recursively replaces references to other attributes with their value.

        Args:
            attribute (str): The name of the attribute to resolve.

        Returns:
            str: The resolved value of 'attribute'.

        """
        value = self.attributes[attribute]
        if not value:
            return None
        resolved_value = re.sub('\$\((.*?)\)',self._resolve_attribute_match, value)
        return resolved_value
Recursively replaces references to other attributes with their value.

        Args:
            attribute (str): The name of the attribute to resolve.

        Returns:
            str: The resolved value of 'attribute'.