diff --git a/src/finam/interfaces.py b/src/finam/interfaces.py index ceb8a774f29a631942b52c028c81e5e9feeb77a8..d12be145e06b430562ba5c240b6fee5fb1578332 100644 --- a/src/finam/interfaces.py +++ b/src/finam/interfaces.py @@ -39,6 +39,10 @@ class ComponentStatus(Enum): class Loggable(ABC): """Loggable component.""" + @abstractmethod + def __init__(self): + self._logger = None + @property @abstractmethod def uses_base_logger_name(self): @@ -52,7 +56,15 @@ class Loggable(ABC): @property def logger(self): """Logger for this component.""" - return logging.getLogger(self.logger_name) + if self._logger is None: + if ( + self.uses_base_logger_name + and hasattr(self, "base_logger_name") + and getattr(self, "base_logger_name") is None + ): + return logging.getLogger(self.logger_name) + self._logger = logging.getLogger(self.logger_name) + return self._logger class IComponent(ABC): diff --git a/src/finam/modules/debug.py b/src/finam/modules/debug.py index 7ca6598475d2f15a6646b39964f1a30c559b45f6..d2ad2e5477650459f633923c20ed0b0546631e9c 100644 --- a/src/finam/modules/debug.py +++ b/src/finam/modules/debug.py @@ -6,7 +6,6 @@ from ..data import tools from ..interfaces import ComponentStatus, IInput from ..sdk import CallbackInput, Component, TimeComponent from ..tools.date_helper import is_timedelta -from ..tools.log_helper import ErrorLogger class DebugConsumer(TimeComponent): @@ -73,11 +72,10 @@ class DebugConsumer(TimeComponent): ): super().__init__() - with ErrorLogger(self.logger): - if not isinstance(start, datetime): - raise ValueError("Start must be of type datetime") - if not is_timedelta(step): - raise ValueError("Step must be of type timedelta or relativedelta") + if not isinstance(start, datetime): + raise ValueError("Start must be of type datetime") + if not is_timedelta(step): + raise ValueError("Step must be of type timedelta or relativedelta") self._strip_data = strip_data self._log_data = None @@ -212,7 +210,6 @@ class DebugPushConsumer(Component): def __init__(self, inputs, callbacks=None, log_data=False, strip_data=True): super().__init__() - self._strip_data = strip_data self._log_data = None if isinstance(log_data, bool): diff --git a/src/finam/modules/generators.py b/src/finam/modules/generators.py index 538ac9ee447ab0ccb72c69c7da0d5a5a3c5c70ec..78a0635de17e4b2144f314e65a057854a961f63b 100644 --- a/src/finam/modules/generators.py +++ b/src/finam/modules/generators.py @@ -6,7 +6,6 @@ from finam.interfaces import ComponentStatus from ..sdk import Component, TimeComponent from ..tools.date_helper import is_timedelta -from ..tools.log_helper import ErrorLogger class CallbackGenerator(TimeComponent): @@ -54,11 +53,11 @@ class CallbackGenerator(TimeComponent): def __init__(self, callbacks, start, step): super().__init__() - with ErrorLogger(self.logger): - if not isinstance(start, datetime): - raise ValueError("Start must be of type datetime") - if not is_timedelta(step): - raise ValueError("Step must be of type timedelta or relativedelta") + + if not isinstance(start, datetime): + raise ValueError("Start must be of type datetime") + if not is_timedelta(step): + raise ValueError("Step must be of type timedelta or relativedelta") self._callbacks = callbacks self._step = step diff --git a/src/finam/schedule.py b/src/finam/schedule.py index 9f34e3d5078491bfdbbf53ef28c300090a7878a1..d575ca4ef78a20a9b9644d1569b760e4585d5d73 100644 --- a/src/finam/schedule.py +++ b/src/finam/schedule.py @@ -83,6 +83,7 @@ class Composition(Loggable): log_level=logging.INFO, mpi_rank=0, ): + super().__init__() # setup logger self._logger_name = logger_name self.logger.setLevel(log_level) diff --git a/src/finam/sdk/component.py b/src/finam/sdk/component.py index 20ccdb469a1998a816e75a60e559ad85ba7d5972..49e792242c86d5f8d22230f4ea4bf27b76de1ca6 100644 --- a/src/finam/sdk/component.py +++ b/src/finam/sdk/component.py @@ -42,6 +42,7 @@ class Component(IComponent, Loggable, ABC): """ def __init__(self): + Loggable.__init__(self) self._status = ComponentStatus.CREATED self._inputs = IOList(self, "INPUT") self._outputs = IOList(self, "OUTPUT") @@ -445,7 +446,7 @@ class TimeComponent(ITimeComponent, Component, ABC): """ def __init__(self): - super().__init__() + Component.__init__(self) self._time = None @property diff --git a/src/finam/sdk/input.py b/src/finam/sdk/input.py index 9c695fe5164621f99f51193753792a9053159a7e..2a4881d2e9d7acba1dbe4ad241aed0385de5d3bf 100644 --- a/src/finam/sdk/input.py +++ b/src/finam/sdk/input.py @@ -15,6 +15,7 @@ class Input(IInput, Loggable): """Default input implementation.""" def __init__(self, name, info=None, static=False, **info_kwargs): + Loggable.__init__(self) self.source = None self.base_logger_name = None if name is None: diff --git a/src/finam/sdk/output.py b/src/finam/sdk/output.py index 5cdb5016f34abf2e00b1cef6e493124fc668c3fa..f146d3fff7ccb8c585cbc6d432ae592973231e00 100644 --- a/src/finam/sdk/output.py +++ b/src/finam/sdk/output.py @@ -23,6 +23,7 @@ class Output(IOutput, Loggable): """Default output implementation.""" def __init__(self, name=None, info=None, static=False, **info_kwargs): + Loggable.__init__(self) self.targets = [] self.data = [] self._output_info = None diff --git a/src/finam/tools/connect_helper.py b/src/finam/tools/connect_helper.py index 8e11f3ce816431cab54249c975a9684da1dde9f4..dd33a7a965e43c703746191bfe6757161390583c 100644 --- a/src/finam/tools/connect_helper.py +++ b/src/finam/tools/connect_helper.py @@ -119,6 +119,7 @@ class ConnectHelper(Loggable): out_info_rules=None, cache=True, ): + super().__init__() self.base_logger_name = logger_name self._inputs = inputs