@@ -194,13 +194,12 @@ def serialize_to_request(self, parameters, operation_model):
194
194
'X-Version' : operation_model .metadata ['apiVersion' ],
195
195
}
196
196
)
197
- body_params = {}
197
+ body_params = self . MAP_TYPE ()
198
198
199
199
if shape is not None :
200
200
self ._serialize (body_params , parameters , shape )
201
201
else :
202
202
self ._serialize_not_shape (body_params , parameters )
203
-
204
203
return self ._serialize_data (serialized , body_params )
205
204
206
205
def _serialize_not_shape (self , data , parameters ):
@@ -349,6 +348,48 @@ def _serialize_data(self, serialized, data):
349
348
return serialized
350
349
351
350
351
+ class CustomBodySerializer (QuerySerializer ):
352
+
353
+ @property
354
+ def headers (self ):
355
+ return {"Accept" : 'application/json' }
356
+
357
+ def _serialize_not_shape (self , data , parameters ):
358
+
359
+ data .update (parameters )
360
+
361
+ def serialize_to_request (self , parameters , operation_model ):
362
+ shape = operation_model .input_shape
363
+ serialized = self ._create_default_request ()
364
+ serialized ['method' ] = operation_model .http .get ('method' ,
365
+ self .DEFAULT_METHOD )
366
+ # The query serializer only deals with body params so
367
+ # that's what we hand off the _serialize_* methods.
368
+ serialized ['headers' ].update (
369
+ {
370
+ 'X-Action' : operation_model .name ,
371
+ 'X-Version' : operation_model .metadata ['apiVersion' ],
372
+ }
373
+ )
374
+ body_params = self .MAP_TYPE ()
375
+ if 'Body' in parameters :
376
+ body_params ['body' ] = parameters ['Body' ]
377
+ del parameters
378
+
379
+ if shape is not None :
380
+ self ._serialize (body_params , parameters , shape )
381
+ else :
382
+ self ._serialize_not_shape (body_params , parameters )
383
+ return self ._serialize_data (serialized , body_params )
384
+
385
+ def _serialize_data (self , serialized , data ):
386
+ if 'Body' in data :
387
+ serialized ['body' ] = json .dumps (data ['Body' ]).encode (self .DEFAULT_ENCODING )
388
+ del data ['Body' ]
389
+ serialized ['query_string' ] = data
390
+ return serialized
391
+
392
+
352
393
class JSONSerializer (Serializer ):
353
394
"""
354
395
BASE JSON REQUEST all method with json body
@@ -371,7 +412,7 @@ def serialize_to_request(self, parameters, operation_model):
371
412
'X-Action' : operation_model .name ,
372
413
'X-Version' : operation_model .metadata ['apiVersion' ]
373
414
}
374
- body = {}
415
+ body = self . MAP_TYPE ()
375
416
input_shape = operation_model .input_shape
376
417
if input_shape is not None :
377
418
self ._serialize (body , parameters , input_shape )
@@ -718,4 +759,5 @@ def _default_serialize(self, xmlnode, params, shape, name):
718
759
'json2' : NotGetJsonSerializer ,
719
760
'rest-json' : RestJSONSerializer ,
720
761
'rest-xml' : RestXMLSerializer ,
762
+ 'custom-body' : CustomBodySerializer ,
721
763
}
0 commit comments