diff --git a/openflexure_microscope/api/v2/views/actions/camera.py b/openflexure_microscope/api/v2/views/actions/camera.py index 70b00380..69e6016b 100644 --- a/openflexure_microscope/api/v2/views/actions/camera.py +++ b/openflexure_microscope/api/v2/views/actions/camera.py @@ -42,6 +42,7 @@ class CaptureAPI(Resource): ) @marshal_with(capture_schema) @doc_response(200, description="Capture successful") + @doc(tags=["foo"]) def post(self, args): """ Create a new capture diff --git a/openflexure_microscope/common/flask_labthings/spec.py b/openflexure_microscope/common/flask_labthings/spec.py index 2ccfc042..7a85c55f 100644 --- a/openflexure_microscope/common/flask_labthings/spec.py +++ b/openflexure_microscope/common/flask_labthings/spec.py @@ -37,6 +37,12 @@ def view2path(rule: str, 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 = {} for method in Resource.methods: if hasattr(view, method): @@ -47,6 +53,7 @@ def view2operations(view: Resource, spec: APISpec): { "description": get_docstring(getattr(view, method)), "summary": get_summary(getattr(view, method)), + "tags": inherited_tags, }, ) diff --git a/openflexure_microscope/common/labthings_core/utilities.py b/openflexure_microscope/common/labthings_core/utilities.py index 1d0ae94a..20a90796 100644 --- a/openflexure_microscope/common/labthings_core/utilities.py +++ b/openflexure_microscope/common/labthings_core/utilities.py @@ -19,10 +19,18 @@ def get_summary(obj): def rupdate(d, u): 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: d[k] = {} d[k] = rupdate(d.get(k, {}), v) + # If not a list or dictionary, overwrite old value with new value else: d[k] = v return d