Python unit wrapper
This commit is contained in:
parent
2ca922d321
commit
4401e0ecc4
|
@ -0,0 +1,69 @@
|
||||||
|
import socket
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
YASEN_PATH = os.environ['PROJECTS'] +'/yasen'
|
||||||
|
UNITS_CONFIG_PATH = YASEN_PATH +'/configs/units.json'
|
||||||
|
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
print('Usage: wrapper.py unit')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
unit = sys.argv[1]
|
||||||
|
socket_path = '/tmp/unit_%s.sock' % unit
|
||||||
|
|
||||||
|
config = json.load(open(UNITS_CONFIG_PATH)).get(unit, None)
|
||||||
|
if not config:
|
||||||
|
print('Unknown unit: %s' % unit)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
unit_path = config['impl'].split('.')
|
||||||
|
unit_func = unit_path.pop()
|
||||||
|
unit_module = unit_path.pop()
|
||||||
|
unit_path = '.'.join(unit_path)
|
||||||
|
|
||||||
|
sys.path.append(YASEN_PATH)
|
||||||
|
units = __import__(unit_path, fromlist=[unit_module])
|
||||||
|
unit = getattr(units, unit_module)
|
||||||
|
actor = getattr(unit, unit_func)
|
||||||
|
|
||||||
|
def process(input):
|
||||||
|
data = json.loads(input.decode('utf-8'))
|
||||||
|
new_data = actor(data)
|
||||||
|
return json.dumps(new_data).encode('utf-8')
|
||||||
|
|
||||||
|
# Make sure the socket does not already exist
|
||||||
|
try: os.unlink(socket_path)
|
||||||
|
except OSError:
|
||||||
|
if os.path.exists(socket_path): raise
|
||||||
|
|
||||||
|
# Create a UDS socket
|
||||||
|
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
|
||||||
|
# Bind the socket to the port
|
||||||
|
print('Listening on socket %s' % socket_path)
|
||||||
|
sock.bind(socket_path)
|
||||||
|
|
||||||
|
# Listen for incoming connections
|
||||||
|
sock.listen(1)
|
||||||
|
|
||||||
|
BUF_SIZE = 1024
|
||||||
|
while True:
|
||||||
|
print('Accepting connections')
|
||||||
|
conn, _ = sock.accept()
|
||||||
|
try:
|
||||||
|
print('New connection')
|
||||||
|
data = b''
|
||||||
|
while True:
|
||||||
|
buf = conn.recv(BUF_SIZE)
|
||||||
|
data += buf
|
||||||
|
if len(buf) < BUF_SIZE:
|
||||||
|
break
|
||||||
|
|
||||||
|
print('Received in total %d bytes' % len(data))
|
||||||
|
|
||||||
|
new_data = process(data)
|
||||||
|
conn.sendall(new_data)
|
||||||
|
finally:
|
||||||
|
conn.close()
|
Loading…
Reference in New Issue