Moved eV GUI stuff out of LabThings
This commit is contained in:
parent
3fef94dc95
commit
eeb15453d0
5 changed files with 169 additions and 33 deletions
|
|
@ -26,6 +26,7 @@ class BaseExtension:
|
|||
{}
|
||||
) # Key: Full, Python-safe ID. Val: Original rule, and view class
|
||||
self._rules = {} # Key: Original rule. Val: View class
|
||||
self._meta = {} # Extra metadata to add to the extension description
|
||||
self._gui = None
|
||||
|
||||
self._cls = str(self) # String description of extension instance
|
||||
|
|
@ -71,36 +72,17 @@ class BaseExtension:
|
|||
self.properties.append(view_class)
|
||||
|
||||
@property
|
||||
def gui(self):
|
||||
# Handle missing/no GUI
|
||||
if not self._gui:
|
||||
return None
|
||||
# Handle GUI as a dictionary-returning callable function
|
||||
elif isinstance(self._gui, collections.Callable):
|
||||
api_gui = self._gui()
|
||||
# Handle GUI as a static dictionary
|
||||
elif isinstance(self._gui, dict):
|
||||
api_gui = copy.deepcopy(self._gui)
|
||||
# Handle borked GUI
|
||||
else:
|
||||
raise ValueError(
|
||||
"GUI must be a dictionary, or a dictionary-returning function with no arguments."
|
||||
)
|
||||
def meta(self):
|
||||
d = {}
|
||||
for k, v in self._meta.items():
|
||||
if callable(v):
|
||||
d[k] = v()
|
||||
else:
|
||||
d[k] = v
|
||||
return d
|
||||
|
||||
api_gui["id"] = self._name
|
||||
|
||||
if "forms" in api_gui and isinstance(api_gui["forms"], list):
|
||||
for form in api_gui["forms"]:
|
||||
if "route" in form and form["route"] in self._rules.keys():
|
||||
form["route"] = self._rules[form["route"]]["rule"]
|
||||
else:
|
||||
logging.warn(
|
||||
"No valid expandable route found for {}".format(form["route"])
|
||||
)
|
||||
return api_gui
|
||||
|
||||
def set_gui(self, form_dictionary: dict):
|
||||
self._gui = form_dictionary
|
||||
def add_meta(self, key, val):
|
||||
self._meta[key] = val
|
||||
|
||||
@property
|
||||
def _name(self):
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ class ExtensionSchema(Schema):
|
|||
name = fields.String(data_key="title")
|
||||
_name_python_safe = fields.String(data_key="pythonName")
|
||||
_cls = fields.String(data_key="pythonObject")
|
||||
gui = fields.Dict()
|
||||
meta = fields.Dict()
|
||||
description = fields.String()
|
||||
|
||||
links = fields.Dict()
|
||||
|
|
@ -81,12 +81,10 @@ class ExtensionSchema(Schema):
|
|||
d = {}
|
||||
for view_id, view_data in data.views.items():
|
||||
view_cls = view_data["view"]
|
||||
view_kwargs = view_data["kwargs"]
|
||||
view_rule = view_data["rule"]
|
||||
# Make links dictionary if it doesn't yet exist
|
||||
d[view_id] = {
|
||||
"href": url_for(EXTENSION_LIST_ENDPOINT, **view_kwargs, _external=True)
|
||||
+ view_rule,
|
||||
"href": url_for(EXTENSION_LIST_ENDPOINT, _external=True) + view_rule,
|
||||
**description_from_view(view_cls),
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue