Loading openflexure_microscope/api/app.py +3 −10 Original line number Diff line number Diff line Loading @@ -82,17 +82,10 @@ for plugin in find_plugins(USER_PLUGINS_PATH): # Attach captures resources labthing.add_resource(views.CaptureList, f"/captures") labthing.register_property(views.CaptureList) labthing.add_resource( views.CaptureResource, f"/captures/<id>" ) labthing.add_resource( views.CaptureDownload, f"/captures/<id>/download/<filename>", ) labthing.add_resource(views.CaptureResource, f"/captures/<id>") labthing.add_resource(views.CaptureDownload, f"/captures/<id>/download/<filename>") labthing.add_resource(views.CaptureTags, f"/captures/<id>/tags") labthing.add_resource( views.CaptureMetadata, f"/captures/<id>/metadata" ) labthing.add_resource(views.CaptureMetadata, f"/captures/<id>/metadata") # Attach settings and status resources labthing.add_resource(views.SettingsProperty, f"/settings") Loading openflexure_microscope/api/v2/views/actions/camera.py +2 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ class GPUPreviewStartAPI(Resource): Optional "window" parameter can be passed to control the position and size of the preview window, in the format ``[x, y, width, height]``. """ def post(self): microscope = find_device("openflexure_microscope") payload = JsonResponse(request) Loading @@ -84,6 +85,7 @@ class GPUPreviewStopAPI(Resource): """ Start the onboard GPU preview. """ def post(self): microscope = find_device("openflexure_microscope") microscope.camera.stop_preview() Loading openflexure_microscope/api/v2/views/captures.py +15 −6 Original line number Diff line number Diff line Loading @@ -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 import fields 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.find import find_device Loading @@ -30,24 +32,27 @@ class CaptureSchema(Schema): "self": { "href": url_for(CaptureResource.endpoint, id=data.id, _external=True), "mimetype": "application/json", **description_from_view(CaptureResource) **description_from_view(CaptureResource), }, "tags": { "href": url_for(CaptureTags.endpoint, id=data.id, _external=True), "mimetype": "application/json", **description_from_view(CaptureTags) **description_from_view(CaptureTags), }, "metadata": { "href": url_for(CaptureMetadata.endpoint, id=data.id, _external=True), "mimetype": "application/json", **description_from_view(CaptureMetadata) **description_from_view(CaptureMetadata), }, "download": { "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", **description_from_view(CaptureDownload) **description_from_view(CaptureDownload), }, } return data Loading @@ -61,6 +66,7 @@ class CaptureList(Resource): """ List all image captures """ @marshal_with(CaptureSchema(many=True)) def get(self): microscope = find_device("openflexure_microscope") Loading Loading @@ -99,6 +105,7 @@ class CaptureDownload(Resource): """ Image data for a single image capture """ def get(self, id, filename): microscope = find_device("openflexure_microscope") Loading Loading @@ -134,6 +141,7 @@ class CaptureTags(Resource): """ Tags associated with a single image capture """ def get(self, id): microscope = find_device("openflexure_microscope") Loading Loading @@ -184,6 +192,7 @@ class CaptureMetadata(Resource): """ All metadata associated with a single image capture """ def get(self, id): microscope = find_device("openflexure_microscope") capture_obj = microscope.camera.image_from_id(id) Loading openflexure_microscope/common/flask_labthings/decorators.py +1 −0 Original line number Diff line number Diff line Loading @@ -41,4 +41,5 @@ class marshal_with(object): return make_response(self.schema.jsonify(data), code, headers) else: return make_response(self.schema.jsonify(resp)) return wrapper openflexure_microscope/common/flask_labthings/fields.py +6 −2 Original line number Diff line number Diff line Loading @@ -72,7 +72,9 @@ class URLFor(Field): self.view_class = None self.endpoint = endpoint 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 Field.__init__(self, **kwargs) Loading @@ -85,7 +87,9 @@ class URLFor(Field): if hasattr(self.view_class, "endpoint"): self.endpoint = self.view_class.endpoint 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 param_values = {} Loading Loading
openflexure_microscope/api/app.py +3 −10 Original line number Diff line number Diff line Loading @@ -82,17 +82,10 @@ for plugin in find_plugins(USER_PLUGINS_PATH): # Attach captures resources labthing.add_resource(views.CaptureList, f"/captures") labthing.register_property(views.CaptureList) labthing.add_resource( views.CaptureResource, f"/captures/<id>" ) labthing.add_resource( views.CaptureDownload, f"/captures/<id>/download/<filename>", ) labthing.add_resource(views.CaptureResource, f"/captures/<id>") labthing.add_resource(views.CaptureDownload, f"/captures/<id>/download/<filename>") labthing.add_resource(views.CaptureTags, f"/captures/<id>/tags") labthing.add_resource( views.CaptureMetadata, f"/captures/<id>/metadata" ) labthing.add_resource(views.CaptureMetadata, f"/captures/<id>/metadata") # Attach settings and status resources labthing.add_resource(views.SettingsProperty, f"/settings") Loading
openflexure_microscope/api/v2/views/actions/camera.py +2 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ class GPUPreviewStartAPI(Resource): Optional "window" parameter can be passed to control the position and size of the preview window, in the format ``[x, y, width, height]``. """ def post(self): microscope = find_device("openflexure_microscope") payload = JsonResponse(request) Loading @@ -84,6 +85,7 @@ class GPUPreviewStopAPI(Resource): """ Start the onboard GPU preview. """ def post(self): microscope = find_device("openflexure_microscope") microscope.camera.stop_preview() Loading
openflexure_microscope/api/v2/views/captures.py +15 −6 Original line number Diff line number Diff line Loading @@ -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 import fields 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.find import find_device Loading @@ -30,24 +32,27 @@ class CaptureSchema(Schema): "self": { "href": url_for(CaptureResource.endpoint, id=data.id, _external=True), "mimetype": "application/json", **description_from_view(CaptureResource) **description_from_view(CaptureResource), }, "tags": { "href": url_for(CaptureTags.endpoint, id=data.id, _external=True), "mimetype": "application/json", **description_from_view(CaptureTags) **description_from_view(CaptureTags), }, "metadata": { "href": url_for(CaptureMetadata.endpoint, id=data.id, _external=True), "mimetype": "application/json", **description_from_view(CaptureMetadata) **description_from_view(CaptureMetadata), }, "download": { "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", **description_from_view(CaptureDownload) **description_from_view(CaptureDownload), }, } return data Loading @@ -61,6 +66,7 @@ class CaptureList(Resource): """ List all image captures """ @marshal_with(CaptureSchema(many=True)) def get(self): microscope = find_device("openflexure_microscope") Loading Loading @@ -99,6 +105,7 @@ class CaptureDownload(Resource): """ Image data for a single image capture """ def get(self, id, filename): microscope = find_device("openflexure_microscope") Loading Loading @@ -134,6 +141,7 @@ class CaptureTags(Resource): """ Tags associated with a single image capture """ def get(self, id): microscope = find_device("openflexure_microscope") Loading Loading @@ -184,6 +192,7 @@ class CaptureMetadata(Resource): """ All metadata associated with a single image capture """ def get(self, id): microscope = find_device("openflexure_microscope") capture_obj = microscope.camera.image_from_id(id) Loading
openflexure_microscope/common/flask_labthings/decorators.py +1 −0 Original line number Diff line number Diff line Loading @@ -41,4 +41,5 @@ class marshal_with(object): return make_response(self.schema.jsonify(data), code, headers) else: return make_response(self.schema.jsonify(resp)) return wrapper
openflexure_microscope/common/flask_labthings/fields.py +6 −2 Original line number Diff line number Diff line Loading @@ -72,7 +72,9 @@ class URLFor(Field): self.view_class = None self.endpoint = endpoint 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 Field.__init__(self, **kwargs) Loading @@ -85,7 +87,9 @@ class URLFor(Field): if hasattr(self.view_class, "endpoint"): self.endpoint = self.view_class.endpoint 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 param_values = {} Loading