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

Skip to content

Commit b656001

Browse files
author
Louis Opter
committed
Call the inspect_error middleware hook in Puller
Puller is unrelated with ServerBase (the REQ/REP base server-side class) and the call to the inspect_error middleware hook introduced in 0.2.0 was just missing.
1 parent 5547843 commit b656001

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

tests/test_middleware.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,3 +564,45 @@ def echo(self, msg):
564564
server.close()
565565

566566
assert middleware.called is True
567+
568+
def test_inspect_error_middleware_puller():
569+
570+
class InspectErrorMiddleware(Tracer):
571+
def __init__(self, barrier):
572+
self.called = False
573+
self._barrier = barrier
574+
Tracer.__init__(self, identity='[server]')
575+
576+
def inspect_error(self, task_context, exc_info):
577+
assert 'trace_id' in task_context
578+
exc_type, exc_value, exc_traceback = exc_info
579+
self.called = True
580+
self._barrier.set()
581+
582+
class Srv(object):
583+
def echo(self, msg):
584+
raise RuntimeError(msg)
585+
586+
endpoint = random_ipc_endpoint()
587+
588+
barrier = gevent.event.Event()
589+
middleware = InspectErrorMiddleware(barrier)
590+
ctx = zerorpc.Context()
591+
ctx.register_middleware(middleware)
592+
593+
module = Srv()
594+
server = zerorpc.Puller(module, context=ctx)
595+
server.bind(endpoint)
596+
gevent.spawn(server.run)
597+
598+
client = zerorpc.Pusher()
599+
client.connect(endpoint)
600+
601+
barrier.clear()
602+
client.echo('This is a test which should call the InspectErrorMiddleware')
603+
barrier.wait()
604+
605+
client.close()
606+
server.close()
607+
608+
assert middleware.called is True

zerorpc/core.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,14 @@ def _receiver(self):
320320
self._methods[event.name],
321321
*event.args)
322322
except Exception:
323-
traceback.print_exc(file=sys.stderr)
323+
exc_type, exc_value, exc_traceback = sys.exc_info()
324+
try:
325+
traceback.print_exception(exc_type, exc_value, exc_traceback,
326+
file=sys.stderr)
327+
self._context.middleware_inspect_error(exc_type, exc_value,
328+
exc_traceback)
329+
finally:
330+
del exc_traceback
324331

325332
def run(self):
326333
self._receiver_task = gevent.spawn(self._receiver)

0 commit comments

Comments
 (0)