| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- # Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- #
- # Modifications made by Cloudera are:
- # Copyright (c) 2016 Cloudera, Inc. All rights reserved.
- #
- # Licensed under the Apache License, Version 2.0 (the "License"). You
- # may not use this file except in compliance with the License. A copy of
- # the License is located at
- #
- # http://aws.amazon.com/apache2.0/
- #
- # or in the "license" file accompanying this file. This file is
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
- # ANY KIND, either express or implied. See the License for the specific
- # language governing permissions and limitations under the License.
- try:
- from collections import OrderedDict
- except ImportError:
- from ordereddict import OrderedDict # Python 2.6
- import json
- class Serializer(object):
- DEFAULT_ENCODING = 'utf-8'
- def serialize_to_request(self, parameters, operation_model):
- # Don't serialize any parameter with a None value.
- filtered_parameters = OrderedDict(
- (k, v) for k, v in parameters.items() if v is not None)
- serialized = {}
- serialized_body = OrderedDict()
- if len(filtered_parameters) != 0:
- self._serialize(serialized_body, filtered_parameters, None)
- serialized['body'] = json.dumps(serialized_body).encode(self.DEFAULT_ENCODING)
- return serialized
- def _serialize(self, serialized, value, shape, key=None):
- self._default_serialize(serialized, value, shape, key)
- def _serialize_type_object(self, serialized, value, shape, key):
- if key is not None:
- # If a key is provided, this is a result of a recursive call, so we
- # need to add a new child dict as the value of the passed in dict.
- # Below we will add all the structure members to the new serialized
- # dictionary we just created.
- serialized[key] = OrderedDict()
- serialized = serialized[key]
- for member_key, member_value in value.items():
- member_shape = shape.members[member_key]
- self._serialize(serialized, member_value, member_shape, member_key)
- def _serialize_type_array(self, serialized, value, shape, key):
- array_obj = []
- serialized[key] = array_obj
- for array_item in value:
- wrapper = {}
- # JSON list serialization is the only case where we aren't setting
- # a key on a dict. We handle this by using a __current__ key on a
- # wrapper dict to serialize each list item before appending it to
- # the serialized list.
- self._serialize(wrapper, array_item, shape.member, "__current__")
- array_obj.append(wrapper["__current__"])
- def _default_serialize(self, serialized, value, shape, key):
- if key:
- serialized[key] = value
- else:
- for member_key, member_value in value.items():
- serialized[member_key] = member_value
|