forked from platypush/platypush
[#341] More improvements on the procedures
plugin.
- `procedures.status` should always sync with the db to ensure that the action returns the most up-to-date version of the procedures. - Store, return and propagate entity procedure metadata.
This commit is contained in:
parent
1369848114
commit
861e7e7c52
1 changed files with 19 additions and 0 deletions
|
@ -94,6 +94,7 @@ class ProceduresPlugin(RunnablePlugin, ProcedureEntityManager):
|
||||||
line=metadata.get('line'),
|
line=metadata.get('line'),
|
||||||
args=metadata.get('args', []),
|
args=metadata.get('args', []),
|
||||||
actions=metadata.get('actions', []),
|
actions=metadata.get('actions', []),
|
||||||
|
meta=metadata.get('meta', {}),
|
||||||
)
|
)
|
||||||
|
|
||||||
@action
|
@action
|
||||||
|
@ -122,6 +123,7 @@ class ProceduresPlugin(RunnablePlugin, ProcedureEntityManager):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
with self._status_lock:
|
with self._status_lock:
|
||||||
|
self._sync_db_procedures()
|
||||||
if publish:
|
if publish:
|
||||||
self.publish_entities(self._get_wrapped_procedures())
|
self.publish_entities(self._get_wrapped_procedures())
|
||||||
|
|
||||||
|
@ -134,6 +136,7 @@ class ProceduresPlugin(RunnablePlugin, ProcedureEntityManager):
|
||||||
actions: Iterable[dict],
|
actions: Iterable[dict],
|
||||||
args: Optional[Iterable[str]] = None,
|
args: Optional[Iterable[str]] = None,
|
||||||
old_name: Optional[str] = None,
|
old_name: Optional[str] = None,
|
||||||
|
meta: Optional[dict] = None,
|
||||||
**_,
|
**_,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
|
@ -157,6 +160,17 @@ class ProceduresPlugin(RunnablePlugin, ProcedureEntityManager):
|
||||||
as a list of strings with the argument names.
|
as a list of strings with the argument names.
|
||||||
:param old_name: Optional old name of the procedure if it's being
|
:param old_name: Optional old name of the procedure if it's being
|
||||||
renamed.
|
renamed.
|
||||||
|
:param meta: Optional metadata to be stored with the procedure. Example:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"icon": {
|
||||||
|
"class": "fas fa-cogs",
|
||||||
|
"color": "#00ff00"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
assert name, 'Procedure name cannot be empty'
|
assert name, 'Procedure name cannot be empty'
|
||||||
assert actions, 'Procedure actions cannot be empty'
|
assert actions, 'Procedure actions cannot be empty'
|
||||||
|
@ -165,11 +179,15 @@ class ProceduresPlugin(RunnablePlugin, ProcedureEntityManager):
|
||||||
), 'Procedure actions should be dictionaries with an "action" key'
|
), 'Procedure actions should be dictionaries with an "action" key'
|
||||||
|
|
||||||
args = args or []
|
args = args or []
|
||||||
|
proc_def = self._all_procedures.get(name, {})
|
||||||
proc_args = {
|
proc_args = {
|
||||||
'name': name,
|
'name': name,
|
||||||
'type': ProcedureType.DB.value,
|
'type': ProcedureType.DB.value,
|
||||||
'actions': actions,
|
'actions': actions,
|
||||||
'args': args,
|
'args': args,
|
||||||
|
'meta': (
|
||||||
|
meta or (proc_def.get('meta', {}) if isinstance(proc_def, dict) else {})
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
with self._status_lock:
|
with self._status_lock:
|
||||||
|
@ -285,6 +303,7 @@ class ProceduresPlugin(RunnablePlugin, ProcedureEntityManager):
|
||||||
'name': proc.name,
|
'name': proc.name,
|
||||||
'args': proc.args,
|
'args': proc.args,
|
||||||
'actions': proc.actions,
|
'actions': proc.actions,
|
||||||
|
'meta': proc.meta,
|
||||||
}
|
}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
Loading…
Reference in a new issue