Skip to content

Commit

Permalink
Merge pull request ipython#754 from minrk/msg_id
Browse files Browse the repository at this point in the history
restore msg_id/msg_type aliases in top level of msg dict
  • Loading branch information
ellisonbg committed Sep 6, 2011
2 parents 3440795 + 36b8984 commit 65553e7
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 3 deletions.
10 changes: 8 additions & 2 deletions IPython/zmq/session.py
Expand Up @@ -357,7 +357,10 @@ def msg(self, msg_type, content=None, parent=None, subheader=None, header=None):
format, which is a list of message parts.
"""
msg = {}
msg['header'] = self.msg_header(msg_type) if header is None else header
header = self.msg_header(msg_type) if header is None else header
msg['header'] = header
msg['msg_id'] = header['msg_id']
msg['msg_type'] = header['msg_type']
msg['parent_header'] = {} if parent is None else extract_header(parent)
msg['content'] = {} if content is None else content
sub = {} if subheader is None else subheader
Expand Down Expand Up @@ -669,7 +672,10 @@ def unserialize(self, msg_list, content=True, copy=True):
raise ValueError("Invalid Signature: %r"%signature)
if not len(msg_list) >= minlen:
raise TypeError("malformed message, must have at least %i elements"%minlen)
message['header'] = self.unpack(msg_list[1])
header = self.unpack(msg_list[1])
message['header'] = header
message['msg_id'] = header['msg_id']
message['msg_type'] = header['msg_type']
message['parent_header'] = self.unpack(msg_list[2])
if content:
message['content'] = self.unpack(msg_list[3])
Expand Down
13 changes: 12 additions & 1 deletion IPython/zmq/tests/test_session.py
Expand Up @@ -47,20 +47,25 @@ class TestSession(SessionTestCase):
def test_msg(self):
"""message format"""
msg = self.session.msg('execute')
thekeys = set('header parent_header content'.split())
thekeys = set('header parent_header content msg_type msg_id'.split())
s = set(msg.keys())
self.assertEquals(s, thekeys)
self.assertTrue(isinstance(msg['content'],dict))
self.assertTrue(isinstance(msg['header'],dict))
self.assertTrue(isinstance(msg['parent_header'],dict))
self.assertTrue(isinstance(msg['msg_id'],str))
self.assertTrue(isinstance(msg['msg_type'],str))
self.assertEquals(msg['header']['msg_type'], 'execute')
self.assertEquals(msg['msg_type'], 'execute')

def test_serialize(self):
msg = self.session.msg('execute',content=dict(a=10))
msg_list = self.session.serialize(msg, ident=b'foo')
ident, msg_list = self.session.feed_identities(msg_list)
new_msg = self.session.unserialize(msg_list)
self.assertEquals(ident[0], b'foo')
self.assertEquals(new_msg['msg_id'],msg['msg_id'])
self.assertEquals(new_msg['msg_type'],msg['msg_type'])
self.assertEquals(new_msg['header'],msg['header'])
self.assertEquals(new_msg['content'],msg['content'])
self.assertEquals(new_msg['parent_header'],msg['parent_header'])
Expand All @@ -73,6 +78,8 @@ def test_send(self):
ident, msg_list = self.session.feed_identities(socket.data)
new_msg = self.session.unserialize(msg_list)
self.assertEquals(ident[0], b'foo')
self.assertEquals(new_msg['msg_id'],msg['msg_id'])
self.assertEquals(new_msg['msg_type'],msg['msg_type'])
self.assertEquals(new_msg['header'],msg['header'])
self.assertEquals(new_msg['content'],msg['content'])
self.assertEquals(new_msg['parent_header'],msg['parent_header'])
Expand All @@ -89,6 +96,8 @@ def test_send(self):
ident, msg_list = self.session.feed_identities(socket.data)
new_msg = self.session.unserialize(msg_list)
self.assertEquals(ident[0], b'foo')
self.assertEquals(new_msg['msg_id'],msg['msg_id'])
self.assertEquals(new_msg['msg_type'],msg['msg_type'])
self.assertEquals(new_msg['header'],msg['header'])
self.assertEquals(new_msg['content'],msg['content'])
self.assertEquals(new_msg['parent_header'],msg['parent_header'])
Expand All @@ -99,6 +108,8 @@ def test_send(self):
self.session.send(socket, msg, ident=b'foo', buffers=[b'bar'])
ident, new_msg = self.session.recv(socket)
self.assertEquals(ident[0], b'foo')
self.assertEquals(new_msg['msg_id'],msg['msg_id'])
self.assertEquals(new_msg['msg_type'],msg['msg_type'])
self.assertEquals(new_msg['header'],msg['header'])
self.assertEquals(new_msg['content'],msg['content'])
self.assertEquals(new_msg['parent_header'],msg['parent_header'])
Expand Down
4 changes: 4 additions & 0 deletions docs/source/development/messaging.txt
Expand Up @@ -108,6 +108,10 @@ generic structure::
# All recognized message type strings are listed below.
'msg_type' : str,
},
# The msg's unique identifier and type are stored in the header, but
# are also accessible at the top-level for convenience.
'msg_id' : uuid,
'msg_type' : str,

# In a chain of messages, the header from the parent is copied so that
# clients can track where messages come from.
Expand Down

0 comments on commit 65553e7

Please sign in to comment.