diff --git a/lib/tfw/builtins/event_handler.py b/lib/tfw/builtins/event_handler.py index 1732044..9696fe4 100644 --- a/lib/tfw/builtins/event_handler.py +++ b/lib/tfw/builtins/event_handler.py @@ -1,10 +1,9 @@ from tfw.event_handlers import EventHandlerBase -from tfw.networking import Scope from .tfw_server_connector import TFWServerConnector class EventHandler(EventHandlerBase): # pylint: disable=abstract-method - def __init__(self, key, scope=Scope.ZMQ): - super().__init__(key, TFWServerConnector(), scope=scope) + def _build_server_connector(self): + return TFWServerConnector() diff --git a/lib/tfw/builtins/fsm_aware_event_handler.py b/lib/tfw/builtins/fsm_aware_event_handler.py index a619ca1..d585651 100644 --- a/lib/tfw/builtins/fsm_aware_event_handler.py +++ b/lib/tfw/builtins/fsm_aware_event_handler.py @@ -1,12 +1,10 @@ -from abc import ABC - from tfw.components import FSMAware from tfw.networking import Scope from .event_handler import EventHandler -class FSMAwareEventHandler(EventHandler, FSMAware, ABC): +class FSMAwareEventHandler(EventHandler, FSMAware): # pylint: disable=abstract-method """ Abstract base class for EventHandlers which automatically diff --git a/lib/tfw/builtins/tfw_server_connector.py b/lib/tfw/builtins/tfw_server_connector.py index 161a6cb..8b8b7c3 100644 --- a/lib/tfw/builtins/tfw_server_connector.py +++ b/lib/tfw/builtins/tfw_server_connector.py @@ -1,19 +1,25 @@ -from functools import partial - from tfw.networking import ServerUplinkConnector, ServerConnector from tfw.config import TFWENV -UPLINK_CONN_ADDR = f'tcp://localhost:{TFWENV.PULL_PORT}' -DOWNLINK_CONN_ADDR = f'tcp://localhost:{TFWENV.PUB_PORT}' +class ConnAddrMixin: + @property + def uplink_conn_addr(self): + return f'tcp://localhost:{TFWENV.PULL_PORT}' + + @property + def downlink_conn_addr(self): + return f'tcp://localhost:{TFWENV.PUB_PORT}' -TFWServerUplinkConnector = partial( - ServerUplinkConnector, - connect_addr=UPLINK_CONN_ADDR -) -TFWServerConnector = partial( - ServerConnector, - downlink_connect_addr=DOWNLINK_CONN_ADDR, - uplink_connect_addr=UPLINK_CONN_ADDR -) +class TFWServerUplinkConnector(ServerUplinkConnector, ConnAddrMixin): + def __init__(self): + super().__init__(self.uplink_conn_addr) + + +class TFWServerConnector(ServerConnector, ConnAddrMixin): + def __init__(self): + super().__init__( + self.downlink_conn_addr, + self.uplink_conn_addr + ) diff --git a/lib/tfw/event_handlers/event_handler_base.py b/lib/tfw/event_handlers/event_handler_base.py index 051363e..b87606f 100644 --- a/lib/tfw/event_handlers/event_handler_base.py +++ b/lib/tfw/event_handlers/event_handler_base.py @@ -1,10 +1,13 @@ import logging +from abc import ABC, abstractmethod from typing import Iterable +from tfw.networking import Scope + LOG = logging.getLogger(__name__) -class EventHandlerBase: +class EventHandlerBase(ABC): """ Abstract base class for all Python based EventHandlers. Useful implementation template for other languages. @@ -13,9 +16,9 @@ class EventHandlerBase: """ _instances = set() - def __init__(self, key, server_connector, scope): + def __init__(self, key, scope=Scope.ZMQ): type(self)._instances.add(self) - self.server_connector = server_connector + self.server_connector = self._build_server_connector() self.scope = scope self.keys = [] if isinstance(key, str): @@ -26,6 +29,10 @@ class EventHandlerBase: self.subscribe(*self.keys) self.server_connector.register_callback(self.event_handler_callback) + @abstractmethod + def _build_server_connector(self): + raise NotImplementedError() + def subscribe(self, *keys): """ Subscribe this EventHandler to receive events for given keys.