Commit 95a3abde authored by Joel Collins's avatar Joel Collins
Browse files

Restructured builtin plugins and docstrings

parent 9ca821c2
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -2,25 +2,25 @@ from flask.views import MethodView


class MicroscopeView(MethodView):

    def __init__(self, microscope, **kwargs):
    """
    Create a generic MethodView with a globally available
    microscope object passed as an argument.
    """
    def __init__(self, microscope, **kwargs):

        self.microscope = microscope

        MethodView.__init__(self, **kwargs)


class MicroscopeViewPlugin(MicroscopeView):

    def __init__(self, microscope, plugin=None, **kwargs):
    """
    Create a generic MethodView with a globally available
    microscope object passed as an argument, and a plugin
        reference stored in 'self'. Initially None
    reference stored in 'self'. Initially None.
    """
    def __init__(self, microscope, plugin=None, **kwargs):

        self.plugin = plugin

        MicroscopeView.__init__(self, microscope=microscope, **kwargs)
 No newline at end of file
+4 −14
Original line number Diff line number Diff line
@@ -12,19 +12,9 @@ class IdentifyAPI(MicroscopeViewPlugin):
    """
    def get(self):
        """
        Method to call when an HTTP GET request is made.
        Default plugin to return a plaintext representation of the camera and stage objects.

        .. :quickref: Default plugin; Show representation of camera and stage objects.
        """
        data = self.microscope.plugin.default.identify()  # Call a method from our plugin, using the full route
        return Response(escape(data))
 No newline at end of file


class HelloWorldAPI(MicroscopeViewPlugin):
    """
    An even simpler example API plugin, which just returns static data without using the microscope.
    """
    def get(self):
        """
        Method to call when an HTTP GET request is made.
        """
        data = self.plugin.hello_world()  # Call a method from our plugin, using the MicroscopeViewPlugin.plugin shortcut
        return Response(data)
+1 −9
Original line number Diff line number Diff line
from openflexure_microscope.plugins import MicroscopePlugin

from .api import IdentifyAPI, HelloWorldAPI
from .api import IdentifyAPI


class Plugin(MicroscopePlugin):
@@ -10,7 +10,6 @@ class Plugin(MicroscopePlugin):

    api_views = {
        '/identify': IdentifyAPI,
        '/hello': HelloWorldAPI,
    }

    def identify(self):
@@ -21,10 +20,3 @@ class Plugin(MicroscopePlugin):
        response = "My parent camera is {}, and my parent stage is {}.".format(self.microscope.camera, self.microscope.stage)
        print(response)
        return response

    def hello_world(self):
        """
        Demonstrate passive method
        """

        return "Hello world!"
 No newline at end of file
+4 −0
Original line number Diff line number Diff line
__all__ = ['Plugin', 'HelloWorldAPI', 'IdentifyAPI']

from .plugin import Plugin
from .api import HelloWorldAPI, IdentifyAPI
 No newline at end of file
+53 −0
Original line number Diff line number Diff line
from openflexure_microscope.api.utilities import parse_payload, get_from_payload
from openflexure_microscope.api.v1.views import MicroscopeViewPlugin

from flask import request, Response, escape

import logging


class IdentifyAPI(MicroscopeViewPlugin):
    """
    A simple example API plugin, attached through the main microscope plugin.
    """
    def get(self):
        """
        Method to call when an HTTP GET request is made.
        """
        data = self.plugin.identify()  # Call a method from our plugin, using the MicroscopeViewPlugin.plugin shortcut
        return Response(escape(data))


class HelloWorldAPI(MicroscopeViewPlugin):
    """
    A method to create, set, and return a new microscope parameter.
    """

    def get(self):
        """
        Method to call when an HTTP GET request is made.
        """

        # If the microscope does not already contain our plugin_string attribute
        if not hasattr(self.microscope, 'plugin_string'):
            # Make a string, using the MicroscopeViewPlugin.plugin shortcut
            self.microscope.plugin_string = self.plugin.hello_world()

        return Response(self.microscope.plugin_string)

    def post(self):
        """
        Method to call when an HTTP POST request is made. 
        Assumes request will include a JSON payload.
        """
        # Get payload JSON as a dictionary
        state = parse_payload(request)

        # Extract a value from the JSON key 'plugin_string'. If no value is given, default to None
        new_plugin_string = get_from_payload(state, 'plugin_string', default=None)

        if new_plugin_string:  # If not None or empty
            # Set microscope attribute to the specified string
            self.microscope.plugin_string = new_plugin_string  

        return Response(self.microscope.plugin_string)
Loading