Refactor TransformerPipeIOEventHandler

This commit is contained in:
Kristóf Tóth 2019-05-09 18:22:33 +02:00
parent 69b3b17724
commit c4d3319ed9

View File

@ -1,6 +1,7 @@
from abc import abstractmethod from abc import abstractmethod
from json import loads, dumps from json import loads, dumps
from subprocess import run, PIPE from subprocess import run, PIPE
from functools import partial
from tfw import EventHandlerBase from tfw import EventHandlerBase
from tfw.config.logs import logging from tfw.config.logs import logging
@ -53,18 +54,13 @@ class TransformerPipeIOEventHandler(PipeIOEventHandlerBase):
# pylint: disable=too-many-arguments # pylint: disable=too-many-arguments
def __init__( def __init__(
self, key, in_pipe_path, out_pipe_path, self, key, in_pipe_path, out_pipe_path,
serialize_cmd, deserialize_cmd, transform_in_cmd, transform_out_cmd,
permissions=DEFAULT_PERMISSIONS permissions=DEFAULT_PERMISSIONS
): ):
self._serialize_cmd, self._deserialize_cmd = serialize_cmd, deserialize_cmd self._transform_in = partial(self._transform_message, transform_in_cmd)
self._transform_out = partial(self._transform_message, transform_out_cmd)
super().__init__(key, in_pipe_path, out_pipe_path, permissions) super().__init__(key, in_pipe_path, out_pipe_path, permissions)
def _serialize_message(self, message):
return self._transform_message(self._serialize_cmd, message)
def _deserialize_message(self, message):
return self._transform_message(self._deserialize_cmd, message)
@staticmethod @staticmethod
def _transform_message(transform_cmd, message): def _transform_message(transform_cmd, message):
proc = run( proc = run(
@ -80,12 +76,12 @@ class TransformerPipeIOEventHandler(PipeIOEventHandlerBase):
def handle_event(self, message): def handle_event(self, message):
json_bytes = dumps(message).encode() json_bytes = dumps(message).encode()
transformed_bytes = self._serialize_message(json_bytes) transformed_bytes = self._transform_out(json_bytes)
if transformed_bytes: if transformed_bytes:
self.pipe_io.send_message(transformed_bytes) self.pipe_io.send_message(transformed_bytes)
def handle_pipe_event(self, message_bytes): def handle_pipe_event(self, message_bytes):
transformed_bytes = self._deserialize_message(message_bytes) transformed_bytes = self._transform_in(message_bytes)
if transformed_bytes: if transformed_bytes:
json_message = loads(transformed_bytes) json_message = loads(transformed_bytes)
self.server_connector.send(json_message) self.server_connector.send(json_message)