94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
from openflexure_microscope.api.utilities import JsonResponse
|
|
from openflexure_microscope.utilities import get_by_path, set_by_path, create_from_path
|
|
|
|
from openflexure_microscope.common.labthings.find import find_device
|
|
from openflexure_microscope.common.labthings.resource import Resource
|
|
|
|
from flask import jsonify, request, abort
|
|
import logging
|
|
|
|
|
|
class SettingsProperty(Resource):
|
|
def get(self):
|
|
microscope = find_device("openflexure_microscope")
|
|
return jsonify(microscope.read_settings())
|
|
|
|
def put(self):
|
|
microscope = find_device("openflexure_microscope")
|
|
payload = JsonResponse(request)
|
|
|
|
logging.debug("Updating settings from PUT request:")
|
|
logging.debug(payload.json)
|
|
|
|
microscope.apply_settings(payload.json)
|
|
microscope.save_settings()
|
|
|
|
return self.get()
|
|
|
|
|
|
class NestedSettingsProperty(Resource):
|
|
def get(self, route):
|
|
microscope = find_device("openflexure_microscope")
|
|
keys = route.split("/")
|
|
|
|
try:
|
|
value = get_by_path(microscope.read_settings(), keys)
|
|
except KeyError:
|
|
return abort(404)
|
|
|
|
return jsonify(value)
|
|
|
|
def put(self, route):
|
|
microscope = find_device("openflexure_microscope")
|
|
keys = route.split("/")
|
|
payload = JsonResponse(request)
|
|
|
|
dictionary = create_from_path(keys)
|
|
set_by_path(dictionary, keys, payload.json)
|
|
|
|
microscope.apply_settings(dictionary)
|
|
microscope.save_settings()
|
|
|
|
return self.get(route)
|
|
|
|
|
|
class StatusProperty(Resource):
|
|
def get(self):
|
|
microscope = find_device("openflexure_microscope")
|
|
return jsonify(microscope.status)
|
|
|
|
|
|
class NestedStatusProperty(Resource):
|
|
def get(self, route):
|
|
microscope = find_device("openflexure_microscope")
|
|
keys = route.split("/")
|
|
|
|
try:
|
|
value = get_by_path(microscope.status, keys)
|
|
except KeyError:
|
|
return abort(404)
|
|
|
|
return jsonify(value)
|
|
|
|
|
|
def add_states_to_labthing(labthing, prefix=""):
|
|
"""
|
|
Add all settings and status resources to a labthing
|
|
"""
|
|
labthing.add_resource(
|
|
SettingsProperty, f"{prefix}/settings", endpoint="SettingsProperty"
|
|
)
|
|
labthing.register_property(SettingsProperty)
|
|
labthing.add_resource(
|
|
NestedSettingsProperty,
|
|
f"{prefix}/settings/<path:route>",
|
|
endpoint="NestedSettingsProperty",
|
|
)
|
|
labthing.add_resource(StatusProperty, f"{prefix}/status", endpoint="StatusProperty")
|
|
labthing.register_property(StatusProperty)
|
|
labthing.add_resource(
|
|
NestedStatusProperty,
|
|
f"{prefix}/status/<path:route>",
|
|
endpoint="NestedStatusProperty",
|
|
)
|
|
|