twistedutil.SimpleSpawnFactory: deliver exceptions to the handler if it does support it

This commit is contained in:
Denis Bilenko
2009-04-24 15:12:22 +07:00
parent 9d4762a4f9
commit 8c94ea283b

View File

@@ -20,6 +20,7 @@
# THE SOFTWARE. # THE SOFTWARE.
"""Basic twisted protocols converted to synchronous mode""" """Basic twisted protocols converted to synchronous mode"""
import sys
from twisted.internet.protocol import Protocol as twistedProtocol from twisted.internet.protocol import Protocol as twistedProtocol
from twisted.internet.error import ConnectionDone from twisted.internet.error import ConnectionDone
from twisted.internet.protocol import Factory, ClientFactory from twisted.internet.protocol import Factory, ClientFactory
@@ -384,7 +385,12 @@ class SimpleSpawnFactory(Factory):
gtransport_class = GreenTransport gtransport_class = GreenTransport
def __init__(self, handler, gtransport_class=None, *args, **kwargs): def __init__(self, handler, gtransport_class=None, *args, **kwargs):
self.handler = handler if callable(handler):
self.handler = handler
else:
self.handler = handler.send
if hasattr(handler, 'send_exception'):
self.exc_handler = handler.send_exception
if gtransport_class is not None: if gtransport_class is not None:
self.gtransport_class = gtransport_class self.gtransport_class = gtransport_class
self.args = args self.args = args
@@ -401,8 +407,12 @@ class SimpleSpawnFactory(Factory):
proc.spawn_greenlet(self._run_handler, gtransport, protocol) proc.spawn_greenlet(self._run_handler, gtransport, protocol)
def _run_handler(self, gtransport, protocol): def _run_handler(self, gtransport, protocol):
gtransport._init_transport() try:
self.handler(gtransport) gtransport._init_transport()
except Exception:
self.exc_handler(*sys.exc_info())
else:
self.handler(gtransport)
class SpawnFactory(SimpleSpawnFactory): class SpawnFactory(SimpleSpawnFactory):