aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/application/internet.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/application/internet.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/application/internet.py408
1 files changed, 0 insertions, 408 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/application/internet.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/application/internet.py
deleted file mode 100755
index c0fa4e91..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/application/internet.py
+++ /dev/null
@@ -1,408 +0,0 @@
-# -*- test-case-name: twisted.application.test.test_internet,twisted.test.test_application,twisted.test.test_cooperator -*-
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-Reactor-based Services
-
-Here are services to run clients, servers and periodic services using
-the reactor.
-
-If you want to run a server service, L{StreamServerEndpointService} defines a
-service that can wrap an arbitrary L{IStreamServerEndpoint
-<twisted.internet.interfaces.IStreamServerEndpoint>}
-as an L{IService}. See also L{twisted.application.strports.service} for
-constructing one of these directly from a descriptive string.
-
-Additionally, this module (dynamically) defines various Service subclasses that
-let you represent clients and servers in a Service hierarchy. Endpoints APIs
-should be preferred for stream server services, but since those APIs do not yet
-exist for clients or datagram services, many of these are still useful.
-
-They are as follows::
-
- TCPServer, TCPClient,
- UNIXServer, UNIXClient,
- SSLServer, SSLClient,
- UDPServer, UDPClient,
- UNIXDatagramServer, UNIXDatagramClient,
- MulticastServer
-
-These classes take arbitrary arguments in their constructors and pass
-them straight on to their respective reactor.listenXXX or
-reactor.connectXXX calls.
-
-For example, the following service starts a web server on port 8080:
-C{TCPServer(8080, server.Site(r))}. See the documentation for the
-reactor.listen/connect* methods for more information.
-"""
-
-import warnings
-
-from twisted.python import log
-from twisted.application import service
-from twisted.internet import task
-
-from twisted.internet.defer import CancelledError
-
-
-def _maybeGlobalReactor(maybeReactor):
- """
- @return: the argument, or the global reactor if the argument is C{None}.
- """
- if maybeReactor is None:
- from twisted.internet import reactor
- return reactor
- else:
- return maybeReactor
-
-
-class _VolatileDataService(service.Service):
-
- volatile = []
-
- def __getstate__(self):
- d = service.Service.__getstate__(self)
- for attr in self.volatile:
- if attr in d:
- del d[attr]
- return d
-
-
-
-class _AbstractServer(_VolatileDataService):
- """
- @cvar volatile: list of attribute to remove from pickling.
- @type volatile: C{list}
-
- @ivar method: the type of method to call on the reactor, one of B{TCP},
- B{UDP}, B{SSL} or B{UNIX}.
- @type method: C{str}
-
- @ivar reactor: the current running reactor.
- @type reactor: a provider of C{IReactorTCP}, C{IReactorUDP},
- C{IReactorSSL} or C{IReactorUnix}.
-
- @ivar _port: instance of port set when the service is started.
- @type _port: a provider of L{twisted.internet.interfaces.IListeningPort}.
- """
-
- volatile = ['_port']
- method = None
- reactor = None
-
- _port = None
-
- def __init__(self, *args, **kwargs):
- self.args = args
- if 'reactor' in kwargs:
- self.reactor = kwargs.pop("reactor")
- self.kwargs = kwargs
-
-
- def privilegedStartService(self):
- service.Service.privilegedStartService(self)
- self._port = self._getPort()
-
-
- def startService(self):
- service.Service.startService(self)
- if self._port is None:
- self._port = self._getPort()
-
-
- def stopService(self):
- service.Service.stopService(self)
- # TODO: if startup failed, should shutdown skip stopListening?
- # _port won't exist
- if self._port is not None:
- d = self._port.stopListening()
- del self._port
- return d
-
-
- def _getPort(self):
- """
- Wrapper around the appropriate listen method of the reactor.
-
- @return: the port object returned by the listen method.
- @rtype: an object providing
- L{twisted.internet.interfaces.IListeningPort}.
- """
- return getattr(_maybeGlobalReactor(self.reactor),
- 'listen%s' % (self.method,))(*self.args, **self.kwargs)
-
-
-
-class _AbstractClient(_VolatileDataService):
- """
- @cvar volatile: list of attribute to remove from pickling.
- @type volatile: C{list}
-
- @ivar method: the type of method to call on the reactor, one of B{TCP},
- B{UDP}, B{SSL} or B{UNIX}.
- @type method: C{str}
-
- @ivar reactor: the current running reactor.
- @type reactor: a provider of C{IReactorTCP}, C{IReactorUDP},
- C{IReactorSSL} or C{IReactorUnix}.
-
- @ivar _connection: instance of connection set when the service is started.
- @type _connection: a provider of L{twisted.internet.interfaces.IConnector}.
- """
- volatile = ['_connection']
- method = None
- reactor = None
-
- _connection = None
-
- def __init__(self, *args, **kwargs):
- self.args = args
- if 'reactor' in kwargs:
- self.reactor = kwargs.pop("reactor")
- self.kwargs = kwargs
-
-
- def startService(self):
- service.Service.startService(self)
- self._connection = self._getConnection()
-
-
- def stopService(self):
- service.Service.stopService(self)
- if self._connection is not None:
- self._connection.disconnect()
- del self._connection
-
-
- def _getConnection(self):
- """
- Wrapper around the appropriate connect method of the reactor.
-
- @return: the port object returned by the connect method.
- @rtype: an object providing L{twisted.internet.interfaces.IConnector}.
- """
- return getattr(_maybeGlobalReactor(self.reactor),
- 'connect%s' % (self.method,))(*self.args, **self.kwargs)
-
-
-
-_doc={
-'Client':
-"""Connect to %(tran)s
-
-Call reactor.connect%(method)s when the service starts, with the
-arguments given to the constructor.
-""",
-'Server':
-"""Serve %(tran)s clients
-
-Call reactor.listen%(method)s when the service starts, with the
-arguments given to the constructor. When the service stops,
-stop listening. See twisted.internet.interfaces for documentation
-on arguments to the reactor method.
-""",
-}
-
-import types
-for tran in 'TCP UNIX SSL UDP UNIXDatagram Multicast'.split():
- for side in 'Server Client'.split():
- if tran == "Multicast" and side == "Client":
- continue
- base = globals()['_Abstract'+side]
- method = {'Generic': 'With'}.get(tran, tran)
- doc = _doc[side]%vars()
- klass = types.ClassType(tran+side, (base,),
- {'method': method, '__doc__': doc})
- globals()[tran+side] = klass
-
-
-
-class GenericServer(_AbstractServer):
- """
- Serve Generic clients
-
- Call reactor.listenWith when the service starts, with the arguments given to
- the constructor. When the service stops, stop listening. See
- twisted.internet.interfaces for documentation on arguments to the reactor
- method.
-
- This service is deprecated (because reactor.listenWith is deprecated).
- """
- method = 'With'
-
- def __init__(self, *args, **kwargs):
- warnings.warn(
- 'GenericServer was deprecated in Twisted 10.1.',
- category=DeprecationWarning,
- stacklevel=2)
- _AbstractServer.__init__(self, *args, **kwargs)
-
-
-
-class GenericClient(_AbstractClient):
- """
- Connect to Generic.
-
- Call reactor.connectWith when the service starts, with the arguments given
- to the constructor.
-
- This service is deprecated (because reactor.connectWith is deprecated).
- """
- method = 'With'
-
- def __init__(self, *args, **kwargs):
- warnings.warn(
- 'GenericClient was deprecated in Twisted 10.1.',
- category=DeprecationWarning,
- stacklevel=2)
- _AbstractClient.__init__(self, *args, **kwargs)
-
-
-
-class TimerService(_VolatileDataService):
-
- """Service to periodically call a function
-
- Every C{step} seconds call the given function with the given arguments.
- The service starts the calls when it starts, and cancels them
- when it stops.
- """
-
- volatile = ['_loop']
-
- def __init__(self, step, callable, *args, **kwargs):
- self.step = step
- self.call = (callable, args, kwargs)
-
- def startService(self):
- service.Service.startService(self)
- callable, args, kwargs = self.call
- # we have to make a new LoopingCall each time we're started, because
- # an active LoopingCall remains active when serialized. If
- # LoopingCall were a _VolatileDataService, we wouldn't need to do
- # this.
- self._loop = task.LoopingCall(callable, *args, **kwargs)
- self._loop.start(self.step, now=True).addErrback(self._failed)
-
- def _failed(self, why):
- # make a note that the LoopingCall is no longer looping, so we don't
- # try to shut it down a second time in stopService. I think this
- # should be in LoopingCall. -warner
- self._loop.running = False
- log.err(why)
-
- def stopService(self):
- if self._loop.running:
- self._loop.stop()
- return service.Service.stopService(self)
-
-
-
-class CooperatorService(service.Service):
- """
- Simple L{service.IService} which starts and stops a L{twisted.internet.task.Cooperator}.
- """
- def __init__(self):
- self.coop = task.Cooperator(started=False)
-
-
- def coiterate(self, iterator):
- return self.coop.coiterate(iterator)
-
-
- def startService(self):
- self.coop.start()
-
-
- def stopService(self):
- self.coop.stop()
-
-
-
-class StreamServerEndpointService(service.Service, object):
- """
- A L{StreamServerEndpointService} is an L{IService} which runs a server on a
- listening port described by an L{IStreamServerEndpoint
- <twisted.internet.interfaces.IStreamServerEndpoint>}.
-
- @ivar factory: A server factory which will be used to listen on the
- endpoint.
-
- @ivar endpoint: An L{IStreamServerEndpoint
- <twisted.internet.interfaces.IStreamServerEndpoint>} provider
- which will be used to listen when the service starts.
-
- @ivar _waitingForPort: a Deferred, if C{listen} has yet been invoked on the
- endpoint, otherwise None.
-
- @ivar _raiseSynchronously: Defines error-handling behavior for the case
- where C{listen(...)} raises an exception before C{startService} or
- C{privilegedStartService} have completed.
-
- @type _raiseSynchronously: C{bool}
-
- @since: 10.2
- """
-
- _raiseSynchronously = None
-
- def __init__(self, endpoint, factory):
- self.endpoint = endpoint
- self.factory = factory
- self._waitingForPort = None
-
-
- def privilegedStartService(self):
- """
- Start listening on the endpoint.
- """
- service.Service.privilegedStartService(self)
- self._waitingForPort = self.endpoint.listen(self.factory)
- raisedNow = []
- def handleIt(err):
- if self._raiseSynchronously:
- raisedNow.append(err)
- elif not err.check(CancelledError):
- log.err(err)
- self._waitingForPort.addErrback(handleIt)
- if raisedNow:
- raisedNow[0].raiseException()
-
-
- def startService(self):
- """
- Start listening on the endpoint, unless L{privilegedStartService} got
- around to it already.
- """
- service.Service.startService(self)
- if self._waitingForPort is None:
- self.privilegedStartService()
-
-
- def stopService(self):
- """
- Stop listening on the port if it is already listening, otherwise,
- cancel the attempt to listen.
-
- @return: a L{Deferred<twisted.internet.defer.Deferred>} which fires
- with C{None} when the port has stopped listening.
- """
- self._waitingForPort.cancel()
- def stopIt(port):
- if port is not None:
- return port.stopListening()
- d = self._waitingForPort.addCallback(stopIt)
- def stop(passthrough):
- self.running = False
- return passthrough
- d.addBoth(stop)
- return d
-
-
-
-__all__ = (['TimerService', 'CooperatorService', 'MulticastServer',
- 'StreamServerEndpointService'] +
- [tran+side
- for tran in 'Generic TCP UNIX SSL UDP UNIXDatagram'.split()
- for side in 'Server Client'.split()])