Beispiel #1
0
def from_response(response,
                  message=None,
                  traceback=None,
                  method=None,
                  url=None):
    """Return an HttpError instance based on response from httplib/requests."""

    error_body = {}
    if message:
        error_body['message'] = message
    if traceback:
        error_body['details'] = traceback

    if hasattr(response, 'status') and not hasattr(response, 'status_code'):
        # NOTE(akurilin): These modifications around response object give
        # ability to get all necessary information in method `from_response`
        # from common code, which expecting response object from `requests`
        # library instead of object from `httplib/httplib2` library.
        response.status_code = response.status
        response.headers = {
            'Content-Type': response.getheader('content-type', "")
        }

    if hasattr(response, 'status_code'):
        # NOTE(jiangfei): These modifications allow SessionClient
        # to handle faultstring.
        response.json = lambda: {'error': error_body}

    return exceptions.from_response(response, method=method, url=url)
def from_response(response, message=None, traceback=None, method=None,
                  url=None):
    """Return an HttpError instance based on response from httplib/requests."""

    error_body = {}
    if message:
        error_body['message'] = message
    if traceback:
        error_body['details'] = traceback

    if hasattr(response, 'status') and not hasattr(response, 'status_code'):
        # NOTE(akurilin): These modifications around response object give
        # ability to get all necessary information in method `from_response`
        # from common code, which expecting response object from `requests`
        # library instead of object from `httplib/httplib2` library.
        response.status_code = response.status
        response.headers = {
            'Content-Type': response.getheader('content-type', "")}

    if hasattr(response, 'status_code'):
        # NOTE(jiangfei): These modifications allow SessionClient
        # to handle faultstring.
        response.json = lambda: {'error': error_body}

    return exceptions.from_response(response, method=method, url=url)
Beispiel #3
0
    def test_from_response_with_text_response_format_with_no_body(self):
        method = "GET"
        url = "/fake-wsme"
        status_code = http_client.UNAUTHORIZED

        ex = exceptions.from_response(
            FakeResponse(status_code=status_code,
                         headers={"Content-Type": "text/html"}), method, url)
        self.assertIsInstance(ex, exceptions.Unauthorized)
        self.assertEqual('', ex.details)
        self.assertEqual(method, ex.method)
        self.assertEqual(url, ex.url)
        self.assertEqual(status_code, ex.http_status)
    def test_from_response_with_text_response_format_with_no_body(self):
        method = "GET"
        url = "/fake-wsme"
        status_code = 401

        ex = exceptions.from_response(
            FakeResponse(status_code=status_code, headers={"Content-Type": "text/html"}), method, url
        )
        self.assertIsInstance(ex, exceptions.Unauthorized)
        self.assertEqual("", ex.details)
        self.assertEqual(method, ex.method)
        self.assertEqual(url, ex.url)
        self.assertEqual(status_code, ex.http_status)
    def test_from_response_with_text_response_format(self):
        method = "GET"
        url = "/fake-wsme"
        status_code = 400
        text_data1 = "error_message: fake message"

        ex = exceptions.from_response(
            FakeResponse(status_code=status_code, headers={"Content-Type": "text/html"}, text=text_data1), method, url
        )
        self.assertIsInstance(ex, exceptions.BadRequest)
        self.assertEqual(text_data1, ex.details)
        self.assertEqual(method, ex.method)
        self.assertEqual(url, ex.url)
        self.assertEqual(status_code, ex.http_status)
Beispiel #6
0
    def test_from_response_with_text_response_format(self):
        method = "GET"
        url = "/fake-wsme"
        status_code = http_client.BAD_REQUEST
        text_data1 = "error_message: fake message"

        ex = exceptions.from_response(
            FakeResponse(status_code=status_code,
                         headers={"Content-Type": "text/html"},
                         text=text_data1), method, url)
        self.assertIsInstance(ex, exceptions.BadRequest)
        self.assertEqual(text_data1, ex.details)
        self.assertEqual(method, ex.method)
        self.assertEqual(url, ex.url)
        self.assertEqual(status_code, ex.http_status)
 def assert_exception(
     self, ex_cls, method, url, status_code, json_data, error_msg=None, error_details=None, check_description=True
 ):
     ex = exceptions.from_response(
         FakeResponse(status_code=status_code, headers={"Content-Type": "application/json"}, json_data=json_data),
         method,
         url,
     )
     self.assertIsInstance(ex, ex_cls)
     if check_description:
         expected_msg = error_msg or json_data["error"]["message"]
         expected_details = error_details or json_data["error"]["details"]
         self.assertEqual(expected_msg, ex.message)
         self.assertEqual(expected_details, ex.details)
     self.assertEqual(method, ex.method)
     self.assertEqual(url, ex.url)
     self.assertEqual(status_code, ex.http_status)
Beispiel #8
0
 def assert_exception(self,
                      ex_cls,
                      method,
                      url,
                      status_code,
                      json_data,
                      error_msg=None,
                      error_details=None,
                      check_description=True):
     ex = exceptions.from_response(
         FakeResponse(status_code=status_code,
                      headers={"Content-Type": "application/json"},
                      json_data=json_data), method, url)
     self.assertIsInstance(ex, ex_cls)
     if check_description:
         expected_msg = error_msg or json_data["error"]["message"]
         expected_details = error_details or json_data["error"]["details"]
         self.assertEqual(expected_msg, ex.message)
         self.assertEqual(expected_details, ex.details)
     self.assertEqual(method, ex.method)
     self.assertEqual(url, ex.url)
     self.assertEqual(status_code, ex.http_status)