Commit 53e5cfd0 authored by Joel Collins's avatar Joel Collins
Browse files

Streamlined POST methods with get_from_payload()

parent 1dad25ee
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -5,6 +5,14 @@ def parse_payload(request):
    return state


def get_from_payload(payload, key, default=None):
    """Check if a key exists in a JSON/dictionary payload, and returns it."""
    if key in payload:
        return payload[key]
    else:
        return default


def gen(camera):
    """Video streaming generator function."""
    while True:
+8 −22
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ from flask import (
from flask.views import MethodView
from werkzeug.exceptions import default_exceptions

from openflexure_microscope.api.utilities import parse_payload, gen, get_bool
from openflexure_microscope.api.utilities import parse_payload, get_from_payload, gen, get_bool

from openflexure_microscope import Microscope
from openflexure_microscope.camera.pi import StreamingCamera
@@ -353,29 +353,15 @@ class CaptureListAPI(MicroscopeView):
        state = parse_payload(request)
        logging.info(state)

        # TODO: Roll all of these ugly if statements into a method for getting payload elements
        if 'filename' in state:
            filename = state['filename']
        else:
            filename = None

        if 'keep_on_disk' in state:
            keep_on_disk = bool(state['keep_on_disk'])
        else:
            keep_on_disk = True
        filename = str(get_from_payload(state, 'filename', default=None))
        keep_on_disk = bool(get_from_payload(state, 'keep_on_disk', default=True))
        use_video_port = bool(get_from_payload(state, 'use_video_port', default=False))

        if 'use_video_port' in state:
            use_video_port = bool(state['use_video_port'])
        else:
            use_video_port = False

        if 'size' in state:
            if 'width' in state['size'] and 'height' in state['size']:
                resize = (state['size']['width'], state['size']['height'])
        size_arg = get_from_payload(state, 'size', default=None)
        if 'width' in size_arg and 'height' in size_arg:
            resize = (int(size_arg['width']), int(size_arg['height']))
        else:
            abort(400)
        else:
            resize = None

        capture_obj = self.microscope.camera.capture(
            write_to_file=True,  # Always write data to disk when using API