コード例 #1
0
 def get_items(self):
     """Returns the list of Resource objects when the data contains a
     collection.
     """
     result = []
     for item in self._data.get('collection', []):
         data = utils.wrap_data_response(item)
         result.append(self.__class__(self._api, data))
     return result
コード例 #2
0
    def handle_response(self, response, content):
        """Validate HTTP response."""

        def _validate_status_code(status_code, msg=None, url=None):
            if 200 <= status_code <= 299:
                return True
            elif status_code in (301, 302, 303, 307):
                raise exceptions.Redirection(status_code, msg, url)
            elif status_code == 400:
                raise exceptions.BadRequest(status_code, msg, url)
            elif status_code == 401:
                raise exceptions.UnauthorizedAccess(status_code, msg, url)
            elif status_code == 404:
                raise exceptions.ResourceNotFound(status_code, msg, url)
            elif 500 <= status_code <= 599:
                raise exceptions.ServerError(status_code, msg, url)
            else:
                raise exceptions.ConnectionError(status_code, msg, url)
            return False

        status = response.status_code
        msg = response.reason
        url = response.url
        if _validate_status_code(status, msg, url):
            data = json.loads(content) if content else {}
            status = data.get('status', None)
            if status is None:
                return utils.wrap_data_response(
                    data,
                    headers=utils.extract_headers(
                        response.headers,
                        HTTP_HEADER_PREFIX,
                    )
                )
            msg = data.get('response', '')
            if _validate_status_code(status, msg, url):
                return data