home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 January / maximum-cd-2011-01.iso / DiscContents / calibre-0.7.26.msi / file_1963 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-10-31  |  4.8 KB  |  134 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __docformat__ = 'restructuredtext en'
  5. import os
  6. import sys
  7. import threading
  8. import Queue
  9. import atexit
  10. import twisted
  11. from twisted.internet import defer, reactor
  12. from twisted.python import log, failure
  13. from IPython.kernel.error import FileTimeoutError
  14.  
  15. class ReactorInThread(threading.Thread):
  16.     
  17.     def run(self):
  18.         reactor.run(installSignalHandlers = 0)
  19.  
  20.     
  21.     def stop(self):
  22.         blockingCallFromThread(reactor.stop)
  23.         self.join()
  24.  
  25.  
  26. if twisted.version.major >= 8:
  27.     import twisted.internet.threads as twisted
  28.     
  29.     def blockingCallFromThread(f, *a, **kw):
  30.         return twisted.internet.threads.blockingCallFromThread(reactor, f, *a, **kw)
  31.  
  32. else:
  33.     
  34.     def blockingCallFromThread(f, *a, **kw):
  35.         reactor = reactor
  36.         import twisted.internet
  37.         queue = Queue.Queue()
  38.         
  39.         def _callFromThread():
  40.             result = defer.maybeDeferred(f, *a, **kw)
  41.             result.addBoth(queue.put)
  42.  
  43.         reactor.callFromThread(_callFromThread)
  44.         result = queue.get()
  45.         if isinstance(result, failure.Failure):
  46.             
  47.             try:
  48.                 result.raiseException()
  49.             except Exception:
  50.                 (None, None, None, None)
  51.                 e = (None, None, None, None)
  52.                 raise e
  53.             except:
  54.                 (None, None, None, None)<EXCEPTION MATCH>Exception
  55.             
  56.  
  57.         (None, None, None, None)
  58.         return result
  59.  
  60.  
  61. def parseResults(results):
  62.     return [ x[1] for x in results ]
  63.  
  64.  
  65. def gatherBoth(dlist, fireOnOneCallback = 0, fireOnOneErrback = 0, consumeErrors = 0, logErrors = 0):
  66.     d = DeferredList(dlist, fireOnOneCallback, fireOnOneErrback, consumeErrors, logErrors)
  67.     if not fireOnOneCallback:
  68.         d.addCallback(parseResults)
  69.     
  70.     return d
  71.  
  72. SUCCESS = True
  73. FAILURE = False
  74.  
  75. class DeferredList(defer.Deferred):
  76.     fireOnOneCallback = 0
  77.     fireOnOneErrback = 0
  78.     
  79.     def __init__(self, deferredList, fireOnOneCallback = 0, fireOnOneErrback = 0, consumeErrors = 0, logErrors = 0):
  80.         self.resultList = [
  81.             None] * len(deferredList)
  82.         defer.Deferred.__init__(self)
  83.         if len(deferredList) == 0 and not fireOnOneCallback:
  84.             self.callback(self.resultList)
  85.         
  86.         self.fireOnOneCallback = fireOnOneCallback
  87.         self.fireOnOneErrback = fireOnOneErrback
  88.         self.consumeErrors = consumeErrors
  89.         self.logErrors = logErrors
  90.         self.finishedCount = 0
  91.         index = 0
  92.         for deferred in deferredList:
  93.             deferred.addCallbacks(self._cbDeferred, self._cbDeferred, callbackArgs = (index, SUCCESS), errbackArgs = (index, FAILURE))
  94.             index = index + 1
  95.         
  96.  
  97.     
  98.     def _cbDeferred(self, result, index, succeeded):
  99.         self.resultList[index] = (succeeded, result)
  100.         self.finishedCount += 1
  101.         if not self.called:
  102.             if succeeded == SUCCESS and self.fireOnOneCallback:
  103.                 self.callback((result, index))
  104.             elif succeeded == FAILURE and self.fireOnOneErrback:
  105.                 self.errback(result)
  106.             elif self.finishedCount == len(self.resultList):
  107.                 self.callback(self.resultList)
  108.             
  109.         
  110.         if succeeded == FAILURE and self.logErrors:
  111.             log.err(result)
  112.         
  113.         if succeeded == FAILURE and self.consumeErrors:
  114.             result = None
  115.         
  116.         return result
  117.  
  118.  
  119.  
  120. def wait_for_file(filename, delay = 0.1, max_tries = 10):
  121.     d = defer.Deferred()
  122.     
  123.     def _test_for_file(filename, attempt = (None, None, None, 0)):
  124.         if attempt >= max_tries:
  125.             d.errback(FileTimeoutError('timeout waiting for file to be created: %s' % filename))
  126.         elif os.path.isfile(filename):
  127.             d.callback(True)
  128.         else:
  129.             reactor.callLater(delay, _test_for_file, filename, attempt + 1)
  130.  
  131.     _test_for_file(filename)
  132.     return d
  133.  
  134.