@@ -194,6 +194,14 @@ class ResponseParserError(Exception):
194194 pass
195195
196196
197+ def box_decorator (func ):
198+ def handle_box (self , shape , value ):
199+ if shape .boxed and value is None :
200+ return None
201+ return func (self , shape , value )
202+ return handle_box
203+
204+
197205class ResponseParser :
198206 """Base class for response parsing.
199207
@@ -340,10 +348,13 @@ def _do_modeled_error_parse(self, response, shape, parsed):
340348 f"{ self .__class__ .__name__ } ._do_modeled_error_parse"
341349 )
342350
351+ BOXABLE_PRIMITIVE_TYPES = ["long" , "integer" , "boolean" ]
343352 def _parse_shape (self , shape , node ):
344353 handler = getattr (
345354 self , f'_handle_{ shape .type_name } ' , self ._default_handle
346355 )
356+ if shape .type_name in self .BOXABLE_PRIMITIVE_TYPES and shape .boxed and node is None :
357+ return None
347358 return handler (shape , node )
348359
349360 def _handle_list (self , shape , node ):
@@ -1331,10 +1342,7 @@ def _handle_boolean(self, shape, value):
13311342 return ensure_boolean (value )
13321343
13331344 def _handle_integer (self , shape , value ):
1334- if value is None :
1335- return None
1336- else :
1337- return int (value )
1345+ return int (value )
13381346
13391347 def _handle_float (self , shape , value ):
13401348 return float (value )
0 commit comments