Enable tag inheritance
This commit is contained in:
parent
ed13749abe
commit
eaf2fc5f7d
3 changed files with 17 additions and 1 deletions
|
|
@ -42,6 +42,7 @@ class CaptureAPI(Resource):
|
||||||
)
|
)
|
||||||
@marshal_with(capture_schema)
|
@marshal_with(capture_schema)
|
||||||
@doc_response(200, description="Capture successful")
|
@doc_response(200, description="Capture successful")
|
||||||
|
@doc(tags=["foo"])
|
||||||
def post(self, args):
|
def post(self, args):
|
||||||
"""
|
"""
|
||||||
Create a new capture
|
Create a new capture
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,12 @@ def view2path(rule: str, view: Resource, spec: APISpec):
|
||||||
|
|
||||||
|
|
||||||
def view2operations(view: Resource, spec: APISpec):
|
def view2operations(view: Resource, spec: APISpec):
|
||||||
|
# Operations inherit tags from parent
|
||||||
|
inherited_tags = []
|
||||||
|
if hasattr(view, "__apispec__"):
|
||||||
|
inherited_tags = getattr(view, "__apispec__").get("tags", [])
|
||||||
|
|
||||||
|
# Build dictionary of operations (HTTP methods)
|
||||||
ops = {}
|
ops = {}
|
||||||
for method in Resource.methods:
|
for method in Resource.methods:
|
||||||
if hasattr(view, method):
|
if hasattr(view, method):
|
||||||
|
|
@ -47,6 +53,7 @@ def view2operations(view: Resource, spec: APISpec):
|
||||||
{
|
{
|
||||||
"description": get_docstring(getattr(view, method)),
|
"description": get_docstring(getattr(view, method)),
|
||||||
"summary": get_summary(getattr(view, method)),
|
"summary": get_summary(getattr(view, method)),
|
||||||
|
"tags": inherited_tags,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,18 @@ def get_summary(obj):
|
||||||
|
|
||||||
def rupdate(d, u):
|
def rupdate(d, u):
|
||||||
for k, v in u.items():
|
for k, v in u.items():
|
||||||
if isinstance(v, collections.abc.Mapping):
|
# Merge lists if they're present in both objects
|
||||||
|
if isinstance(v, list):
|
||||||
|
if not k in d:
|
||||||
|
d[k] = []
|
||||||
|
if isinstance(d[k], list):
|
||||||
|
d[k].extend(v)
|
||||||
|
# Recursively merge dictionaries if the element is a dictionary
|
||||||
|
elif isinstance(v, collections.abc.Mapping):
|
||||||
if not k in d:
|
if not k in d:
|
||||||
d[k] = {}
|
d[k] = {}
|
||||||
d[k] = rupdate(d.get(k, {}), v)
|
d[k] = rupdate(d.get(k, {}), v)
|
||||||
|
# If not a list or dictionary, overwrite old value with new value
|
||||||
else:
|
else:
|
||||||
d[k] = v
|
d[k] = v
|
||||||
return d
|
return d
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue