aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/internet/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/internet/utils.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/internet/utils.py219
1 files changed, 0 insertions, 219 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/internet/utils.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/internet/utils.py
deleted file mode 100755
index 82508337..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/internet/utils.py
+++ /dev/null
@@ -1,219 +0,0 @@
-# -*- test-case-name: twisted.test.test_iutils -*-
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-Utility methods.
-"""
-
-import sys, warnings
-
-from twisted.internet import protocol, defer
-from twisted.python import failure, util as tputil
-
-try:
- import cStringIO as StringIO
-except ImportError:
- import StringIO
-
-def _callProtocolWithDeferred(protocol, executable, args, env, path, reactor=None):
- if reactor is None:
- from twisted.internet import reactor
-
- d = defer.Deferred()
- p = protocol(d)
- reactor.spawnProcess(p, executable, (executable,)+tuple(args), env, path)
- return d
-
-
-
-class _UnexpectedErrorOutput(IOError):
- """
- Standard error data was received where it was not expected. This is a
- subclass of L{IOError} to preserve backward compatibility with the previous
- error behavior of L{getProcessOutput}.
-
- @ivar processEnded: A L{Deferred} which will fire when the process which
- produced the data on stderr has ended (exited and all file descriptors
- closed).
- """
- def __init__(self, text, processEnded):
- IOError.__init__(self, "got stderr: %r" % (text,))
- self.processEnded = processEnded
-
-
-
-class _BackRelay(protocol.ProcessProtocol):
- """
- Trivial protocol for communicating with a process and turning its output
- into the result of a L{Deferred}.
-
- @ivar deferred: A L{Deferred} which will be called back with all of stdout
- and, if C{errortoo} is true, all of stderr as well (mixed together in
- one string). If C{errortoo} is false and any bytes are received over
- stderr, this will fire with an L{_UnexpectedErrorOutput} instance and
- the attribute will be set to C{None}.
-
- @ivar onProcessEnded: If C{errortoo} is false and bytes are received over
- stderr, this attribute will refer to a L{Deferred} which will be called
- back when the process ends. This C{Deferred} is also associated with
- the L{_UnexpectedErrorOutput} which C{deferred} fires with earlier in
- this case so that users can determine when the process has actually
- ended, in addition to knowing when bytes have been received via stderr.
- """
-
- def __init__(self, deferred, errortoo=0):
- self.deferred = deferred
- self.s = StringIO.StringIO()
- if errortoo:
- self.errReceived = self.errReceivedIsGood
- else:
- self.errReceived = self.errReceivedIsBad
-
- def errReceivedIsBad(self, text):
- if self.deferred is not None:
- self.onProcessEnded = defer.Deferred()
- err = _UnexpectedErrorOutput(text, self.onProcessEnded)
- self.deferred.errback(failure.Failure(err))
- self.deferred = None
- self.transport.loseConnection()
-
- def errReceivedIsGood(self, text):
- self.s.write(text)
-
- def outReceived(self, text):
- self.s.write(text)
-
- def processEnded(self, reason):
- if self.deferred is not None:
- self.deferred.callback(self.s.getvalue())
- elif self.onProcessEnded is not None:
- self.onProcessEnded.errback(reason)
-
-
-
-def getProcessOutput(executable, args=(), env={}, path=None, reactor=None,
- errortoo=0):
- """
- Spawn a process and return its output as a deferred returning a string.
-
- @param executable: The file name to run and get the output of - the
- full path should be used.
-
- @param args: the command line arguments to pass to the process; a
- sequence of strings. The first string should *NOT* be the
- executable's name.
-
- @param env: the environment variables to pass to the processs; a
- dictionary of strings.
-
- @param path: the path to run the subprocess in - defaults to the
- current directory.
-
- @param reactor: the reactor to use - defaults to the default reactor
-
- @param errortoo: If true, include stderr in the result. If false, if
- stderr is received the returned L{Deferred} will errback with an
- L{IOError} instance with a C{processEnded} attribute. The
- C{processEnded} attribute refers to a L{Deferred} which fires when the
- executed process ends.
- """
- return _callProtocolWithDeferred(lambda d:
- _BackRelay(d, errortoo=errortoo),
- executable, args, env, path,
- reactor)
-
-
-class _ValueGetter(protocol.ProcessProtocol):
-
- def __init__(self, deferred):
- self.deferred = deferred
-
- def processEnded(self, reason):
- self.deferred.callback(reason.value.exitCode)
-
-
-def getProcessValue(executable, args=(), env={}, path=None, reactor=None):
- """Spawn a process and return its exit code as a Deferred."""
- return _callProtocolWithDeferred(_ValueGetter, executable, args, env, path,
- reactor)
-
-
-class _EverythingGetter(protocol.ProcessProtocol):
-
- def __init__(self, deferred):
- self.deferred = deferred
- self.outBuf = StringIO.StringIO()
- self.errBuf = StringIO.StringIO()
- self.outReceived = self.outBuf.write
- self.errReceived = self.errBuf.write
-
- def processEnded(self, reason):
- out = self.outBuf.getvalue()
- err = self.errBuf.getvalue()
- e = reason.value
- code = e.exitCode
- if e.signal:
- self.deferred.errback((out, err, e.signal))
- else:
- self.deferred.callback((out, err, code))
-
-def getProcessOutputAndValue(executable, args=(), env={}, path=None,
- reactor=None):
- """Spawn a process and returns a Deferred that will be called back with
- its output (from stdout and stderr) and it's exit code as (out, err, code)
- If a signal is raised, the Deferred will errback with the stdout and
- stderr up to that point, along with the signal, as (out, err, signalNum)
- """
- return _callProtocolWithDeferred(_EverythingGetter, executable, args, env, path,
- reactor)
-
-def _resetWarningFilters(passthrough, addedFilters):
- for f in addedFilters:
- try:
- warnings.filters.remove(f)
- except ValueError:
- pass
- return passthrough
-
-
-def runWithWarningsSuppressed(suppressedWarnings, f, *a, **kw):
- """Run the function C{f}, but with some warnings suppressed.
-
- @param suppressedWarnings: A list of arguments to pass to filterwarnings.
- Must be a sequence of 2-tuples (args, kwargs).
- @param f: A callable, followed by its arguments and keyword arguments
- """
- for args, kwargs in suppressedWarnings:
- warnings.filterwarnings(*args, **kwargs)
- addedFilters = warnings.filters[:len(suppressedWarnings)]
- try:
- result = f(*a, **kw)
- except:
- exc_info = sys.exc_info()
- _resetWarningFilters(None, addedFilters)
- raise exc_info[0], exc_info[1], exc_info[2]
- else:
- if isinstance(result, defer.Deferred):
- result.addBoth(_resetWarningFilters, addedFilters)
- else:
- _resetWarningFilters(None, addedFilters)
- return result
-
-
-def suppressWarnings(f, *suppressedWarnings):
- """
- Wrap C{f} in a callable which suppresses the indicated warnings before
- invoking C{f} and unsuppresses them afterwards. If f returns a Deferred,
- warnings will remain suppressed until the Deferred fires.
- """
- def warningSuppressingWrapper(*a, **kw):
- return runWithWarningsSuppressed(suppressedWarnings, f, *a, **kw)
- return tputil.mergeFunctionMetadata(f, warningSuppressingWrapper)
-
-
-__all__ = [
- "runWithWarningsSuppressed", "suppressWarnings",
-
- "getProcessOutput", "getProcessValue", "getProcessOutputAndValue",
- ]