diff --git a/setup.py b/setup.py index 8206147..1ed1798 100644 --- a/setup.py +++ b/setup.py @@ -38,6 +38,7 @@ requirements = [ 'msgpack>=0.5.2', 'pyzmq>=13.1.0', + 'msgpack-numpy>=0.4.3', 'future', ] diff --git a/tests/test_events.py b/tests/test_events.py index 7acf98e..c1c694c 100644 --- a/tests/test_events.py +++ b/tests/test_events.py @@ -197,3 +197,30 @@ def test_msgpack(): assert isinstance(event.header[u'message_id'], bytes) assert isinstance(event.header[u'v'], int) assert isinstance(event.args[0], str) + + +def test_msgpack_numpy(): + import numpy as np + context = zerorpc.Context() + test_array = np.arange(10) + event = zerorpc.Event(u'myevent', (test_array,), context=context) + print(event) + # note here that str is an unicode string in all Python version (thanks to + # the builtin str import). + assert isinstance(event.name, str) + for key in event.header.keys(): + assert isinstance(key, str) + assert isinstance(event.header[u'message_id'], bytes) + assert isinstance(event.header[u'v'], int) + assert isinstance(event.args[0], np.ndarray) + + packed = event.pack() + event = event.unpack(packed) + print(event) + assert isinstance(event.name, str) + for key in event.header.keys(): + assert isinstance(key, str) + assert isinstance(event.header[u'message_id'], bytes) + assert isinstance(event.header[u'v'], int) + assert isinstance(event.args[0], np.ndarray) + assert np.array_equal(test_array, event.args[0]) diff --git a/zerorpc/events.py b/zerorpc/events.py index 6939165..7f7c257 100644 --- a/zerorpc/events.py +++ b/zerorpc/events.py @@ -28,6 +28,9 @@ from builtins import range import msgpack +import msgpack_numpy as m +m.patch() # Monkeypatching msgpack to handle Numpy + import gevent.pool import gevent.queue import gevent.event