Skip to content

Commit 674678d

Browse files
author
fortunado
committed
python stuff
1 parent 0bda8dc commit 674678d

13 files changed

Lines changed: 333 additions & 123 deletions

File tree

tests/test_events.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@
2626
from zerorpc import zmq
2727
import zerorpc
2828
from testutils import teardown, random_ipc_endpoint
29+
from zerorpc.serializers.default import Serializer
2930

3031
class MokupContext():
3132
_next_id = 0
3233

34+
serializer = Serializer()
35+
3336
def new_msgid(self):
3437
new_id = MokupContext._next_id
3538
MokupContext._next_id += 1
@@ -43,46 +46,46 @@ def test_context():
4346

4447
def test_event():
4548
context = MokupContext()
46-
event = zerorpc.Event('mylittleevent', (None,), context=context)
49+
event = zerorpc.Event('mylittleevent', (None,), {}, context=context)
4750
print event
4851
assert event.name == 'mylittleevent'
4952
assert event.header['message_id'] == 0
5053
assert event.args == (None,)
5154

52-
event = zerorpc.Event('mylittleevent2', ('42',), context=context)
55+
event = zerorpc.Event('mylittleevent2', ('42',), {}, context=context)
5356
print event
5457
assert event.name == 'mylittleevent2'
5558
assert event.header['message_id'] == 1
5659
assert event.args == ('42',)
5760

58-
event = zerorpc.Event('mylittleevent3', ('a', 42), context=context)
61+
event = zerorpc.Event('mylittleevent3', ('a', 42), {}, context=context)
5962
print event
6063
assert event.name == 'mylittleevent3'
6164
assert event.header['message_id'] == 2
6265
assert event.args == ('a', 42)
6366

64-
event = zerorpc.Event('mylittleevent4', ('b', 21), context=context)
67+
event = zerorpc.Event('mylittleevent4', ('b', 21), {}, context=context)
6568
print event
6669
assert event.name == 'mylittleevent4'
6770
assert event.header['message_id'] == 3
6871
assert event.args == ('b', 21)
6972

70-
packed = event.pack()
71-
unpacked = zerorpc.Event.unpack(packed)
73+
packed = event.pack(context.serializer)
74+
unpacked = zerorpc.Event.unpack(context.serializer, packed)
7275
print unpacked
7376

7477
assert unpacked.name == 'mylittleevent4'
7578
assert unpacked.header['message_id'] == 3
7679
assert unpacked.args == ('b', 21)
7780

