'content': 'Test Message'}
"""
import asyncio
-import datetime
+from datetime import datetime
from controlpi import BasePlugin, Message, MessageTemplate
'command': {'const': 'reset'}}]}
test(): {'sender': 'test()', 'target': 'Test Counter',
'command': 'get count'}
- test(): {'sender': 'Test Counter', 'count': 0}
+ test(): {'sender': 'Test Counter', 'count': 0,
+ 'since': ..., 'until': ...}
test(): {'sender': 'test()', 'id': 42}
test(): {'sender': 'test()', 'id': 42}
test(): {'sender': 'test()', 'id': 49}
test(): {'sender': 'test()', 'target': 'Test Counter',
'command': 'get count'}
- test(): {'sender': 'Test Counter', 'count': 2}
+ test(): {'sender': 'Test Counter', 'count': 2,
+ 'since': ..., 'until': ...}
test(): {'sender': 'test()', 'id': 42}
test(): {'sender': 'test()', 'id': 42}
test(): {'sender': 'test()', 'id': 42}
test(): {'sender': 'test()', 'target': 'Test Counter',
'command': 'reset'}
- test(): {'sender': 'Test Counter', 'count': 5}
+ test(): {'sender': 'Test Counter', 'count': 5,
+ 'since': ..., 'until': ...}
test(): {'sender': 'test()', 'target': 'Test Counter',
'command': 'get count'}
- test(): {'sender': 'Test Counter', 'count': 0}
+ test(): {'sender': 'Test Counter', 'count': 0,
+ 'since': ..., 'until': ...}
test(): {'sender': 'test()', 'id': 42}
test(): {'sender': 'test()', 'id': 42}
test(): {'sender': 'test()', 'id': 42}
test(): {'sender': 'test()', 'target': 'Test Counter',
'command': 'get count'}
- test(): {'sender': 'Test Counter', 'count': 3}
+ test(): {'sender': 'Test Counter', 'count': 3,
+ 'since': ..., 'until': ...}
"""
- CONF_SCHEMA = {'properties': {'count': {'type': 'object'}},
+ CONF_SCHEMA = {'properties': {'count': {'type': 'object'},
+ 'date format':
+ {'type': 'string',
+ 'default': '%Y-%m-%d %H:%M:%S'}},
'required': ['count']}
"""Schema for Counter plugin configuration.
def process_conf(self) -> None:
"""Register plugin as bus client."""
+ self._since = datetime.now().strftime(self.conf['date format'])
self._count = 0
self._template = MessageTemplate(self.conf['count'])
sends = [MessageTemplate({'count': {'type': 'integer'}})]
self.bus.register(self.name, 'Counter', sends, receives, self.receive)
async def receive(self, message: Message) -> None:
- """Send current date and time as message."""
+ """Count messages, send and optionally reset counts."""
if self._template.check(message):
self._count += 1
if ('target' in message and message['target'] == self.name and
'command' in message):
if message['command'] == 'get count':
- await self.bus.send(Message(self.name, {'count': self._count}))
+ now = datetime.now().strftime(self.conf['date format'])
+ await self.bus.send(Message(self.name, {'count': self._count,
+ 'since': self._since,
+ 'until': now}))
elif message['command'] == 'reset':
+ now = datetime.now().strftime(self.conf['date format'])
count = self._count
self._count = 0
- await self.bus.send(Message(self.name, {'count': count}))
+ await self.bus.send(Message(self.name, {'count': count,
+ 'since': self._since,
+ 'until': now}))
+ self._since = now
async def run(self) -> None:
"""Run no code proactively."""
async def date(self, message: Message) -> None:
"""Send current date and time as message."""
- date = datetime.datetime.now().strftime(self.conf['format'])
+ date = datetime.now().strftime(self.conf['format'])
await self.bus.send(Message(self.name, {'date': date}))
async def run(self) -> None: