spacepaste

  1.  
  2. import sys
  3. import twisted.internet.defer
  4. import twisted.internet.reactor
  5. import twisted.python.log
  6. print "Twisted version", twisted.version
  7. print "Python version", sys.version
  8. class ExceptionToRaise(Exception):
  9. pass
  10. exception_to_raise = ExceptionToRaise()
  11. @twisted.internet.defer.inlineCallbacks
  12. def icb_error_maker():
  13. """
  14. Raises an exception implemented as an inline inlineCallbacks
  15. """
  16. raise exception_to_raise
  17. def pod_error_maker():
  18. """
  19. Raises an exception implemented as a plain old deferred
  20. """
  21. deferred = twisted.internet.defer.Deferred()
  22. deferred.errback(exception_to_raise)
  23. return deferred
  24. #ERROR_MAKER_TO_USE = icb_error_maker
  25. ERROR_MAKER_TO_USE = pod_error_maker
  26. @twisted.internet.defer.inlineCallbacks
  27. def intermediate_function3():
  28. print 'intermediate_function3 1'
  29. try:
  30. yield ERROR_MAKER_TO_USE()
  31. except BaseException as exception:
  32. print 'intermediate_function3 exception', repr(exception)
  33. raise
  34. print 'intermediate_function3 2'
  35. @twisted.internet.defer.inlineCallbacks
  36. def intermediate_function2():
  37. print 'intermediate_function2 1'
  38. try:
  39. yield intermediate_function3()
  40. except BaseException as exception:
  41. print 'intermediate_function2 exception', repr(exception)
  42. raise
  43. print 'intermediate_function2 2'
  44. @twisted.internet.defer.inlineCallbacks
  45. def intermediate_function1():
  46. print 'intermediate_function1 1'
  47. try:
  48. yield intermediate_function2()
  49. except BaseException as exception:
  50. print 'intermediate_function1 exception', repr(exception)
  51. raise
  52. print 'intermediate_function1 2'
  53. def run():
  54. d = intermediate_function1()
  55. d.addErrback(twisted.python.log.err)
  56. d.addBoth(lambda n: twisted.internet.reactor.stop())
  57. twisted.internet.reactor.callWhenRunning(run)
  58. twisted.internet.reactor.run()
  59.