Add back stanza-specific exception handlers

(fixes the test suite too)
This commit is contained in:
mathieui 2015-02-23 17:43:35 +01:00
parent 11fbaa4241
commit 74b4ea20bf
No known key found for this signature in database
GPG key ID: C59F84CEEFD616E3

View file

@ -706,6 +706,7 @@ class XMLStream(asyncio.BaseProtocol):
handlers = self.__event_handlers.get(name, []) handlers = self.__event_handlers.get(name, [])
for handler in handlers: for handler in handlers:
handler_callback, disposable = handler handler_callback, disposable = handler
old_exception = getattr(data, 'exception', None)
# If the callback is a coroutine, schedule it instead of # If the callback is a coroutine, schedule it instead of
# running it directly # running it directly
@ -715,13 +716,19 @@ class XMLStream(asyncio.BaseProtocol):
try: try:
yield from cb(data) yield from cb(data)
except Exception as e: except Exception as e:
self.exception(e) if old_exception:
old_exception(e)
else:
self.exception(e)
asyncio.async(handler_callback_routine(handler_callback)) asyncio.async(handler_callback_routine(handler_callback))
else: else:
try: try:
handler_callback(data) handler_callback(data)
except Exception as e: except Exception as e:
self.exception(e) if old_exception:
old_exception(e)
else:
self.exception(e)
if disposable: if disposable:
# If the handler is disposable, we will go ahead and # If the handler is disposable, we will go ahead and
# remove it now instead of waiting for it to be # remove it now instead of waiting for it to be