import logging from lakesuperior.messaging import formatters, handlers logger = logging.getLogger(__name__) messenger = logging.getLogger('_messenger') class Messenger: ''' Very simple message sender using the standard Python logging facility. ''' def __init__(self, config): ''' Set up the messenger. @param config (dict) Messenger configuration. ''' def msg_routes(): for route in config['routes']: handler_cls = getattr(handlers, route['handler']) messenger.addHandler(handler_cls(route)) messenger.setLevel(logging.INFO) formatter = getattr(formatters, route['formatter']) yield messenger, formatter self.config = config self.msg_routes = tuple(r for r in msg_routes()) logger.info('Active messaging routes: {}'.format(self.msg_routes)) def send(self, *args, **kwargs): ''' Send one or more external messages. ''' for msg, fn in self.msg_routes: msg.info(fn(*args, **kwargs))