summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOnderwaater <onderwaa@esrf.fr>2015-10-06 14:05:58 +0200
committerOnderwaater <onderwaa@esrf.fr>2015-10-06 14:05:58 +0200
commit6c2085e33407a859c8d30fcd8e3b2e46d1214b9f (patch)
treea630b142c54db849f1d8a149208177d47a081679
parentcfccc948fddf39c347e1289d76ccd4906b28dac3 (diff)
include metadata in serialisation
-rwxr-xr-xBINoculars/main.py1
-rwxr-xr-xBINoculars/util.py68
-rwxr-xr-xgui.py6
3 files changed, 34 insertions, 41 deletions
diff --git a/BINoculars/main.py b/BINoculars/main.py
index d5b0aab..b9dd52f 100755
--- a/BINoculars/main.py
+++ b/BINoculars/main.py
@@ -35,7 +35,6 @@ class Main(object):
# distribute the configfile to space and to the metadata instance
spaceconf = self.config.copy()
- metadata = util.MetaData()
#input from either the configfile or the configsectiongroup is valid
self.dispatcher = backend.get_dispatcher(config.dispatcher, self, default='local')
diff --git a/BINoculars/util.py b/BINoculars/util.py
index e4dd767..f169050 100755
--- a/BINoculars/util.py
+++ b/BINoculars/util.py
@@ -361,7 +361,9 @@ class MetaBase(object):
sio.write(binascii.a2b_hex(section_dict[key]))
sio.seek(0)
section_dict[key] = numpy.load(sio)
- obj.add_section(section, data[section])
+ setattr(obj, section, data[section])
+ if section not in obj.sections:
+ obj.sections.append(section)
return obj
# a collection of metadata objects
@@ -426,9 +428,7 @@ class MetaData(object):
str += '}\n'
return str
-
def serialize(self):
- data = {}
return json.dumps(list(meta.serialize() for meta in self.metas))
@classmethod
@@ -789,23 +789,28 @@ def zpi_load(filename):
def serialize(space, command):
# first 24 bytes contain length of the message
message = StringIO.StringIO()
- message.write(struct.pack('QQQQ',0,0,0,0))
+ message.write(struct.pack('QQQQQQ',0,0,0,0,0,0))
message.write(command)
+ commandlength = message.len - 48
- commandlength = message.len - 32
+ message.write(space.config.serialize())
+ configlength = message.len - commandlength - 48
+ message.write(space.metadata.serialize())
+ metalength = message.len - configlength - commandlength - 48
+
numpy.save(message, space.axes.toarray())
- arraylength = message.len - commandlength - 32
+ arraylength = message.len - metalength - configlength - commandlength - 48
numpy.save(message, space.photons)
- photonlength = message.len - commandlength - arraylength - 32
+ photonlength = message.len - arraylength - metalength - configlength - commandlength - 48
numpy.save(message, space.contributions)
- contributionlength = message.len - commandlength - photonlength - arraylength - 32
+ contributionlength = message.len - photonlength - arraylength - metalength - configlength - commandlength - 48
message.seek(0)
- message.write(struct.pack('QQQQ', commandlength, arraylength, photonlength, contributionlength))
+ message.write(struct.pack('QQQQQQ', commandlength, configlength, metalength, arraylength, photonlength, contributionlength))
message.seek(0)
return message
@@ -816,15 +821,19 @@ def packet_slicer(length, size = 1024):
def socket_send(ip, port, mssg):
try:
- command, axes, photons, contributions = struct.unpack('QQQQ',mssg.read(32))
+ command, config, meta, axes, photons, contributions = struct.unpack('QQQQQQ',mssg.read(48))
mssg.seek(0)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, port))
- sock.send(mssg.read(32))
+ sock.send(mssg.read(48))
for packet in packet_slicer(command):
sock.send(mssg.read(packet))
+ for packet in packet_slicer(config):
+ sock.send(mssg.read(packet))
+ for packet in packet_slicer(meta):
+ sock.send(mssg.read(packet))
for packet in packet_slicer(axes):
sock.send(mssg.read(packet))
for packet in packet_slicer(photons):
@@ -837,32 +846,13 @@ def socket_send(ip, port, mssg):
def socket_recieve(RequestHandler):#pass one the handler to deal with incoming data
- comm, axes, photons, contributions = struct.unpack('QQQQ',RequestHandler.request.recv(32))
-
- command = ''
- for packet in packet_slicer(comm):
- command += RequestHandler.request.recv(packet)
-
- ax = StringIO.StringIO()
- for packet in packet_slicer(axes):
- ax.write(RequestHandler.request.recv(packet))
- ax.seek(0)
-
- axes = numpy.load(ax)
-
- phot = StringIO.StringIO()
- for packet in packet_slicer(photons):
- phot.write(RequestHandler.request.recv(packet))
- phot.seek(0)
-
- photons = numpy.load(phot)
-
- cont = StringIO.StringIO()
- for packet in packet_slicer(contributions):
- cont.write(RequestHandler.request.recv(packet))
- cont.seek(0)
-
- contributions = numpy.load(cont)
-
- return command, axes, photons, contributions
+ def get_msg(length):
+ msg = StringIO.StringIO()
+ for packet in packet_slicer(length):
+ msg.write(RequestHandler.request.recv(packet))
+ msg.seek(0)
+ return msg
+
+ command, config, metadata, axes, photons, contributions = tuple(get_msg(msglength) for msglength in struct.unpack('QQQQQQ',RequestHandler.request.recv(48)))
+ return command.read(), config.read(), metadata.read(), numpy.load(axes), numpy.load(photons), numpy.load(contributions)
diff --git a/gui.py b/gui.py
index 0c0b26a..80c30e9 100755
--- a/gui.py
+++ b/gui.py
@@ -456,8 +456,12 @@ class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
class SpaceTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
- command, axes, photons, contributions = BINoculars.util.socket_recieve(self)
+ command, config, metadata, axes, photons, contributions = BINoculars.util.socket_recieve(self)
space = BINoculars.space.Space(BINoculars.space.Axes.fromarray(axes))
+ space.config = BINoculars.util.ConfigFile.fromserial(config)
+ space.config.command = command
+ space.config.origin = 'server'
+ space.metadata = BINoculars.util.MetaData.fromserial(metadata)
space.photons = photons
space.contributions = contributions
self.server.q.put((command, space))