Blackened
This commit is contained in:
parent
2574e38b47
commit
c85bdcc91d
10 changed files with 49 additions and 30 deletions
|
|
@ -82,17 +82,10 @@ for plugin in find_plugins(USER_PLUGINS_PATH):
|
||||||
# Attach captures resources
|
# Attach captures resources
|
||||||
labthing.add_resource(views.CaptureList, f"/captures")
|
labthing.add_resource(views.CaptureList, f"/captures")
|
||||||
labthing.register_property(views.CaptureList)
|
labthing.register_property(views.CaptureList)
|
||||||
labthing.add_resource(
|
labthing.add_resource(views.CaptureResource, f"/captures/<id>")
|
||||||
views.CaptureResource, f"/captures/<id>"
|
labthing.add_resource(views.CaptureDownload, f"/captures/<id>/download/<filename>")
|
||||||
)
|
|
||||||
labthing.add_resource(
|
|
||||||
views.CaptureDownload,
|
|
||||||
f"/captures/<id>/download/<filename>",
|
|
||||||
)
|
|
||||||
labthing.add_resource(views.CaptureTags, f"/captures/<id>/tags")
|
labthing.add_resource(views.CaptureTags, f"/captures/<id>/tags")
|
||||||
labthing.add_resource(
|
labthing.add_resource(views.CaptureMetadata, f"/captures/<id>/metadata")
|
||||||
views.CaptureMetadata, f"/captures/<id>/metadata"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Attach settings and status resources
|
# Attach settings and status resources
|
||||||
labthing.add_resource(views.SettingsProperty, f"/settings")
|
labthing.add_resource(views.SettingsProperty, f"/settings")
|
||||||
|
|
|
||||||
|
|
@ -124,4 +124,4 @@ def init_default_plugins(plugin_path):
|
||||||
_DEFAULT_PLUGIN_INIT = """from openflexure_microscope.plugins.v2.autofocus import autofocus_plugin_v2
|
_DEFAULT_PLUGIN_INIT = """from openflexure_microscope.plugins.v2.autofocus import autofocus_plugin_v2
|
||||||
from openflexure_microscope.plugins.v2.scan import scan_plugin_v2
|
from openflexure_microscope.plugins.v2.scan import scan_plugin_v2
|
||||||
|
|
||||||
__plugins__ = [autofocus_plugin_v2, scan_plugin_v2]"""
|
__plugins__ = [autofocus_plugin_v2, scan_plugin_v2]"""
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ class GPUPreviewStartAPI(Resource):
|
||||||
Optional "window" parameter can be passed to control the position and size of the preview window,
|
Optional "window" parameter can be passed to control the position and size of the preview window,
|
||||||
in the format ``[x, y, width, height]``.
|
in the format ``[x, y, width, height]``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def post(self):
|
def post(self):
|
||||||
microscope = find_device("openflexure_microscope")
|
microscope = find_device("openflexure_microscope")
|
||||||
payload = JsonResponse(request)
|
payload = JsonResponse(request)
|
||||||
|
|
@ -84,6 +85,7 @@ class GPUPreviewStopAPI(Resource):
|
||||||
"""
|
"""
|
||||||
Start the onboard GPU preview.
|
Start the onboard GPU preview.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def post(self):
|
def post(self):
|
||||||
microscope = find_device("openflexure_microscope")
|
microscope = find_device("openflexure_microscope")
|
||||||
microscope.camera.stop_preview()
|
microscope.camera.stop_preview()
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ from openflexure_microscope.api.utilities import get_bool, JsonResponse
|
||||||
from openflexure_microscope.common.flask_labthings.schema import Schema
|
from openflexure_microscope.common.flask_labthings.schema import Schema
|
||||||
from openflexure_microscope.common.flask_labthings import fields
|
from openflexure_microscope.common.flask_labthings import fields
|
||||||
from openflexure_microscope.common.flask_labthings.resource import Resource
|
from openflexure_microscope.common.flask_labthings.resource import Resource
|
||||||
from openflexure_microscope.common.flask_labthings.utilities import description_from_view
|
from openflexure_microscope.common.flask_labthings.utilities import (
|
||||||
|
description_from_view,
|
||||||
|
)
|
||||||
from openflexure_microscope.common.flask_labthings.decorators import marshal_with
|
from openflexure_microscope.common.flask_labthings.decorators import marshal_with
|
||||||
|
|
||||||
from openflexure_microscope.common.flask_labthings.find import find_device
|
from openflexure_microscope.common.flask_labthings.find import find_device
|
||||||
|
|
@ -30,24 +32,27 @@ class CaptureSchema(Schema):
|
||||||
"self": {
|
"self": {
|
||||||
"href": url_for(CaptureResource.endpoint, id=data.id, _external=True),
|
"href": url_for(CaptureResource.endpoint, id=data.id, _external=True),
|
||||||
"mimetype": "application/json",
|
"mimetype": "application/json",
|
||||||
**description_from_view(CaptureResource)
|
**description_from_view(CaptureResource),
|
||||||
},
|
},
|
||||||
"tags": {
|
"tags": {
|
||||||
"href": url_for(CaptureTags.endpoint, id=data.id, _external=True),
|
"href": url_for(CaptureTags.endpoint, id=data.id, _external=True),
|
||||||
"mimetype": "application/json",
|
"mimetype": "application/json",
|
||||||
**description_from_view(CaptureTags)
|
**description_from_view(CaptureTags),
|
||||||
},
|
},
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"href": url_for(CaptureMetadata.endpoint, id=data.id, _external=True),
|
"href": url_for(CaptureMetadata.endpoint, id=data.id, _external=True),
|
||||||
"mimetype": "application/json",
|
"mimetype": "application/json",
|
||||||
**description_from_view(CaptureMetadata)
|
**description_from_view(CaptureMetadata),
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"href": url_for(
|
"href": url_for(
|
||||||
CaptureDownload.endpoint, id=data.id, filename=data.filename, _external=True
|
CaptureDownload.endpoint,
|
||||||
|
id=data.id,
|
||||||
|
filename=data.filename,
|
||||||
|
_external=True,
|
||||||
),
|
),
|
||||||
"mimetype": "image/jpeg",
|
"mimetype": "image/jpeg",
|
||||||
**description_from_view(CaptureDownload)
|
**description_from_view(CaptureDownload),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
|
|
@ -61,6 +66,7 @@ class CaptureList(Resource):
|
||||||
"""
|
"""
|
||||||
List all image captures
|
List all image captures
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@marshal_with(CaptureSchema(many=True))
|
@marshal_with(CaptureSchema(many=True))
|
||||||
def get(self):
|
def get(self):
|
||||||
microscope = find_device("openflexure_microscope")
|
microscope = find_device("openflexure_microscope")
|
||||||
|
|
@ -99,6 +105,7 @@ class CaptureDownload(Resource):
|
||||||
"""
|
"""
|
||||||
Image data for a single image capture
|
Image data for a single image capture
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, id, filename):
|
def get(self, id, filename):
|
||||||
|
|
||||||
microscope = find_device("openflexure_microscope")
|
microscope = find_device("openflexure_microscope")
|
||||||
|
|
@ -134,6 +141,7 @@ class CaptureTags(Resource):
|
||||||
"""
|
"""
|
||||||
Tags associated with a single image capture
|
Tags associated with a single image capture
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, id):
|
def get(self, id):
|
||||||
|
|
||||||
microscope = find_device("openflexure_microscope")
|
microscope = find_device("openflexure_microscope")
|
||||||
|
|
@ -184,6 +192,7 @@ class CaptureMetadata(Resource):
|
||||||
"""
|
"""
|
||||||
All metadata associated with a single image capture
|
All metadata associated with a single image capture
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get(self, id):
|
def get(self, id):
|
||||||
microscope = find_device("openflexure_microscope")
|
microscope = find_device("openflexure_microscope")
|
||||||
capture_obj = microscope.camera.image_from_id(id)
|
capture_obj = microscope.camera.image_from_id(id)
|
||||||
|
|
|
||||||
|
|
@ -41,4 +41,5 @@ class marshal_with(object):
|
||||||
return make_response(self.schema.jsonify(data), code, headers)
|
return make_response(self.schema.jsonify(data), code, headers)
|
||||||
else:
|
else:
|
||||||
return make_response(self.schema.jsonify(resp))
|
return make_response(self.schema.jsonify(resp))
|
||||||
|
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,9 @@ class URLFor(Field):
|
||||||
self.view_class = None
|
self.view_class = None
|
||||||
self.endpoint = endpoint
|
self.endpoint = endpoint
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(f"Endpoint {endpoint} is not a valid Flask view or endpoint string.")
|
raise RuntimeError(
|
||||||
|
f"Endpoint {endpoint} is not a valid Flask view or endpoint string."
|
||||||
|
)
|
||||||
self.params = kwargs
|
self.params = kwargs
|
||||||
Field.__init__(self, **kwargs)
|
Field.__init__(self, **kwargs)
|
||||||
|
|
||||||
|
|
@ -85,7 +87,9 @@ class URLFor(Field):
|
||||||
if hasattr(self.view_class, "endpoint"):
|
if hasattr(self.view_class, "endpoint"):
|
||||||
self.endpoint = self.view_class.endpoint
|
self.endpoint = self.view_class.endpoint
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(f"Resource {self.endpoint} has not been added to a LabThing application. Unable to generate URL.")
|
raise RuntimeError(
|
||||||
|
f"Resource {self.endpoint} has not been added to a LabThing application. Unable to generate URL."
|
||||||
|
)
|
||||||
|
|
||||||
# Generate URL for
|
# Generate URL for
|
||||||
param_values = {}
|
param_values = {}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,14 @@ from . import EXTENSION_NAME
|
||||||
|
|
||||||
|
|
||||||
class LabThing(object):
|
class LabThing(object):
|
||||||
def __init__(self, app=None, prefix: str = "", title: str = "", description: str = "", handle_errors: bool = True):
|
def __init__(
|
||||||
|
self,
|
||||||
|
app=None,
|
||||||
|
prefix: str = "",
|
||||||
|
title: str = "",
|
||||||
|
description: str = "",
|
||||||
|
handle_errors: bool = True,
|
||||||
|
):
|
||||||
self.app = app
|
self.app = app
|
||||||
|
|
||||||
self.devices = {}
|
self.devices = {}
|
||||||
|
|
@ -219,7 +226,7 @@ class LabThing(object):
|
||||||
|
|
||||||
if self.blueprint:
|
if self.blueprint:
|
||||||
if endpoint.startswith(self.blueprint.name):
|
if endpoint.startswith(self.blueprint.name):
|
||||||
endpoint = endpoint.split(self.blueprint.name + '.', 1)[-1]
|
endpoint = endpoint.split(self.blueprint.name + ".", 1)[-1]
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
return endpoint in self.endpoints
|
return endpoint in self.endpoints
|
||||||
|
|
@ -254,4 +261,4 @@ class LabThing(object):
|
||||||
|
|
||||||
return jsonify(td)
|
return jsonify(td)
|
||||||
|
|
||||||
# TODO: Add a nicer root resource like the old self-documenting system
|
# TODO: Add a nicer root resource like the old self-documenting system
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,7 @@ import copy
|
||||||
from importlib import util
|
from importlib import util
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from openflexure_microscope.utilities import (
|
from openflexure_microscope.utilities import camel_to_snake, snake_to_spine
|
||||||
camel_to_snake,
|
|
||||||
snake_to_spine,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class BasePlugin:
|
class BasePlugin:
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,11 @@ def plugins_representation(plugin_dict):
|
||||||
}
|
}
|
||||||
|
|
||||||
for view_id, view_data in plugin.views.items():
|
for view_id, view_data in plugin.views.items():
|
||||||
uri = url_for(f"PluginListResource", _external=True) + "/" + view_data["rule"][1:]
|
uri = (
|
||||||
|
url_for(f"PluginListResource", _external=True)
|
||||||
|
+ "/"
|
||||||
|
+ view_data["rule"][1:]
|
||||||
|
)
|
||||||
# Make links dictionary if it doesn't yet exist
|
# Make links dictionary if it doesn't yet exist
|
||||||
view_d = {"href": uri, **description_from_view(view_data["view"])}
|
view_d = {"href": uri, **description_from_view(view_data["view"])}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@ from openflexure_microscope.common.flask_labthings.schema import Schema
|
||||||
from openflexure_microscope.common.flask_labthings import fields
|
from openflexure_microscope.common.flask_labthings import fields
|
||||||
from openflexure_microscope.common.labthings_core import tasks
|
from openflexure_microscope.common.labthings_core import tasks
|
||||||
from openflexure_microscope.common.flask_labthings.resource import Resource
|
from openflexure_microscope.common.flask_labthings.resource import Resource
|
||||||
from openflexure_microscope.common.flask_labthings.utilities import description_from_view
|
from openflexure_microscope.common.flask_labthings.utilities import (
|
||||||
|
description_from_view,
|
||||||
|
)
|
||||||
|
|
||||||
from marshmallow import pre_dump
|
from marshmallow import pre_dump
|
||||||
|
|
||||||
|
|
@ -52,8 +54,8 @@ class TaskSchema(Schema):
|
||||||
"self": {
|
"self": {
|
||||||
"href": url_for(TaskResource.endpoint, id=data.id, _external=True),
|
"href": url_for(TaskResource.endpoint, id=data.id, _external=True),
|
||||||
"mimetype": "application/json",
|
"mimetype": "application/json",
|
||||||
**description_from_view(TaskResource)
|
**description_from_view(TaskResource),
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue