messenger.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import logging
  2. from lakesuperior.messaging import formatters, handlers
  3. logger = logging.getLogger(__name__)
  4. messenger = logging.getLogger('_messenger')
  5. class Messenger:
  6. """
  7. Very simple message sender using the standard Python logging facility.
  8. """
  9. def __init__(self, config):
  10. """
  11. Set up the messenger.
  12. :param dict config: Messenger configuration.
  13. """
  14. def msg_routes():
  15. for route in config['routes']:
  16. handler_cls = getattr(handlers, route['handler'])
  17. messenger.addHandler(handler_cls(route))
  18. messenger.setLevel(logging.INFO)
  19. formatter = getattr(formatters, route['formatter'])
  20. yield messenger, formatter
  21. self.config = config
  22. self.msg_routes = tuple(r for r in msg_routes())
  23. logger.info('Active messaging routes: {}'.format(self.msg_routes))
  24. def send(self, *args, **kwargs):
  25. """Send one or more external messages."""
  26. for msg, fn in self.msg_routes:
  27. msg.info(fn(*args, **kwargs))