From 7174e6a60ab86ceda9b4d49a05ba6d1a6dcedda7 Mon Sep 17 00:00:00 2001 From: Joel Collins Date: Tue, 31 Dec 2019 16:19:50 +0000 Subject: [PATCH] First test of @use_args decorator --- .../api/v2/views/actions/camera.py | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/openflexure_microscope/api/v2/views/actions/camera.py b/openflexure_microscope/api/v2/views/actions/camera.py index fe2a707d..ba4b1ebe 100644 --- a/openflexure_microscope/api/v2/views/actions/camera.py +++ b/openflexure_microscope/api/v2/views/actions/camera.py @@ -1,6 +1,8 @@ from openflexure_microscope.api.utilities import get_bool, JsonResponse from openflexure_microscope.common.flask_labthings.resource import Resource from openflexure_microscope.common.flask_labthings.find import find_device +from openflexure_microscope.common.flask_labthings.decorators import use_args +from openflexure_microscope.common.flask_labthings import fields from openflexure_microscope.utilities import filter_dict from openflexure_microscope.api.v2.views.captures import capture_schema @@ -14,18 +16,21 @@ class CaptureAPI(Resource): Create a new image capture. """ - def post(self): + @use_args( + { + "filename": fields.String(), + "temporary": fields.Boolean(missing=False), + "use_video_port": fields.Boolean(missing=False), + "bayer": fields.Boolean(missing=False), + "metadata": fields.Dict(missing={}), + "tags": fields.List(fields.String, missing=[]), + "resize": fields.Dict(missing=None), # TODO: Validate keys + } + ) + def post(self, args): microscope = find_device("openflexure_microscope") - payload = JsonResponse(request) - filename = payload.param("filename") - temporary = payload.param("temporary", default=False, convert=bool) - use_video_port = payload.param("use_video_port", default=False, convert=bool) - bayer = payload.param("bayer", default=True, convert=bool) - metadata = payload.param("metadata", default={}, convert=dict) - tags = payload.param("tags", default=[], convert=list) - - resize = payload.param("size", default=None) + resize = args.get("resize", None) if resize: if ("width" in resize) and ("height" in resize): resize = ( @@ -37,20 +42,25 @@ class CaptureAPI(Resource): # Explicitally acquire lock (prevents empty files being created if lock is unavailable) with microscope.camera.lock: - output = microscope.camera.new_image(temporary=temporary, filename=filename) + output = microscope.camera.new_image( + temporary=args.get("temporary"), filename=args.get("filename") + ) microscope.camera.capture( - output.file, use_video_port=use_video_port, resize=resize, bayer=bayer + output.file, + use_video_port=args.get("use_video_port"), + resize=resize, + bayer=args.get("bayer"), ) # Inject system metadata output.put_metadata(microscope.metadata, system=True) # Insert custom metadata - output.put_metadata(metadata) + output.put_metadata(args.get("metadata")) # Insert custom tags - output.put_tags(tags) + output.put_tags(args.get("tags")) return capture_schema.jsonify(output)