Exemplo n.º 1
0
 def test_response_metadata_on_json_request(self):
     parser = parsers.JSONParser()
     response = b'{"Str": "mystring"}'
     headers = {'x-amzn-requestid': 'request-id'}
     output_shape = model.StructureShape(
         'OutputShape', {
             'type': 'structure',
             'members': {
                 'Str': {
                     'shape': 'StringType',
                 }
             }
         }, model.ShapeResolver({'StringType': {
             'type': 'string'
         }}))
     parsed = parser.parse(
         {
             'body': response,
             'headers': headers,
             'status_code': 200
         }, output_shape)
     # Note that the response metadata is normalized to match the query
     # protocol, even though this is not how it appears in the output.
     self.assertEqual(
         parsed, {
             'Str': 'mystring',
             'ResponseMetadata': {
                 'RequestId': 'request-id',
                 'HTTPStatusCode': 200,
                 'HTTPHeaders': headers
             }
         })
Exemplo n.º 2
0
 def test_metadata_always_exists_for_json(self):
     # ResponseMetadata is used for more than just the request id. It
     # should always get populated, even if the request doesn't seem to
     # have an id.
     parser = parsers.JSONParser()
     response = b'{"Str": "mystring"}'
     headers = {}
     output_shape = model.StructureShape(
         'OutputShape', {
             'type': 'structure',
             'members': {
                 'Str': {
                     'shape': 'StringType',
                 }
             }
         }, model.ShapeResolver({'StringType': {
             'type': 'string'
         }}))
     parsed = parser.parse(
         {
             'body': response,
             'headers': headers,
             'status_code': 200
         }, output_shape)
     expected = {
         'Str': 'mystring',
         'ResponseMetadata': {
             'HTTPStatusCode': 200,
             'HTTPHeaders': headers
         }
     }
     self.assertEqual(parsed, expected)
Exemplo n.º 3
0
 def test_response_no_initial_event_stream(self):
     parser = parsers.JSONParser()
     output_shape = model.StructureShape(
         'OutputShape', {
             'type': 'structure',
             'members': {
                 'Payload': {
                     'shape': 'Payload'
                 }
             }
         },
         model.ShapeResolver({
             'Payload': {
                 'type': 'structure',
                 'members': [],
                 'eventstream': True
             }
         }))
     with self.assertRaises(parsers.ResponseParserError):
         response_dict = {
             'status_code': 200,
             'headers': {},
             'body': RawResponse(b''),
             'context': {
                 'operation_name': 'TestOperation'
             }
         }
         parser.parse(response_dict, output_shape)
Exemplo n.º 4
0
 def test_empty_json_response(self):
     headers = {'x-amzn-requestid': 'request-id'}
     # Output shape of None represents no output shape in the model.
     output_shape = None
     parser = parsers.JSONParser()
     parsed = parser.parse(
         {'body': b'', 'headers': headers, 'status_code': 200},
         output_shape)
     self.assertEqual(
         parsed,
         {'ResponseMetadata': {'RequestId': 'request-id',
                               'HTTPStatusCode': 200}})
Exemplo n.º 5
0
 def test_can_parse_float_timestamps(self):
     # The type "timestamp" can come back as both an integer or as a float.
     # We need to make sure we handle the case where the timestamp comes
     # back as a float.  It might make sense to move this to protocol tests.
     output_shape = model.Shape(shape_name='datetime',
                                shape_model={'type': 'timestamp'})
     parser = parsers.JSONParser()
     timestamp_as_float = b'1407538750.49'
     expected_parsed = datetime.datetime(
         2014, 8, 8, 22, 59, 10, 490000, tzinfo=tzutc())
     parsed = parser.parse(
         {'body': timestamp_as_float,
          'headers': [],
          'status_code': 200}, output_shape)
     self.assertEqual(parsed, expected_parsed)
Exemplo n.º 6
0
 def test_can_parse_json_modeled_fields(self):
     body = (b'{"ModeledField":"Some modeled field",'
             b'"Message":"Some message",'
             b'"__type": "Prefix#SomeError"}')
     parser = parsers.JSONParser()
     response_dict = {
         'status_code': 400,
         'headers': {},
         'body': body,
     }
     parsed = parser.parse(response_dict, self.error_shape)
     expected_parsed = {
         'ModeledField': 'Some modeled field',
     }
     self.assertEqual(parsed, expected_parsed)
Exemplo n.º 7
0
 def test_response_metadata_errors_alternate_form_json_protocol(self):
     # Sometimes there is no '#' in the __type.  We need to be
     # able to parse this error message as well.
     parser = parsers.JSONParser()
     response = {
         "body": b"""
             {"__type":"ValidationException",
              "message":"this is a message"}
             """,
         "status_code": 400,
         "headers": {
             "x-amzn-requestid": "request-id"
         }
     }
     parsed = parser.parse(response, None)
     self.assertIn('Error', parsed)
     self.assertEqual(parsed['Error']['Message'], 'this is a message')
     self.assertEqual(parsed['Error']['Code'], 'ValidationException')
Exemplo n.º 8
0
    def test_response_metadata_errors_for_json_protocol(self):
        parser = parsers.JSONParser()
        response = {
            "body": b"""
                {"__type":"amazon.foo.validate#ValidationException",
                 "message":"this is a message"}
                """,
            "status_code": 400,
            "headers": {
                "x-amzn-requestid": "request-id"
            }
        }
        parsed = parser.parse(response, None)
        # Even (especially) on an error condition, the
        # ResponseMetadata should be populated.
        self.assertIn('ResponseMetadata', parsed)
        self.assertEqual(parsed['ResponseMetadata']['RequestId'], 'request-id')

        self.assertIn('Error', parsed)
        self.assertEqual(parsed['Error']['Message'], 'this is a message')
        self.assertEqual(parsed['Error']['Code'], 'ValidationException')
Exemplo n.º 9
0
 def create_parser(self):
     return parsers.JSONParser()