Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 049c0b3

Browse files
committed
Open pandora box: allow hooks for patterns
1 parent 5932723 commit 049c0b3

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

zerorpc/context.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ def __init__(self):
4444
'server_inspect_exception': [],
4545
'client_handle_remote_error': [],
4646
'client_before_request': [],
47-
'client_after_request': []
47+
'client_after_request': [],
48+
'client_patterns_list': [],
4849
}
4950
self._reset_msgid()
5051

@@ -217,3 +218,8 @@ def hook_client_after_request(self, request_event, reply_event, exception=None):
217218
"""
218219
for functor in self._hooks['client_after_request']:
219220
functor(request_event, reply_event, exception)
221+
222+
def hook_client_patterns_list(self, patterns):
223+
for functor in self._hooks['client_patterns_list']:
224+
patterns = functor(patterns)
225+
return patterns

zerorpc/core.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -206,27 +206,31 @@ def _handle_remote_error(self, event):
206206
return exception
207207

208208
def _select_pattern(self, event):
209-
for pattern in patterns.patterns_list:
209+
for pattern in self._context.hook_client_patterns_list(
210+
patterns.patterns_list):
210211
if pattern.accept_answer(event):
211212
return pattern
212-
msg = 'Unable to find a pattern for: {0}'.format(event)
213-
raise RuntimeError(msg)
213+
return None
214214

215215
def _process_response(self, request_event, bufchan, timeout):
216-
try:
217-
reply_event = bufchan.recv(timeout)
218-
pattern = self._select_pattern(reply_event)
219-
return pattern.process_answer(self._context, bufchan, request_event,
220-
reply_event, self._handle_remote_error)
221-
except TimeoutExpired:
216+
def raise_error(ex):
222217
bufchan.close()
223-
ex = TimeoutExpired(timeout,
224-
'calling remote method {0}'.format(request_event.name))
225218
self._context.hook_client_after_request(request_event, None, ex)
226219
raise ex
227-
except:
228-
bufchan.close()
229-
raise
220+
221+
try:
222+
reply_event = bufchan.recv(timeout=timeout)
223+
except TimeoutExpired:
224+
raise_error(TimeoutExpired(timeout,
225+
'calling remote method {0}'.format(request_event.name)))
226+
227+
pattern = self._select_pattern(reply_event)
228+
if pattern is None:
229+
raise_error(RuntimeError(
230+
'Unable to find a pattern for: {0}'.format(request_event)))
231+
232+
return pattern.process_answer(self._context, bufchan, request_event,
233+
reply_event, self._handle_remote_error)
230234

231235
def __call__(self, method, *args, **kargs):
232236
timeout = kargs.get('timeout', self._timeout)

0 commit comments

Comments
 (0)