Skip to content

Commit 7de882b

Browse files
committed
Add function to retrieve markers from OAS object
So far the very same logic, the one that retrieves markers out from OAS object, is implemented two times. Once, for request parameters, and once, for response headers. Since I'm about to introduce the very same logic in third place, it's better to move it into helper function.
1 parent 9dbae9c commit 7de882b

File tree

1 file changed

+22
-26
lines changed

1 file changed

+22
-26
lines changed

sphinxcontrib/openapi/renderers/_httpdomain.py

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
110130
class 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

Comments
 (0)