def get_attribute(self, app=None, key=None):
        path = 'getattribute'
        if app is not None:
            path += '/' + parse.quote(app, '')
            if key is not None:
                path += '/' + parse.quote(self._encode_string(key), '')
        res = self._make_ocs_request(
            'GET',
            self.OCS_SERVICE_PRIVATEDATA,
            path
        )
        if res.status_code == 200:
            tree = ET.fromstring(res.content)
            self._check_ocs_status(tree)
            values = []
            for element in tree.find('data').iter('element'):
                app_text = element.find('app').text
                key_text = element.find('key').text
                value_text = element.find('value').text or ''
                if key is None:
                    if app is None:
                        values.append((app_text, key_text, value_text))
                    else:
                        values.append((key_text, value_text))
                else:
                    return value_text
            if len(values) == 0 and key is not None:
                return None
            return values
        raise HTTPResponseError(res)