35 lines
745 B
Python
35 lines
745 B
Python
|
# standard imports
|
||
|
import logging
|
||
|
import socket
|
||
|
import enum
|
||
|
|
||
|
logg = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
class OpMode(enum.Enum):
|
||
|
STDOUT = 'standard_output'
|
||
|
UNIX = 'unix_socket'
|
||
|
|
||
|
class Outputter:
|
||
|
|
||
|
def __init__(self, mode):
|
||
|
self.out = getattr(self, 'do_' + mode.value)
|
||
|
|
||
|
|
||
|
def do(self, hx, *args, **kwargs):
|
||
|
return self.out(hx, *args, **kwargs)
|
||
|
|
||
|
|
||
|
def do_standard_output(self, hx, *args, **kwargs):
|
||
|
return hx
|
||
|
|
||
|
|
||
|
def do_unix_socket(self, hx, *args, **kwargs):
|
||
|
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||
|
s.connect(kwargs['socket'])
|
||
|
s.send(hx.encode('utf-8'))
|
||
|
r = s.recv(64+4)
|
||
|
logg.debug('r {}'.format(r))
|
||
|
s.close()
|
||
|
return r[4:].decode('utf-8')
|