@@ -107,6 +107,26 @@ def _iterexamples(media_types, example_preference, examples_from_schemas):
107107 yield content_type , example
108108
109109
110+ def _get_markers_from_object (oas_object , schema ):
111+ """Retrieve a bunch of OAS object markers."""
112+
113+ markers = []
114+
115+ if schema .get ("type" ):
116+ type_ = schema ["type" ]
117+ if schema .get ("format" ):
118+ type_ = f"{ type_ } :{ schema ['format' ]} "
119+ markers .append (type_ )
120+
121+ if oas_object .get ("required" ):
122+ markers .append ("required" )
123+
124+ if oas_object .get ("deprecated" ):
125+ markers .append ("deprecated" )
126+
127+ return markers
128+
129+
110130class HttpdomainRenderer (abc .RestructuredTextRenderer ):
111131 """Render OpenAPI v3 using `sphinxcontrib-httpdomain` extension."""
112132
@@ -229,7 +249,6 @@ def render_parameter(self, parameter):
229249 kinds = CaseInsensitiveDict (
230250 {"path" : "param" , "query" : "queryparam" , "header" : "reqheader" }
231251 )
232- markers = []
233252 schema = parameter .get ("schema" , {})
234253
235254 if "content" in parameter :
@@ -247,25 +266,14 @@ def render_parameter(self, parameter):
247266 )
248267 return
249268
250- if schema .get ("type" ):
251- type_ = schema ["type" ]
252- if schema .get ("format" ):
253- type_ = f"{ type_ } :{ schema ['format' ]} "
254- markers .append (type_ )
255-
256- if parameter .get ("required" ):
257- markers .append ("required" )
258-
259- if parameter .get ("deprecated" ):
260- markers .append ("deprecated" )
261-
262269 yield f":{ kinds [parameter ['in' ]]} { parameter ['name' ]} :"
263270
264271 if parameter .get ("description" ):
265272 yield from indented (
266273 self ._convert_markup (parameter ["description" ]).strip ().splitlines ()
267274 )
268275
276+ markers = _get_markers_from_object (parameter , schema )
269277 if markers :
270278 markers = ", " .join (markers )
271279 yield f":{ kinds [parameter ['in' ]]} type { parameter ['name' ]} : { markers } "
@@ -342,26 +350,14 @@ def render_response(self, status_code, response):
342350 .splitlines ()
343351 )
344352
345- markers = []
346353 schema = header_value .get ("schema" , {})
347354 if "content" in header_value :
348355 # According to OpenAPI v3 spec, 'content' in this case may
349356 # have one and only one entry. Hence casting its values to
350357 # list is not expensive and should be acceptable.
351358 schema = list (header_value ["content" ].values ())[0 ].get ("schema" , {})
352359
353- if schema .get ("type" ):
354- type_ = schema ["type" ]
355- if schema .get ("format" ):
356- type_ = f"{ type_ } :{ schema ['format' ]} "
357- markers .append (type_ )
358-
359- if header_value .get ("required" ):
360- markers .append ("required" )
361-
362- if header_value .get ("deprecated" ):
363- markers .append ("deprecated" )
364-
360+ markers = _get_markers_from_object (header_value , schema )
365361 if markers :
366362 markers = ", " .join (markers )
367363 yield f":resheadertype { header_name } : { markers } "
0 commit comments