Source code for ryvencore.addons.default.Logging

"""
WIP
"""

from logging import Logger as PyLogger
from typing import Optional

from ryvencore.AddOn import AddOn


[docs]class Logger(PyLogger): def __init__(self, *args, **kwargs): PyLogger.__init__(self, *args, **kwargs) # # events # self.sig_enabled = Event() # self.sig_disabled = Event()
[docs] def enable(self): # self.sig_enabled.emit() pass
[docs] def disable(self): # self.sig_disabled.emit() pass
[docs]class LoggingAddon(AddOn): """ This addon implements very basic some logging functionality. It provides an API to create and delete loggers that are owned by a particular node. The logger gets enabled/disabled automatically when the owning node is added to/removed from the flow. Ownership might eventually be expanded to any component that preserves its global ID throughout save and load. The contents of logs are currently not preserved. If a log's content should be preserved, it should be saved in a file. Refer to Python's logging module documentation. """ name = 'Logging' version = '0.0.1' def __init__(self): super().__init__() # logger_created = Event(Logger) self.loggers = {} # {Node: {name: Logger}}
[docs] def new_logger(self, node, title: str) -> Optional[Logger]: """ Creates a new logger owned by the node, returns None if one with the given name already exists. """ if not self._node_is_registered(node): self.loggers[node] = {} elif title in self.loggers[node]: return None logger = Logger(name=title) self.loggers[node][title] = logger # self.logger_created.emit(logger) return logger
def _on_node_created(self, flow, node): if node.init_data and 'Logging' in node.init_data: for title in node.init_data['Logging']['loggers']: self.new_logger(node, title) # in case the node already created the logger, # new_logger() will have no effect def _node_is_registered(self, node): return node in self.loggers def _on_node_added(self, flow, node): if not self._node_is_registered(node): return # enable the node's loggers for logger in self.loggers[node].values(): logger.enable() def _on_node_removed(self, flow, node): if not self._node_is_registered(node): return # disable the node's loggers for logger in self.loggers[node].values(): logger.disable() def _extend_node_data(self, node, data: dict): if not self._node_is_registered(node): return data['Logging'] = { 'loggers': [name for name in self.loggers[node].keys()] }
addon = LoggingAddon()