home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- __docformat__ = 'restructuredtext en'
- import os
- import sys
- import threading
- import Queue
- import atexit
- import twisted
- from twisted.internet import defer, reactor
- from twisted.python import log, failure
- from IPython.kernel.error import FileTimeoutError
-
- class ReactorInThread(threading.Thread):
-
- def run(self):
- reactor.run(installSignalHandlers = 0)
-
-
- def stop(self):
- blockingCallFromThread(reactor.stop)
- self.join()
-
-
- if twisted.version.major >= 8:
- import twisted.internet.threads as twisted
-
- def blockingCallFromThread(f, *a, **kw):
- return twisted.internet.threads.blockingCallFromThread(reactor, f, *a, **kw)
-
- else:
-
- def blockingCallFromThread(f, *a, **kw):
- reactor = reactor
- import twisted.internet
- queue = Queue.Queue()
-
- def _callFromThread():
- result = defer.maybeDeferred(f, *a, **kw)
- result.addBoth(queue.put)
-
- reactor.callFromThread(_callFromThread)
- result = queue.get()
- if isinstance(result, failure.Failure):
-
- try:
- result.raiseException()
- except Exception:
- (None, None, None, None)
- e = (None, None, None, None)
- raise e
- except:
- (None, None, None, None)<EXCEPTION MATCH>Exception
-
-
- (None, None, None, None)
- return result
-
-
- def parseResults(results):
- return [ x[1] for x in results ]
-
-
- def gatherBoth(dlist, fireOnOneCallback = 0, fireOnOneErrback = 0, consumeErrors = 0, logErrors = 0):
- d = DeferredList(dlist, fireOnOneCallback, fireOnOneErrback, consumeErrors, logErrors)
- if not fireOnOneCallback:
- d.addCallback(parseResults)
-
- return d
-
- SUCCESS = True
- FAILURE = False
-
- class DeferredList(defer.Deferred):
- fireOnOneCallback = 0
- fireOnOneErrback = 0
-
- def __init__(self, deferredList, fireOnOneCallback = 0, fireOnOneErrback = 0, consumeErrors = 0, logErrors = 0):
- self.resultList = [
- None] * len(deferredList)
- defer.Deferred.__init__(self)
- if len(deferredList) == 0 and not fireOnOneCallback:
- self.callback(self.resultList)
-
- self.fireOnOneCallback = fireOnOneCallback
- self.fireOnOneErrback = fireOnOneErrback
- self.consumeErrors = consumeErrors
- self.logErrors = logErrors
- self.finishedCount = 0
- index = 0
- for deferred in deferredList:
- deferred.addCallbacks(self._cbDeferred, self._cbDeferred, callbackArgs = (index, SUCCESS), errbackArgs = (index, FAILURE))
- index = index + 1
-
-
-
- def _cbDeferred(self, result, index, succeeded):
- self.resultList[index] = (succeeded, result)
- self.finishedCount += 1
- if not self.called:
- if succeeded == SUCCESS and self.fireOnOneCallback:
- self.callback((result, index))
- elif succeeded == FAILURE and self.fireOnOneErrback:
- self.errback(result)
- elif self.finishedCount == len(self.resultList):
- self.callback(self.resultList)
-
-
- if succeeded == FAILURE and self.logErrors:
- log.err(result)
-
- if succeeded == FAILURE and self.consumeErrors:
- result = None
-
- return result
-
-
-
- def wait_for_file(filename, delay = 0.1, max_tries = 10):
- d = defer.Deferred()
-
- def _test_for_file(filename, attempt = (None, None, None, 0)):
- if attempt >= max_tries:
- d.errback(FileTimeoutError('timeout waiting for file to be created: %s' % filename))
- elif os.path.isfile(filename):
- d.callback(True)
- else:
- reactor.callLater(delay, _test_for_file, filename, attempt + 1)
-
- _test_for_file(filename)
- return d
-
-