@@ -248,21 +248,23 @@ def _document_nested_structure(self, model, doc):
248
248
"""Recursively documents parameters in nested structures"""
249
249
member_type_name = getattr (model , 'type_name' , None )
250
250
if member_type_name == 'structure' :
251
+ required_members = model .metadata .get ('required' , [])
251
252
for member_name , member_shape in model .members .items ():
253
+ is_required = member_name in required_members
252
254
self ._doc_member (
253
- doc , member_name , member_shape , stack = [model .name ]
255
+ doc , member_name , member_shape , stack = [model .name ], required = is_required
254
256
)
255
257
elif member_type_name == 'list' :
256
- self ._doc_member (doc , '' , model .member , stack = [model .name ])
258
+ self ._doc_member (doc , '' , model .member , stack = [model .name ], required = False )
257
259
elif member_type_name == 'map' :
258
260
key_shape = model .key
259
261
key_name = key_shape .serialization .get ('name' , 'key' )
260
- self ._doc_member (doc , key_name , key_shape , stack = [model .name ])
262
+ self ._doc_member (doc , key_name , key_shape , stack = [model .name ], required = False )
261
263
value_shape = model .value
262
264
value_name = value_shape .serialization .get ('name' , 'value' )
263
- self ._doc_member (doc , value_name , value_shape , stack = [model .name ])
265
+ self ._doc_member (doc , value_name , value_shape , stack = [model .name ], required = False )
264
266
265
- def _doc_member (self , doc , member_name , member_shape , stack ):
267
+ def _doc_member (self , doc , member_name , member_shape , stack , required = False ):
266
268
if member_shape .name in stack :
267
269
# Document the recursion once, otherwise just
268
270
# note the fact that it's recursive and return.
@@ -272,11 +274,11 @@ def _doc_member(self, doc, member_name, member_shape, stack):
272
274
return
273
275
stack .append (member_shape .name )
274
276
try :
275
- self ._do_doc_member (doc , member_name , member_shape , stack )
277
+ self ._do_doc_member (doc , member_name , member_shape , stack , required )
276
278
finally :
277
279
stack .pop ()
278
280
279
- def _do_doc_member (self , doc , member_name , member_shape , stack ):
281
+ def _do_doc_member (self , doc , member_name , member_shape , stack , required = False ):
280
282
docs = member_shape .documentation
281
283
type_name = self ._get_argument_type_name (
282
284
member_shape , member_shape .type_name
@@ -290,22 +292,29 @@ def _do_doc_member(self, doc, member_name, member_shape, stack):
290
292
doc .include_doc_string (docs )
291
293
if is_tagged_union_type (member_shape ):
292
294
self ._add_tagged_union_note (member_shape , doc )
295
+
296
+ if required :
297
+ doc .style .new_paragraph ()
298
+ doc .write ('This parameter is required.' )
299
+
293
300
self ._document_enums (member_shape , doc )
294
301
self ._document_constraints (member_shape , doc )
295
302
doc .style .new_paragraph ()
296
303
member_type_name = member_shape .type_name
297
304
if member_type_name == 'structure' :
305
+ required_members = member_shape .metadata .get ('required' , [])
298
306
for sub_name , sub_shape in member_shape .members .items ():
299
- self ._doc_member (doc , sub_name , sub_shape , stack )
307
+ sub_required = sub_name in required_members
308
+ self ._doc_member (doc , sub_name , sub_shape , stack , required = sub_required )
300
309
elif member_type_name == 'map' :
301
310
key_shape = member_shape .key
302
311
key_name = key_shape .serialization .get ('name' , 'key' )
303
- self ._doc_member (doc , key_name , key_shape , stack )
312
+ self ._doc_member (doc , key_name , key_shape , stack , required = False )
304
313
value_shape = member_shape .value
305
314
value_name = value_shape .serialization .get ('name' , 'value' )
306
- self ._doc_member (doc , value_name , value_shape , stack )
315
+ self ._doc_member (doc , value_name , value_shape , stack , required = False )
307
316
elif member_type_name == 'list' :
308
- self ._doc_member (doc , '' , member_shape .member , stack )
317
+ self ._doc_member (doc , '' , member_shape .member , stack , required = False )
309
318
doc .style .dedent ()
310
319
doc .style .new_paragraph ()
311
320
0 commit comments