78-
event = zerorpc.Event('mylittleevent5', ('c', 24, True),
81+
event = zerorpc.Event('mylittleevent5', ('c', 24, True), {},
7982
header={'lol': 'rofl'}, context=None)
8083
print event
8184
assert event.name == 'mylittleevent5'
8285
assert event.header['lol'] == 'rofl'
8386
assert event.args == ('c', 24, True)
8487

85-
event = zerorpc.Event('mod', (42,), context=context)
88+
event = zerorpc.Event('mod', (42,), {}, context=context)
8689
print event
8790
assert event.name == 'mod'
8891
assert event.header['message_id'] == 4

tests/test_python_usage.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from datetime import datetime
2+
from zerorpc import Context
3+
4+
__author__ = 'nemo'
5+
6+
from nose.tools import assert_raises
7+
import gevent
8+
import zerorpc
9+
from testutils import random_ipc_endpoint
10+
11+
12+
def test_kwargs():
13+
14+
class Srv(object):
15+
def echo(self, *args, **kwargs):
16+
return args, kwargs
17+
18+
endpoint = random_ipc_endpoint()
19+
20+
context = Context()
21+
context.register_serializer("pickle")
22+
23+
module = Srv()
24+
server = zerorpc.Server(module, context=context)
25+
server.bind(endpoint)
26+
gevent.spawn(server.run)
27+
28+
client = zerorpc.Client(context=context)
29+
client.connect(endpoint)
30+
31+
args = 1,2,3
32+
kwargs = {'a':7, 'b':8, 'now': datetime.now()}
33+
res = client.echo(*args, **kwargs)
34+
assert len(res) == 2
35+
assert res[0] == args
36+
assert len(res[1]) == 3
37+
assert 'a' in res[1] and 'b' in res[1] and isinstance(res[1]['now'], datetime)
38+
39+
client.close()
40+
server.close()

tests/test_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
# SOFTWARE.
2424

2525

26-
from nose.tools import assert_raises
26+
from nose.tools import *
2727
import gevent
2828

2929
from zerorpc import zmq

zerorpc/channel.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,14 @@ def close(self):
5555
if self._channel_dispatcher_task:
5656
self._channel_dispatcher_task.kill()
5757

58-
def create_event(self, name, args, xheader={}):
59-
return self._events.create_event(name, args, xheader)
58+
def create_event(self, name, args, kwargs = None, xheader=None):
59+
return self._events.create_event(name, args, kwargs, xheader)
6060

6161
def emit_event(self, event, identity=None):
6262
return self._events.emit_event(event, identity)
6363

64-
def emit(self, name, args, xheader={}):
65-
return self._events.emit(name, args, xheader)
64+
def emit(self, name, args, kwargs = None, xheader=None):
65+
return self._events.emit(name, args, kwargs, xheader)
6666

6767
def recv(self):
6868
if self._broadcast_queue is not None:
@@ -132,17 +132,17 @@ def close(self):
132132
del self._multiplexer._active_channels[self._channel_id]
133133
self._channel_id = None
134134

135-
def create_event(self, name, args, xheader={}):
136-
event = self._multiplexer.create_event(name, args, xheader)
135+
def create_event(self, name, args, kwargs=None, xheader=None):
136+
event = self._multiplexer.create_event(name, args, kwargs, xheader)
137137
if self._channel_id is None:
138138
self._channel_id = event.header['message_id']
139139
self._multiplexer._active_channels[self._channel_id] = self
140140
else:
141141
event.header['response_to'] = self._channel_id
142142
return event
143143

144-
def emit(self, name, args, xheader={}):
145-
event = self.create_event(name, args, xheader)
144+
def emit(self, name, args, kwargs=None, xheader=None):
145+
event = self.create_event(name, args, kwargs, xheader)
146146
self._multiplexer.emit_event(event, self._zmqid)
147147

148148
def emit_event(self, event):
@@ -219,11 +219,11 @@ def _recver(self):
219219
self.close()
220220
return
221221

222-
def create_event(self, name, args, xheader={}):
223-
return self._channel.create_event(name, args, xheader)
222+
def create_event(self, name, args, kwargs=None, xheader=None):
223+
return self._channel.create_event(name, args, kwargs, xheader)
224224

225225
def emit_event(self, event, block=True, timeout=None):
226-
if self._remote_queue_open_slots == 0:
226+
if not self._remote_queue_open_slots:
227227
if not block:
228228
return False
229229
self._remote_can_recv.clear()
@@ -236,8 +236,8 @@ def emit_event(self, event, block=True, timeout=None):
236236
raise
237237
return True
238238

239-
def emit(self, name, args, xheader={}, block=True, timeout=None):
240-
event = self.create_event(name, args, xheader)
239+
def emit(self, name, args, kwargs = None, xheader=None, block=True, timeout=None):
240+
event = self.create_event(name, args, kwargs, xheader)
241241
return self.emit_event(event, block, timeout)
242242

243243
def _request_data(self):

zerorpc/context.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@
2121
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2222
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2323
# SOFTWARE.
24-
25-
2624
import uuid
2725
import functools
2826
import random
2927

3028
import gevent_zmq as zmq
31-
29+
from .utils import load_by_path, Singleton
3230

3331
class Context(zmq.Context):
3432
_instance = None
33+
# __metaclass__ = Singleton
3534

3635
def __init__(self):
36+
super(Context, self).__init__()
3737
self._middlewares = []
3838
self._middlewares_hooks = {
3939
'resolve_endpoint': [],
@@ -44,6 +44,25 @@ def __init__(self):
4444
'inspect_error': []
4545
}
4646
self._reset_msgid()
47+
self._serializer = "default"
48+
49+
@property
50+
def serializer(self):
51+
if isinstance(self._serializer, basestring):
52+
self._serializer = self._get_serializer(self._serializer)
53+
54+
return self._serializer
55+
56+
57+
def _get_serializer(self, path):
58+
return load_by_path(
59+
".serializers.{0}.Serializer".format(path)
60+
)()
61+
62+
63+
def register_serializer(self, serializer):
64+
self._serializer = serializer
65+
4766

4867
@staticmethod
4968
def get_instance():

0 commit comments

Comments
 (0)