Index: third_party/twisted_8_1/twisted/internet/interfaces.py |
diff --git a/third_party/twisted_8_1/twisted/internet/interfaces.py b/third_party/twisted_8_1/twisted/internet/interfaces.py |
deleted file mode 100644 |
index d7a45210e44cec87df70e68d40c3fdad6bdc4630..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/internet/interfaces.py |
+++ /dev/null |
@@ -1,1417 +0,0 @@ |
-# Copyright (c) 2001-2008 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
- |
-""" |
-Interface documentation. |
- |
-Maintainer: U{Itamar Shtull-Trauring<mailto:twisted@itamarst.org>} |
-""" |
- |
-from zope.interface import Interface |
- |
- |
-class IAddress(Interface): |
- """An address, e.g. a TCP (host, port). |
- |
- Default implementations are in L{twisted.internet.address}. |
- """ |
- |
- |
-### Reactor Interfaces |
- |
-class IConnector(Interface): |
- """Object used to interface between connections and protocols. |
- |
- Each IConnector manages one connection. |
- """ |
- |
- def stopConnecting(): |
- """Stop attempting to connect.""" |
- |
- def disconnect(): |
- """Disconnect regardless of the connection state. |
- |
- If we are connected, disconnect, if we are trying to connect, |
- stop trying. |
- """ |
- |
- def connect(): |
- """Try to connect to remote address.""" |
- |
- def getDestination(): |
- """Return destination this will try to connect to. |
- |
- @return: An object which provides L{IAddress}. |
- """ |
- |
- |
-class IResolverSimple(Interface): |
- def getHostByName(name, timeout = (1, 3, 11, 45)): |
- """Resolve the domain name C{name} into an IP address. |
- |
- @type name: C{str} |
- @type timeout: C{tuple} |
- @rtype: L{twisted.internet.defer.Deferred} |
- @return: The callback of the Deferred that is returned will be |
- passed a string that represents the IP address of the specified |
- name, or the errback will be called if the lookup times out. If |
- multiple types of address records are associated with the name, |
- A6 records will be returned in preference to AAAA records, which |
- will be returned in preference to A records. If there are multiple |
- records of the type to be returned, one will be selected at random. |
- |
- @raise twisted.internet.defer.TimeoutError: Raised (asynchronously) |
- if the name cannot be resolved within the specified timeout period. |
- """ |
- |
-class IResolver(IResolverSimple): |
- def lookupRecord(name, cls, type, timeout = 10): |
- """Lookup the records associated with the given name |
- that are of the given type and in the given class. |
- """ |
- |
- def query(query, timeout = 10): |
- """Interpret and dispatch a query object to the appropriate |
- lookup* method. |
- """ |
- |
- def lookupAddress(name, timeout = 10): |
- """Lookup the A records associated with C{name}.""" |
- |
- def lookupAddress6(name, timeout = 10): |
- """Lookup all the A6 records associated with C{name}.""" |
- |
- def lookupIPV6Address(name, timeout = 10): |
- """Lookup all the AAAA records associated with C{name}.""" |
- |
- def lookupMailExchange(name, timeout = 10): |
- """Lookup the MX records associated with C{name}.""" |
- |
- def lookupNameservers(name, timeout = 10): |
- """Lookup the the NS records associated with C{name}.""" |
- |
- def lookupCanonicalName(name, timeout = 10): |
- """Lookup the CNAME records associated with C{name}.""" |
- |
- def lookupMailBox(name, timeout = 10): |
- """Lookup the MB records associated with C{name}.""" |
- |
- def lookupMailGroup(name, timeout = 10): |
- """Lookup the MG records associated with C{name}.""" |
- |
- def lookupMailRename(name, timeout = 10): |
- """Lookup the MR records associated with C{name}.""" |
- |
- def lookupPointer(name, timeout = 10): |
- """Lookup the PTR records associated with C{name}.""" |
- |
- def lookupAuthority(name, timeout = 10): |
- """Lookup the SOA records associated with C{name}.""" |
- |
- def lookupNull(name, timeout = 10): |
- """Lookup the NULL records associated with C{name}.""" |
- |
- def lookupWellKnownServices(name, timeout = 10): |
- """Lookup the WKS records associated with C{name}.""" |
- |
- def lookupHostInfo(name, timeout = 10): |
- """Lookup the HINFO records associated with C{name}.""" |
- |
- def lookupMailboxInfo(name, timeout = 10): |
- """Lookup the MINFO records associated with C{name}.""" |
- |
- def lookupText(name, timeout = 10): |
- """Lookup the TXT records associated with C{name}.""" |
- |
- def lookupResponsibility(name, timeout = 10): |
- """Lookup the RP records associated with C{name}.""" |
- |
- def lookupAFSDatabase(name, timeout = 10): |
- """Lookup the AFSDB records associated with C{name}.""" |
- |
- def lookupService(name, timeout = 10): |
- """Lookup the SRV records associated with C{name}.""" |
- |
- def lookupAllRecords(name, timeout = 10): |
- """Lookup all records associated with C{name}.""" |
- |
- def lookupZone(name, timeout = 10): |
- """Perform a zone transfer for the given C{name}.""" |
- |
- |
-class IReactorArbitrary(Interface): |
- def listenWith(portType, *args, **kw): |
- """Start an instance of the given C{portType} listening. |
- |
- @type portType: type which implements L{IListeningPort} |
- |
- @param portType: The object given by C{portType(*args, **kw)} will be |
- started listening. |
- |
- @return: an object which provides L{IListeningPort}. |
- """ |
- |
- def connectWith(connectorType, *args, **kw): |
- """ |
- Start an instance of the given C{connectorType} connecting. |
- |
- @type connectorType: type which implements L{IConnector} |
- |
- @param connectorType: The object given by C{connectorType(*args, **kw)} |
- will be started connecting. |
- |
- @return: An object which provides L{IConnector}. |
- """ |
- |
-class IReactorTCP(Interface): |
- |
- def listenTCP(port, factory, backlog=50, interface=''): |
- """Connects a given protocol factory to the given numeric TCP/IP port. |
- |
- @param port: a port number on which to listen |
- |
- @param factory: a L{twisted.internet.protocol.ServerFactory} instance |
- |
- @param backlog: size of the listen queue |
- |
- @param interface: the hostname to bind to, defaults to '' (all) |
- |
- @return: an object that provides L{IListeningPort}. |
- |
- @raise CannotListenError: as defined here |
- L{twisted.internet.error.CannotListenError}, |
- if it cannot listen on this port (e.g., it |
- cannot bind to the required port number) |
- """ |
- |
- def connectTCP(host, port, factory, timeout=30, bindAddress=None): |
- """Connect a TCP client. |
- |
- @param host: a host name |
- |
- @param port: a port number |
- |
- @param factory: a L{twisted.internet.protocol.ClientFactory} instance |
- |
- @param timeout: number of seconds to wait before assuming the |
- connection has failed. |
- |
- @param bindAddress: a (host, port) tuple of local address to bind |
- to, or None. |
- |
- @return: An object which provides L{IConnector}. This connector will |
- call various callbacks on the factory when a connection is |
- made, failed, or lost - see |
- L{ClientFactory<twisted.internet.protocol.ClientFactory>} |
- docs for details. |
- """ |
- |
-class IReactorSSL(Interface): |
- |
- def connectSSL(host, port, factory, contextFactory, timeout=30, bindAddress=None): |
- """Connect a client Protocol to a remote SSL socket. |
- |
- @param host: a host name |
- |
- @param port: a port number |
- |
- @param factory: a L{twisted.internet.protocol.ClientFactory} instance |
- |
- @param contextFactory: a L{twisted.internet.ssl.ClientContextFactory} object. |
- |
- @param timeout: number of seconds to wait before assuming the |
- connection has failed. |
- |
- @param bindAddress: a (host, port) tuple of local address to bind to, |
- or C{None}. |
- |
- @return: An object which provides L{IConnector}. |
- """ |
- |
- def listenSSL(port, factory, contextFactory, backlog=50, interface=''): |
- """ |
- Connects a given protocol factory to the given numeric TCP/IP port. |
- The connection is a SSL one, using contexts created by the context |
- factory. |
- |
- @param port: a port number on which to listen |
- |
- @param factory: a L{twisted.internet.protocol.ServerFactory} instance |
- |
- @param contextFactory: a L{twisted.internet.ssl.ContextFactory} instance |
- |
- @param backlog: size of the listen queue |
- |
- @param interface: the hostname to bind to, defaults to '' (all) |
- """ |
- |
- |
-class IReactorUNIX(Interface): |
- """UNIX socket methods.""" |
- |
- def connectUNIX(address, factory, timeout=30, checkPID=0): |
- """Connect a client protocol to a UNIX socket. |
- |
- @param address: a path to a unix socket on the filesystem. |
- |
- @param factory: a L{twisted.internet.protocol.ClientFactory} instance |
- |
- @param timeout: number of seconds to wait before assuming the connection |
- has failed. |
- |
- @param checkPID: if True, check for a pid file to verify that a server |
- is listening. |
- |
- @return: An object which provides L{IConnector}. |
- """ |
- |
- def listenUNIX(address, factory, backlog=50, mode=0666, wantPID=0): |
- """Listen on a UNIX socket. |
- |
- @param address: a path to a unix socket on the filesystem. |
- |
- @param factory: a L{twisted.internet.protocol.Factory} instance. |
- |
- @param backlog: number of connections to allow in backlog. |
- |
- @param mode: mode to set on the unix socket. |
- |
- @param wantPID: if True, create a pidfile for the socket. |
- |
- @return: An object which provides L{IListeningPort}. |
- """ |
- |
- |
-class IReactorUNIXDatagram(Interface): |
- """datagram UNIX socket methods.""" |
- |
- def connectUNIXDatagram(address, protocol, maxPacketSize=8192, mode=0666, bindAddress=None): |
- """Connect a client protocol to a datagram UNIX socket. |
- |
- @param address: a path to a unix socket on the filesystem. |
- |
- @param protocol: a L{twisted.internet.protocol.ConnectedDatagramProtocol} instance |
- |
- @param maxPacketSize: maximum packet size to accept |
- |
- @param mode: mode to set on the unix socket. |
- |
- @param bindAddress: address to bind to |
- |
- @return: An object which provides L{IConnector}. |
- """ |
- |
- def listenUNIXDatagram(address, protocol, maxPacketSize=8192, mode=0666): |
- """Listen on a datagram UNIX socket. |
- |
- @param address: a path to a unix socket on the filesystem. |
- |
- @param protocol: a L{twisted.internet.protocol.DatagramProtocol} instance. |
- |
- @param maxPacketSize: maximum packet size to accept |
- |
- @param mode: mode to set on the unix socket. |
- |
- @return: An object which provides L{IListeningPort}. |
- """ |
- |
- |
-class IReactorUDP(Interface): |
- """UDP socket methods. |
- |
- IMPORTANT: This is an experimental new interface. It may change |
- without backwards compatability. Suggestions are welcome. |
- """ |
- |
- def listenUDP(port, protocol, interface='', maxPacketSize=8192): |
- """Connects a given DatagramProtocol to the given numeric UDP port. |
- |
- @return: object which provides L{IListeningPort}. |
- """ |
- |
- def connectUDP(remotehost, remoteport, protocol, localport=0, |
- interface='', maxPacketSize=8192): |
- """DEPRECATED. |
- |
- Connects a L{twisted.internet.protocol.ConnectedDatagramProtocol} |
- instance to a UDP port. |
- """ |
- |
- |
-class IReactorMulticast(Interface): |
- """UDP socket methods that support multicast. |
- |
- IMPORTANT: This is an experimental new interface. It may change |
- without backwards compatability. Suggestions are welcome. |
- """ |
- |
- def listenMulticast(port, protocol, interface='', maxPacketSize=8192, |
- listenMultiple=False): |
- """ |
- Connects a given |
- L{DatagramProtocol<twisted.internet.protocol.DatagramProtocol>} to the |
- given numeric UDP port. |
- |
- @param listenMultiple: boolean indicating whether multiple sockets can |
- bind to same UDP port. |
- |
- @returns: An object which provides L{IListeningPort}. |
- """ |
- |
- |
-class IReactorProcess(Interface): |
- |
- def spawnProcess(processProtocol, executable, args=(), env={}, path=None, |
- uid=None, gid=None, usePTY=0, childFDs=None): |
- """ |
- Spawn a process, with a process protocol. |
- |
- @type processProtocol: L{IProcessProtocol} provider |
- @param processProtocol: An object which will be notified of all |
- events related to the created process. |
- |
- @param executable: the file name to spawn - 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 be the |
- executable's name. |
- |
- @param env: the environment variables to pass to the processs; a |
- dictionary of strings. If 'None', use os.environ. |
- |
- @param path: the path to run the subprocess in - defaults to the |
- current directory. |
- |
- @param uid: user ID to run the subprocess as. (Only available on |
- POSIX systems.) |
- |
- @param gid: group ID to run the subprocess as. (Only available on |
- POSIX systems.) |
- |
- @param usePTY: if true, run this process in a pseudo-terminal. |
- optionally a tuple of (masterfd, slavefd, ttyname), |
- in which case use those file descriptors. |
- (Not available on all systems.) |
- |
- @param childFDs: A dictionary mapping file descriptors in the new child |
- process to an integer or to the string 'r' or 'w'. |
- |
- If the value is an integer, it specifies a file |
- descriptor in the parent process which will be mapped |
- to a file descriptor (specified by the key) in the |
- child process. This is useful for things like inetd |
- and shell-like file redirection. |
- |
- If it is the string 'r', a pipe will be created and |
- attached to the child at that file descriptor: the |
- child will be able to write to that file descriptor |
- and the parent will receive read notification via the |
- L{IProcessProtocol.childDataReceived} callback. This |
- is useful for the child's stdout and stderr. |
- |
- If it is the string 'w', similar setup to the previous |
- case will occur, with the pipe being readable by the |
- child instead of writeable. The parent process can |
- write to that file descriptor using |
- L{IProcessTransport.writeToChild}. This is useful for |
- the child's stdin. |
- |
- If childFDs is not passed, the default behaviour is to |
- use a mapping that opens the usual stdin/stdout/stderr |
- pipes. |
- |
- @see: L{twisted.internet.protocol.ProcessProtocol} |
- |
- @return: An object which provides L{IProcessTransport}. |
- |
- @raise OSError: Raised with errno EAGAIN or ENOMEM if there are |
- insufficient system resources to create a new process. |
- """ |
- |
-class IReactorTime(Interface): |
- """ |
- Time methods that a Reactor should implement. |
- """ |
- |
- def seconds(): |
- """ |
- Get the current time in seconds. |
- |
- @return: A number-like object of some sort. |
- """ |
- |
- |
- def callLater(delay, callable, *args, **kw): |
- """ |
- Call a function later. |
- |
- @type delay: C{float} |
- @param delay: the number of seconds to wait. |
- |
- @param callable: the callable object to call later. |
- |
- @param args: the arguments to call it with. |
- |
- @param kw: the keyword arguments to call it with. |
- |
- @return: An object which provides L{IDelayedCall} and can be used to |
- cancel the scheduled call, by calling its C{cancel()} method. |
- It also may be rescheduled by calling its C{delay()} or |
- C{reset()} methods. |
- """ |
- |
- def cancelCallLater(callID): |
- """ |
- This method is deprecated. |
- |
- Cancel a call that would happen later. |
- |
- @param callID: this is an opaque identifier returned from C{callLater} |
- that will be used to cancel a specific call. |
- |
- @raise ValueError: if the callID is not recognized. |
- """ |
- |
- def getDelayedCalls(): |
- """ |
- Retrieve all currently scheduled delayed calls. |
- |
- @return: A tuple of all L{IDelayedCall} providers representing all |
- currently scheduled calls. This is everything that has been |
- returned by C{callLater} but not yet called or canceled. |
- """ |
- |
- |
-class IDelayedCall(Interface): |
- """ |
- A scheduled call. |
- |
- There are probably other useful methods we can add to this interface; |
- suggestions are welcome. |
- """ |
- |
- def getTime(): |
- """ |
- Get time when delayed call will happen. |
- |
- @return: time in seconds since epoch (a float). |
- """ |
- |
- def cancel(): |
- """ |
- Cancel the scheduled call. |
- |
- @raises twisted.internet.error.AlreadyCalled: if the call has already |
- happened. |
- @raises twisted.internet.error.AlreadyCancelled: if the call has already |
- been cancelled. |
- """ |
- |
- def delay(secondsLater): |
- """ |
- Delay the scheduled call. |
- |
- @param secondsLater: how many seconds from its current firing time to delay |
- |
- @raises twisted.internet.error.AlreadyCalled: if the call has already |
- happened. |
- @raises twisted.internet.error.AlreadyCancelled: if the call has already |
- been cancelled. |
- """ |
- |
- def reset(secondsFromNow): |
- """ |
- Reset the scheduled call's timer. |
- |
- @param secondsFromNow: how many seconds from now it should fire, |
- equivalent to C{.cancel()} and then doing another |
- C{reactor.callLater(secondsLater, ...)} |
- |
- @raises twisted.internet.error.AlreadyCalled: if the call has already |
- happened. |
- @raises twisted.internet.error.AlreadyCancelled: if the call has already |
- been cancelled. |
- """ |
- |
- def active(): |
- """ |
- @return: True if this call is still active, False if it has been |
- called or cancelled. |
- """ |
- |
-class IReactorThreads(Interface): |
- """Dispatch methods to be run in threads. |
- |
- Internally, this should use a thread pool and dispatch methods to them. |
- """ |
- |
- def callInThread(callable, *args, **kwargs): |
- """Run the callable object in a separate thread. |
- """ |
- |
- def callFromThread(callable, *args, **kw): |
- """Cause a function to be executed by the reactor thread. |
- |
- Use this method when you want to run a function in the reactor's thread |
- from another thread. Calling callFromThread should wake up the main |
- thread (where reactor.run() is executing) and run the given callable in |
- that thread. |
- |
- Obviously, the callable must be thread safe. (If you want to call a |
- function in the next mainloop iteration, but you're in the same thread, |
- use callLater with a delay of 0.) |
- """ |
- |
- def suggestThreadPoolSize(size): |
- """ |
- Suggest the size of the internal threadpool used to dispatch functions |
- passed to L{callInThread}. |
- """ |
- |
- |
-class IReactorCore(Interface): |
- """Core methods that a Reactor must implement. |
- """ |
- |
- def resolve(name, timeout=10): |
- """Return a L{twisted.internet.defer.Deferred} that will resolve a hostname. |
- """ |
- |
- |
- def run(): |
- """Fire 'startup' System Events, move the reactor to the 'running' |
- state, then run the main loop until it is stopped with stop() or |
- crash(). |
- """ |
- |
- def stop(): |
- """Fire 'shutdown' System Events, which will move the reactor to the |
- 'stopped' state and cause reactor.run() to exit. """ |
- |
- def crash(): |
- """Stop the main loop *immediately*, without firing any system events. |
- |
- This is named as it is because this is an extremely "rude" thing to do; |
- it is possible to lose data and put your system in an inconsistent |
- state by calling this. However, it is necessary, as sometimes a system |
- can become wedged in a pre-shutdown call. |
- """ |
- |
- def iterate(delay=0): |
- """Run the main loop's I/O polling function for a period of time. |
- |
- This is most useful in applications where the UI is being drawn "as |
- fast as possible", such as games. All pending L{IDelayedCall}s will |
- be called. |
- |
- The reactor must have been started (via the run() method) prior to |
- any invocations of this method. It must also be stopped manually |
- after the last call to this method (via the stop() method). This |
- method is not re-entrant: you must not call it recursively; in |
- particular, you must not call it while the reactor is running. |
- """ |
- |
- def fireSystemEvent(eventType): |
- """Fire a system-wide event. |
- |
- System-wide events are things like 'startup', 'shutdown', and |
- 'persist'. |
- """ |
- |
- def addSystemEventTrigger(phase, eventType, callable, *args, **kw): |
- """Add a function to be called when a system event occurs. |
- |
- Each "system event" in Twisted, such as 'startup', 'shutdown', and |
- 'persist', has 3 phases: 'before', 'during', and 'after' (in that |
- order, of course). These events will be fired internally by the |
- Reactor. |
- |
- An implementor of this interface must only implement those events |
- described here. |
- |
- Callbacks registered for the "before" phase may return either None or a |
- Deferred. The "during" phase will not execute until all of the |
- Deferreds from the "before" phase have fired. |
- |
- Once the "during" phase is running, all of the remaining triggers must |
- execute; their return values must be ignored. |
- |
- @param phase: a time to call the event -- either the string 'before', |
- 'after', or 'during', describing when to call it |
- relative to the event's execution. |
- |
- @param eventType: this is a string describing the type of event. |
- |
- @param callable: the object to call before shutdown. |
- |
- @param args: the arguments to call it with. |
- |
- @param kw: the keyword arguments to call it with. |
- |
- @return: an ID that can be used to remove this call with |
- removeSystemEventTrigger. |
- """ |
- |
- def removeSystemEventTrigger(triggerID): |
- """Removes a trigger added with addSystemEventTrigger. |
- |
- @param triggerID: a value returned from addSystemEventTrigger. |
- |
- @raise KeyError: If there is no system event trigger for the given |
- C{triggerID}. |
- |
- @raise ValueError: If there is no system event trigger for the given |
- C{triggerID}. |
- |
- @raise TypeError: If there is no system event trigger for the given |
- C{triggerID}. |
- """ |
- |
- def callWhenRunning(callable, *args, **kw): |
- """Call a function when the reactor is running. |
- |
- If the reactor has not started, the callable will be scheduled |
- to run when it does start. Otherwise, the callable will be invoked |
- immediately. |
- |
- @param callable: the callable object to call later. |
- |
- @param args: the arguments to call it with. |
- |
- @param kw: the keyword arguments to call it with. |
- |
- @return: None if the callable was invoked, otherwise a system |
- event id for the scheduled call. |
- """ |
- |
- |
-class IReactorPluggableResolver(Interface): |
- """A reactor with a pluggable name resolver interface. |
- """ |
- def installResolver(resolver): |
- """Set the internal resolver to use to for name lookups. |
- |
- @type resolver: An object implementing the L{IResolverSimple} interface |
- @param resolver: The new resolver to use. |
- |
- @return: The previously installed resolver. |
- """ |
- |
- |
-class IReactorFDSet(Interface): |
- """ |
- Implement me to be able to use |
- L{FileDescriptor<twisted.internet.abstract.FileDescriptor>} type resources. |
- |
- This assumes that your main-loop uses UNIX-style numeric file descriptors |
- (or at least similarly opaque IDs returned from a .fileno() method) |
- """ |
- |
- def addReader(reader): |
- """I add reader to the set of file descriptors to get read events for. |
- |
- @param reader: An L{IReadDescriptor} provider that will be checked for |
- read events until it is removed from the reactor with |
- L{removeReader}. |
- |
- @return: C{None}. |
- """ |
- |
- def addWriter(writer): |
- """I add writer to the set of file descriptors to get write events for. |
- |
- @param writer: An L{IWriteDescriptor} provider that will be checked for |
- read events until it is removed from the reactor with |
- L{removeWriter}. |
- |
- @return: C{None}. |
- """ |
- |
- def removeReader(reader): |
- """Removes an object previously added with L{addReader}. |
- |
- @return: C{None}. |
- """ |
- |
- def removeWriter(writer): |
- """Removes an object previously added with L{addWriter}. |
- |
- @return: C{None}. |
- """ |
- |
- def removeAll(): |
- """Remove all readers and writers. |
- |
- Should not remove reactor internal reactor connections (like a waker). |
- |
- @return: A list of L{IReadDescriptor} and L{IWriteDescriptor} providers |
- which were removed. |
- """ |
- |
- |
- def getReaders(): |
- """ |
- Return the list of file descriptors currently monitored for input |
- events by the reactor. |
- |
- @return: the list of file descriptors monitored for input events. |
- @rtype: C{list} of C{IReadDescriptor} |
- """ |
- |
- |
- def getWriters(): |
- """ |
- Return the list file descriptors currently monitored for output events |
- by the reactor. |
- |
- @return: the list of file descriptors monitored for output events. |
- @rtype: C{list} of C{IWriteDescriptor} |
- """ |
- |
- |
- |
-class IListeningPort(Interface): |
- """A listening port. |
- """ |
- |
- def startListening(): |
- """Start listening on this port. |
- |
- @raise CannotListenError: If it cannot listen on this port (e.g., it is |
- a TCP port and it cannot bind to the required |
- port number). |
- """ |
- |
- def stopListening(): |
- """Stop listening on this port. |
- |
- If it does not complete immediately, will return Deferred that fires |
- upon completion. |
- """ |
- |
- def getHost(): |
- """Get the host that this port is listening for. |
- |
- @return: An L{IAddress} provider. |
- """ |
- |
- |
-class ILoggingContext(Interface): |
- """ |
- Give context information that will be used to log events generated by |
- this item. |
- """ |
- def logPrefix(): |
- """ |
- @return: Prefix used during log formatting to indicate context. |
- @rtype: C{str} |
- """ |
- |
- |
-class IFileDescriptor(ILoggingContext): |
- """ |
- A file descriptor. |
- """ |
- |
- def fileno(): |
- """ |
- @return: The platform-specified representation of a file-descriptor |
- number. |
- """ |
- |
- def connectionLost(reason): |
- """Called when the connection was lost. |
- |
- This is called when the connection on a selectable object has been |
- lost. It will be called whether the connection was closed explicitly, |
- an exception occurred in an event handler, or the other end of the |
- connection closed it first. |
- |
- See also L{IHalfCloseableDescriptor} if your descriptor wants to be |
- notified separately of the two halves of the connection being closed. |
- |
- @param reason: A failure instance indicating the reason why the |
- connection was lost. L{error.ConnectionLost} and |
- L{error.ConnectionDone} are of special note, but the |
- failure may be of other classes as well. |
- """ |
- |
-class IReadDescriptor(IFileDescriptor): |
- |
- def doRead(): |
- """Some data is available for reading on your descriptor. |
- """ |
- |
- |
-class IWriteDescriptor(IFileDescriptor): |
- |
- def doWrite(): |
- """Some data can be written to your descriptor. |
- """ |
- |
- |
-class IReadWriteDescriptor(IReadDescriptor, IWriteDescriptor): |
- """I am a L{FileDescriptor<twisted.internet.abstract.FileDescriptor>} that can both read and write. |
- """ |
- |
- |
-class IHalfCloseableDescriptor(Interface): |
- """A descriptor that can be half-closed.""" |
- |
- def writeConnectionLost(reason): |
- """Indicates write connection was lost.""" |
- |
- def readConnectionLost(reason): |
- """Indicates read connection was lost.""" |
- |
- |
-class ISystemHandle(Interface): |
- """An object that wraps a networking OS-specific handle.""" |
- |
- def getHandle(): |
- """Return a system- and reactor-specific handle. |
- |
- This might be a socket.socket() object, or some other type of |
- object, depending on which reactor is being used. Use and |
- manipulate at your own risk. |
- |
- This might be used in cases where you want to set specific |
- options not exposed by the Twisted APIs. |
- """ |
- |
- |
-class IConsumer(Interface): |
- """A consumer consumes data from a producer.""" |
- |
- def registerProducer(producer, streaming): |
- """ |
- Register to receive data from a producer. |
- |
- This sets self to be a consumer for a producer. When this object runs |
- out of data (as when a send(2) call on a socket succeeds in moving the |
- last data from a userspace buffer into a kernelspace buffer), it will |
- ask the producer to resumeProducing(). |
- |
- For L{IPullProducer} providers, C{resumeProducing} will be called once |
- each time data is required. |
- |
- For L{IPushProducer} providers, C{pauseProducing} will be called |
- whenever the write buffer fills up and C{resumeProducing} will only be |
- called when it empties. |
- |
- @type producer: L{IProducer} provider |
- |
- @type streaming: C{bool} |
- @param streaming: C{True} if C{producer} provides L{IPushProducer}, |
- C{False} if C{producer} provides L{IPullProducer}. |
- |
- @return: C{None} |
- """ |
- |
- def unregisterProducer(): |
- """Stop consuming data from a producer, without disconnecting. |
- """ |
- |
- def write(data): |
- """The producer will write data by calling this method.""" |
- |
-class IFinishableConsumer(IConsumer): |
- """A Consumer for producers that finish. |
- """ |
- def finish(): |
- """The producer has finished producing.""" |
- |
-class IProducer(Interface): |
- """A producer produces data for a consumer. |
- |
- Typically producing is done by calling the write method of an class |
- implementing L{IConsumer}. |
- """ |
- |
- def stopProducing(): |
- """Stop producing data. |
- |
- This tells a producer that its consumer has died, so it must stop |
- producing data for good. |
- """ |
- |
- |
-class IPushProducer(IProducer): |
- """ |
- A push producer, also known as a streaming producer is expected to |
- produce (write to this consumer) data on a continous basis, unless |
- it has been paused. A paused push producer will resume producing |
- after its resumeProducing() method is called. For a push producer |
- which is not pauseable, these functions may be noops. |
- """ |
- |
- def pauseProducing(): |
- """Pause producing data. |
- |
- Tells a producer that it has produced too much data to process for |
- the time being, and to stop until resumeProducing() is called. |
- """ |
- def resumeProducing(): |
- """Resume producing data. |
- |
- This tells a producer to re-add itself to the main loop and produce |
- more data for its consumer. |
- """ |
- |
-class IPullProducer(IProducer): |
- """ |
- A pull producer, also known as a non-streaming producer, is |
- expected to produce data each time resumeProducing() is called. |
- """ |
- |
- def resumeProducing(): |
- """Produce data for the consumer a single time. |
- |
- This tells a producer to produce data for the consumer once |
- (not repeatedly, once only). Typically this will be done |
- by calling the consumer's write() method a single time with |
- produced data. |
- """ |
- |
-class IProtocol(Interface): |
- |
- def dataReceived(data): |
- """Called whenever data is received. |
- |
- Use this method to translate to a higher-level message. Usually, some |
- callback will be made upon the receipt of each complete protocol |
- message. |
- |
- @param data: a string of indeterminate length. Please keep in mind |
- that you will probably need to buffer some data, as partial |
- (or multiple) protocol messages may be received! I recommend |
- that unit tests for protocols call through to this method with |
- differing chunk sizes, down to one byte at a time. |
- """ |
- |
- def connectionLost(reason): |
- """Called when the connection is shut down. |
- |
- Clear any circular references here, and any external references |
- to this Protocol. The connection has been closed. The C{reason} |
- Failure wraps a L{twisted.internet.error.ConnectionDone} or |
- L{twisted.internet.error.ConnectionLost} instance (or a subclass |
- of one of those). |
- |
- @type reason: L{twisted.python.failure.Failure} |
- """ |
- |
- def makeConnection(transport): |
- """Make a connection to a transport and a server. |
- """ |
- |
- def connectionMade(): |
- """Called when a connection is made. |
- |
- This may be considered the initializer of the protocol, because |
- it is called when the connection is completed. For clients, |
- this is called once the connection to the server has been |
- established; for servers, this is called after an accept() call |
- stops blocking and a socket has been received. If you need to |
- send any greeting or initial message, do it here. |
- """ |
- |
- |
-class IProcessProtocol(Interface): |
- """ |
- Interface for process-related event handlers. |
- """ |
- |
- def makeConnection(process): |
- """ |
- Called when the process has been created. |
- |
- @type process: L{IProcessTransport} provider |
- @param process: An object representing the process which has been |
- created and associated with this protocol. |
- """ |
- |
- |
- def childDataReceived(childFD, data): |
- """ |
- Called when data arrives from the child process. |
- |
- @type childFD: C{int} |
- @param childFD: The file descriptor from which the data was |
- received. |
- |
- @type data: C{str} |
- @param data: The data read from the child's file descriptor. |
- """ |
- |
- |
- def childConnectionLost(childFD): |
- """ |
- Called when a file descriptor associated with the child process is |
- closed. |
- |
- @type childFD: C{int} |
- @param childFD: The file descriptor which was closed. |
- """ |
- |
- |
- def processEnded(reason): |
- """ |
- Called when the child process exits. |
- |
- @type reason: L{twisted.python.failure.Failure} |
- @param reason: A failure giving the reason the child process |
- terminated. The type of exception for this failure is either |
- L{twisted.internet.error.ProcessDone} or |
- L{twisted.internet.error.ProcessTerminated}. |
- """ |
- |
- |
- |
-class IHalfCloseableProtocol(Interface): |
- """Implemented to indicate they want notification of half-closes. |
- |
- TCP supports the notion of half-closing the connection, e.g. |
- closing the write side but still not stopping reading. A protocol |
- that implements this interface will be notified of such events, |
- instead of having connectionLost called. |
- """ |
- |
- def readConnectionLost(): |
- """Notification of the read connection being closed. |
- |
- This indicates peer did half-close of write side. It is now |
- the responsiblity of the this protocol to call |
- loseConnection(). In addition, the protocol MUST make sure a |
- reference to it still exists (i.e. by doing a callLater with |
- one of its methods, etc.) as the reactor will only have a |
- reference to it if it is writing. |
- |
- If the protocol does not do so, it might get garbage collected |
- without the connectionLost method ever being called. |
- """ |
- |
- def writeConnectionLost(): |
- """Notification of the write connection being closed. |
- |
- This will never be called for TCP connections as TCP does not |
- support notification of this type of half-close. |
- """ |
- |
- |
-class IProtocolFactory(Interface): |
- """Interface for protocol factories. |
- """ |
- |
- def buildProtocol(addr): |
- """Called when a connection has been established to addr. |
- |
- If None is returned, the connection is assumed to have been refused, |
- and the Port will close the connection. |
- |
- @type addr: (host, port) |
- @param addr: The address of the newly-established connection |
- |
- @return: None if the connection was refused, otherwise an object |
- providing L{IProtocol}. |
- """ |
- |
- def doStart(): |
- """Called every time this is connected to a Port or Connector.""" |
- |
- def doStop(): |
- """Called every time this is unconnected from a Port or Connector.""" |
- |
- |
-class ITransport(Interface): |
- """I am a transport for bytes. |
- |
- I represent (and wrap) the physical connection and synchronicity |
- of the framework which is talking to the network. I make no |
- representations about whether calls to me will happen immediately |
- or require returning to a control loop, or whether they will happen |
- in the same or another thread. Consider methods of this class |
- (aside from getPeer) to be 'thrown over the wall', to happen at some |
- indeterminate time. |
- """ |
- |
- def write(data): |
- """Write some data to the physical connection, in sequence, in a |
- non-blocking fashion. |
- |
- If possible, make sure that it is all written. No data will |
- ever be lost, although (obviously) the connection may be closed |
- before it all gets through. |
- """ |
- |
- def writeSequence(data): |
- """Write a list of strings to the physical connection. |
- |
- If possible, make sure that all of the data is written to |
- the socket at once, without first copying it all into a |
- single string. |
- """ |
- |
- def loseConnection(): |
- """Close my connection, after writing all pending data. |
- |
- Note that if there is a registered producer on a transport it |
- will not be closed until the producer has been unregistered. |
- """ |
- |
- def getPeer(): |
- """Get the remote address of this connection. |
- |
- Treat this method with caution. It is the unfortunate result of the |
- CGI and Jabber standards, but should not be considered reliable for |
- the usual host of reasons; port forwarding, proxying, firewalls, IP |
- masquerading, etc. |
- |
- @return: An L{IAddress} provider. |
- """ |
- |
- def getHost(): |
- """ |
- Similar to getPeer, but returns an address describing this side of the |
- connection. |
- |
- @return: An L{IAddress} provider. |
- """ |
- |
- |
-class ITCPTransport(ITransport): |
- """A TCP based transport.""" |
- |
- def loseWriteConnection(): |
- """Half-close the write side of a TCP connection. |
- |
- If the protocol instance this is attached to provides |
- IHalfCloseableProtocol, it will get notified when the operation is |
- done. When closing write connection, as with loseConnection this will |
- only happen when buffer has emptied and there is no registered |
- producer. |
- """ |
- |
- def getTcpNoDelay(): |
- """Return if TCP_NODELAY is enabled.""" |
- |
- def setTcpNoDelay(enabled): |
- """Enable/disable TCP_NODELAY. |
- |
- Enabling TCP_NODELAY turns off Nagle's algorithm. Small packets are |
- sent sooner, possibly at the expense of overall throughput.""" |
- |
- def getTcpKeepAlive(): |
- """Return if SO_KEEPALIVE enabled.""" |
- |
- def setTcpKeepAlive(enabled): |
- """Enable/disable SO_KEEPALIVE. |
- |
- Enabling SO_KEEPALIVE sends packets periodically when the connection |
- is otherwise idle, usually once every two hours. They are intended |
- to allow detection of lost peers in a non-infinite amount of time.""" |
- |
- def getHost(): |
- """Returns L{IPv4Address}.""" |
- |
- def getPeer(): |
- """Returns L{IPv4Address}.""" |
- |
- |
-class ITLSTransport(ITCPTransport): |
- """A TCP transport that supports switching to TLS midstream. |
- |
- Once TLS mode is started the transport will implement L{ISSLTransport}. |
- """ |
- |
- def startTLS(contextFactory): |
- """Initiate TLS negotiation. |
- |
- @param contextFactory: A context factory (see L{ssl.py<twisted.internet.ssl>}) |
- """ |
- |
-class ISSLTransport(ITCPTransport): |
- """A SSL/TLS based transport.""" |
- |
- def getPeerCertificate(): |
- """Return an object with the peer's certificate info.""" |
- |
- |
-class IProcessTransport(ITransport): |
- """A process transport. |
- |
- @ivar pid: The Process-ID of this process. |
- """ |
- |
- def closeStdin(): |
- """Close stdin after all data has been written out.""" |
- |
- def closeStdout(): |
- """Close stdout.""" |
- |
- def closeStderr(): |
- """Close stderr.""" |
- |
- def closeChildFD(descriptor): |
- """ |
- Close a file descriptor which is connected to the child process, identified |
- by its FD in the child process. |
- """ |
- |
- def writeToChild(childFD, data): |
- """ |
- Similar to L{ITransport.write} but also allows the file descriptor in |
- the child process which will receive the bytes to be specified. |
- |
- This is not available on all platforms. |
- |
- @type childFD: C{int} |
- @param childFD: The file descriptor to which to write. |
- |
- @type data: C{str} |
- @param data: The bytes to write. |
- |
- @return: C{None} |
- """ |
- |
- def loseConnection(): |
- """Close stdin, stderr and stdout.""" |
- |
- def signalProcess(signalID): |
- """Send a signal to the process. |
- |
- @param signalID: can be |
- - one of C{\"HUP\"}, C{\"KILL\"}, C{\"STOP\"}, or C{\"INT\"}. |
- These will be implemented in a |
- cross-platform manner, and so should be used |
- if possible. |
- - an integer, where it represents a POSIX |
- signal ID. |
- |
- @raise twisted.internet.error.ProcessExitedAlready: The process has |
- already exited. |
- """ |
- |
- |
-class IServiceCollection(Interface): |
- """An object which provides access to a collection of services.""" |
- |
- def getServiceNamed(serviceName): |
- """Retrieve the named service from this application. |
- |
- Raise a KeyError if there is no such service name. |
- """ |
- |
- def addService(service): |
- """Add a service to this collection. |
- """ |
- |
- def removeService(service): |
- """Remove a service from this collection.""" |
- |
- |
-class IUDPTransport(Interface): |
- """Transport for UDP DatagramProtocols.""" |
- |
- def write(packet, addr=None): |
- """Write packet to given address. |
- |
- @param addr: a tuple of (ip, port). For connected transports must |
- be the address the transport is connected to, or None. |
- In non-connected mode this is mandatory. |
- |
- @raise twisted.internet.error.MessageLengthError: C{packet} was too |
- long. |
- """ |
- |
- def connect(host, port): |
- """Connect the transport to an address. |
- |
- This changes it to connected mode. Datagrams can only be sent to |
- this address, and will only be received from this address. In addition |
- the protocol's connectionRefused method might get called if destination |
- is not receiving datagrams. |
- |
- @param host: an IP address, not a domain name ('127.0.0.1', not 'localhost') |
- @param port: port to connect to. |
- """ |
- |
- def getHost(): |
- """Returns IPv4Address.""" |
- |
- def stopListening(): |
- """Stop listening on this port. |
- |
- If it does not complete immediately, will return Deferred that fires |
- upon completion. |
- """ |
- |
- |
-class IUDPConnectedTransport(Interface): |
- """DEPRECATED. Transport for UDP ConnectedPacketProtocols.""" |
- |
- def write(packet): |
- """Write packet to address we are connected to.""" |
- |
- def getHost(): |
- """Returns UNIXAddress.""" |
- |
- |
-class IUNIXDatagramTransport(Interface): |
- """Transport for UDP PacketProtocols.""" |
- |
- def write(packet, address): |
- """Write packet to given address.""" |
- |
- def getHost(): |
- """Returns UNIXAddress.""" |
- |
- |
-class IUNIXDatagramConnectedTransport(Interface): |
- """Transport for UDP ConnectedPacketProtocols.""" |
- |
- def write(packet): |
- """Write packet to address we are connected to.""" |
- |
- def getHost(): |
- """Returns UNIXAddress.""" |
- |
- def getPeer(): |
- """Returns UNIXAddress.""" |
- |
- |
-class IMulticastTransport(Interface): |
- """Additional functionality for multicast UDP.""" |
- |
- def getOutgoingInterface(): |
- """Return interface of outgoing multicast packets.""" |
- |
- def setOutgoingInterface(addr): |
- """Set interface for outgoing multicast packets. |
- |
- Returns Deferred of success. |
- """ |
- |
- def getLoopbackMode(): |
- """Return if loopback mode is enabled.""" |
- |
- def setLoopbackMode(mode): |
- """Set if loopback mode is enabled.""" |
- |
- def getTTL(): |
- """Get time to live for multicast packets.""" |
- |
- def setTTL(ttl): |
- """Set time to live on multicast packets.""" |
- |
- def joinGroup(addr, interface=""): |
- """Join a multicast group. Returns Deferred of success or failure. |
- |
- If an error occurs, the returned Deferred will fail with |
- L{error.MulticastJoinError}. |
- """ |
- |
- def leaveGroup(addr, interface=""): |
- """Leave multicast group, return Deferred of success.""" |