Skip to content

Commit fa10acf

Browse files
author
Joel Collins
committed
More thorough description inheritance
1 parent dfab585 commit fa10acf

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

labthings/server/spec/apispec.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,21 @@ def rule_to_apispec_path(rule: Rule, view: View, spec: APISpec):
2020
Returns:
2121
dict: APISpec `path` funtion argument dictionary
2222
"""
23+
if hasattr(view, "__apispec__"):
24+
description = getattr(view, "__apispec__").get( # Look for view class API spec
25+
"description"
26+
) or get_docstring( # Or view class docstring
27+
view
28+
)
29+
else:
30+
description = get_docstring(view) # Or view class docstring
31+
2332
params = {
2433
"path": rule_to_path(rule),
25-
"operations": view_to_apispec_operations(view, spec),
26-
"description": get_docstring(view),
34+
"operations": view_to_apispec_operations(
35+
view, spec, view_description=description
36+
),
37+
"description": description,
2738
"summary": get_summary(view),
2839
}
2940

@@ -40,7 +51,7 @@ def rule_to_apispec_path(rule: Rule, view: View, spec: APISpec):
4051
return params
4152

4253

43-
def view_to_apispec_operations(view: View, spec: APISpec):
54+
def view_to_apispec_operations(view: View, spec: APISpec, view_description=None):
4455
"""Generate APISpec `operations` argument from a flask View
4556
4657
Args:
@@ -60,19 +71,25 @@ def view_to_apispec_operations(view: View, spec: APISpec):
6071
for method in View.methods:
6172
if hasattr(view, method):
6273
ops[method] = {}
74+
method_function = getattr(view, method)
75+
description = (
76+
getattr(method_function, "__apispec__").get(
77+
"description"
78+
) # Look for APISpec
79+
or get_docstring(method_function) # Or function docstring
80+
or view_description # Or inherit from view class
81+
)
6382

6483
rupdate(
6584
ops[method],
6685
{
67-
"description": get_docstring(getattr(view, method)),
68-
"summary": get_summary(getattr(view, method)),
86+
"description": description,
87+
"summary": get_summary(method_function),
6988
"tags": inherited_tags,
7089
},
7190
)
7291

73-
rupdate(
74-
ops[method], method_to_apispec_operation(getattr(view, method), spec)
75-
)
92+
rupdate(ops[method], method_to_apispec_operation(method_function, spec))
7693

7794
return ops
7895

0 commit comments

Comments
 (0)