{
- "Conf": {
- "plugin": "Conf"
- },
"Test Procedure": {
"plugin": "Init",
"messages": [
- { "target": "Conf", "command": "push",
+ { "target": "", "command": "push conf",
"conf": {
- "Conf": { "plugin": "Conf" },
"Example State": { "plugin": "State" },
"Debug Logger": { "plugin": "Log", "filter": [{}] }
} }
import asyncio
import json
import jsonschema # type: ignore
+import sys
from typing import Union, Dict, List, Any, Iterable, Callable, Coroutine
MessageValue = Union[None, str, int, float, bool, Dict[str, Any], List[Any]]
message = await self._queue.get()
if ('target' in message and
message['target'] == '' and
- 'command' in message and
- message['command'] == 'get clients'):
- for client in self._plugins:
- answer = Message('')
- answer['client'] = client
- answer['plugin'] = self._plugins[client]
- answer['sends'] = self._send_reg.get_templates(client)
- answer['receives'] = self._recv_reg.get_templates(client)
- await self._queue.put(answer)
+ 'command' in message):
+ if message['command'] == 'get clients':
+ for client in self._plugins:
+ answer = Message('')
+ answer['client'] = client
+ answer['plugin'] = self._plugins[client]
+ answer['sends'] = self._send_reg.get_templates(client)
+ answer['receives'] = self._recv_reg.get_templates(client)
+ await self._queue.put(answer)
+ elif message['command'] == 'push conf':
+ conf = {}
+ try:
+ with open(sys.argv[1]) as conf_file:
+ conf = json.load(conf_file)
+ except (IndexError, FileNotFoundError, json.decoder.JSONDecodeError):
+ pass
+ if conf == message['conf']:
+ await self.bus.send(Message(self.name, {'event': 'unchanged'}))
+ else:
+ with open(sys.argv[1], 'w') as conf_file:
+ json.dump(message['conf'], conf_file)
+ await self.bus.send(Message(self.name, {'event': 'changed'}))
for client in self._recv_reg.get(message):
await self._callbacks[client](message)
self._queue.task_done()
+++ /dev/null
-"""Provide plugin to push new configuration on system.
-
-"""
-import asyncio
-import json
-import sys
-
-from controlpi import BasePlugin, Message, MessageTemplate
-
-
-class Conf(BasePlugin):
- """Replace configuration by command."""
-
- CONF_SCHEMA = {'properties': {}}
- """Empty configuration schema."""
-
- async def _push(self, message: Message) -> None:
- """Update configuration if changed."""
- conf = {}
- try:
- with open(sys.argv[1]) as conf_file:
- conf = json.load(conf_file)
- except (IndexError, FileNotFoundError, json.decoder.JSONDecodeError):
- pass
- if conf == message['conf']:
- await self.bus.send(Message(self.name, {'event': 'unchanged'}))
- else:
- with open(sys.argv[1], 'w') as conf_file:
- json.dump(message['conf'], conf_file)
- await self.bus.send(Message(self.name, {'event': 'changed'}))
-
- def process_conf(self) -> None:
- """Register plugin as bus client."""
- receives = [MessageTemplate({'target': {'const': self.name},
- 'command': {'const': 'push'},
- 'conf': {'type': 'object'}})]
- sends = [MessageTemplate({'event': {'const': 'changed'}}),
- MessageTemplate({'event': {'const': 'unchanged'}})]
- self.bus.register(self.name, 'Wait', sends, receives, self._push)
-
- async def run(self) -> None:
- """Run no code proactively."""
- pass