Python twisted.internet.protocol.Protocol() Examples
The following are 30
code examples of twisted.internet.protocol.Protocol().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
twisted.internet.protocol
, or try the search function
.
Example #1
Source File: forwarding.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def _setClient(self, client): """ Called when the connection was established to the forwarding destination. @param client: Client protocol connected to the forwarding destination. @type client: L{protocol.Protocol} """ self.client = client log.msg("connected to %s:%i" % self.hostport) if self.clientBuf: self.client.transport.write(self.clientBuf) self.clientBuf = None if self.client.buf[1:]: self.write(self.client.buf[1:]) self.client.buf = b''
Example #2
Source File: test_newclient.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_makeConnection(self): """ The L{IProtocol} provider passed to L{Response.deliverBody} has its C{makeConnection} method called with an L{IPushProducer} provider hooked up to the response as an argument. """ producers = [] transport = StringTransport() class SomeProtocol(Protocol): def makeConnection(self, producer): producers.append(producer) consumer = SomeProtocol() response = justTransportResponse(transport) response.deliverBody(consumer) [theProducer] = producers theProducer.pauseProducing() self.assertEqual(transport.producerState, u'paused') theProducer.resumeProducing() self.assertEqual(transport.producerState, u'producing')
Example #3
Source File: test_newclient.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_bufferEarlyData(self): """ If data is delivered to the L{Response} before a protocol is registered with C{deliverBody}, that data is buffered until the protocol is registered and then is delivered. """ bytes = [] class ListConsumer(Protocol): def dataReceived(self, data): bytes.append(data) protocol = ListConsumer() response = justTransportResponse(StringTransport()) response._bodyDataReceived(b'foo') response._bodyDataReceived(b'bar') response.deliverBody(protocol) response._bodyDataReceived(b'baz') self.assertEqual(bytes, [b'foo', b'bar', b'baz']) # Make sure the implementation-detail-byte-buffer is cleared because # not clearing it wastes memory. self.assertIdentical(response._bodyBuffer, None)
Example #4
Source File: twisted_test.py From tornado-zh with MIT License | 6 votes |
def twisted_coroutine_fetch(self, url, runner): body = [None] @gen.coroutine def f(): # This is simpler than the non-coroutine version, but it cheats # by reading the body in one blob instead of streaming it with # a Protocol. client = Agent(self.reactor) response = yield client.request(b'GET', utf8(url)) with warnings.catch_warnings(): # readBody has a buggy DeprecationWarning in Twisted 15.0: # https://twistedmatrix.com/trac/changeset/43379 warnings.simplefilter('ignore', category=DeprecationWarning) body[0] = yield readBody(response) self.stop_loop() self.io_loop.add_callback(f) runner() return body[0]
Example #5
Source File: _newclient.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def parseVersion(self, strversion): """ Parse version strings of the form Protocol '/' Major '.' Minor. E.g. b'HTTP/1.1'. Returns (protocol, major, minor). Will raise ValueError on bad syntax. """ try: proto, strnumber = strversion.split(b'/') major, minor = strnumber.split(b'.') major, minor = int(major), int(minor) except ValueError as e: raise BadResponseVersion(str(e), strversion) if major < 0 or minor < 0: raise BadResponseVersion(u"version may not be negative", strversion) return (proto, major, minor)
Example #6
Source File: test_newclient.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_connectionLost(self): """ The L{IProtocol} provider passed to L{Response.deliverBody} has its C{connectionLost} method called with a L{Failure} wrapping L{ResponseDone} when the response's C{_bodyDataFinished} method is called. """ lost = [] class ListConsumer(Protocol): def connectionLost(self, reason): lost.append(reason) consumer = ListConsumer() response = justTransportResponse(StringTransport()) response.deliverBody(consumer) response._bodyDataFinished() lost[0].trap(ResponseDone) self.assertEqual(len(lost), 1) # The protocol reference should be dropped, too, to facilitate GC or # whatever. self.assertIdentical(response._bodyProtocol, None)
Example #7
Source File: test_newclient.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_transportResumed(self): """ L{Response.deliverBody} resumes the HTTP connection's transport after passing it to the consumer's C{makeConnection} method. """ transportState = [] class ListConsumer(Protocol): def makeConnection(self, transport): transportState.append(transport.producerState) transport = StringTransport() transport.pauseProducing() protocol = ListConsumer() response = justTransportResponse(transport) self.assertEqual(transport.producerState, u'paused') response.deliverBody(protocol) self.assertEqual(transportState, [u'paused']) self.assertEqual(transport.producerState, u'producing')
Example #8
Source File: test_endpoints.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def setUp(self): """ Construct a L{StandardIOEndpoint} with a dummy reactor and a fake L{stdio.StandardIO} like object. Listening on it with a L{SpecificFactory}. """ self.reactor = object() endpoint = endpoints.StandardIOEndpoint(self.reactor) self.assertIs(endpoint._stdio, stdio.StandardIO) endpoint._stdio = FakeStdio self.specificProtocol = Protocol() self.fakeStdio = self.successResultOf( endpoint.listen(SpecificFactory(self.specificProtocol)) )
Example #9
Source File: test_endpoints.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_deferBadEncodingToConnect(self): """ Since any client of L{IStreamClientEndpoint} needs to handle Deferred failures from C{connect}, L{HostnameEndpoint}'s constructor will not raise exceptions when given bad host names, instead deferring to returning a failing L{Deferred} from C{connect}. """ endpoint = endpoints.HostnameEndpoint( deterministicResolvingReactor(MemoryReactor(), ['127.0.0.1']), b'\xff-garbage-\xff', 80 ) deferred = endpoint.connect(Factory.forProtocol(Protocol)) err = self.failureResultOf(deferred, ValueError) self.assertIn("\\xff-garbage-\\xff", str(err)) endpoint = endpoints.HostnameEndpoint( deterministicResolvingReactor(MemoryReactor(), ['127.0.0.1']), u'\u2ff0-garbage-\u2ff0', 80 ) deferred = endpoint.connect(Factory()) err = self.failureResultOf(deferred, ValueError) self.assertIn("\\u2ff0-garbage-\\u2ff0", str(err))
Example #10
Source File: test_stdio.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_removeWriter(self): """ Removing a filesystem file writer from a reactor will make sure it is no longer polled. """ reactor = self.buildReactor() self.addCleanup(self.unbuildReactor, reactor) # Cleanup might fail if file is GCed too soon: self.f = f = open(self.mktemp(), "wb") # Have the reader added: protocol = Protocol() stdio = StandardIO(protocol, stdout=f.fileno(), stdin=self.extraFile.fileno(), reactor=reactor) protocol.transport.write(b"hello") self.assertIn(stdio._writer, reactor.getWriters()) stdio._writer.stopWriting() self.assertNotIn(stdio._writer, reactor.getWriters())
Example #11
Source File: test_stdio.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_removeAll(self): """ Calling C{removeAll} on a reactor includes descriptors that are filesystem files. """ reactor = self.buildReactor() self.addCleanup(self.unbuildReactor, reactor) path = self.mktemp() open(path, "wb").close() # Cleanup might fail if file is GCed too soon: self.f = f = open(path, "rb") # Have the reader added: stdio = StandardIO(Protocol(), stdin=f.fileno(), stdout=self.extraFile.fileno(), reactor=reactor) # And then removed: removed = reactor.removeAll() self.assertIn(stdio._reader, removed) self.assertNotIn(stdio._reader, reactor.getReaders())
Example #12
Source File: test_stdio.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_getReaders(self): """ C{reactor.getReaders} includes descriptors that are filesystem files. """ reactor = self.buildReactor() self.addCleanup(self.unbuildReactor, reactor) path = self.mktemp() open(path, "wb").close() # Cleanup might fail if file is GCed too soon: with open(path, "rb") as f: # Have the reader added: stdio = StandardIO(Protocol(), stdin=f.fileno(), stdout=self.extraFile.fileno(), reactor=reactor) self.assertIn(stdio._reader, reactor.getReaders())
Example #13
Source File: test_internet.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_interfacesForTransport(self): """ If the protocol objects returned by the factory given to L{ClientService} provide special "marker" interfaces for their transport - L{IHalfCloseableProtocol} or L{IFileDescriptorReceiver} - those interfaces will be provided by the protocol objects passed on to the reactor. """ @implementer(IHalfCloseableProtocol, IFileDescriptorReceiver) class FancyProtocol(Protocol, object): """ Provider of various interfaces. """ cq, service = self.makeReconnector(protocolType=FancyProtocol) reactorFacing = cq.constructedProtocols[0] self.assertTrue(IFileDescriptorReceiver.providedBy(reactorFacing)) self.assertTrue(IHalfCloseableProtocol.providedBy(reactorFacing))
Example #14
Source File: ftp.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def retrieveFile(self, path, protocol, offset=0): """ Retrieve a file from the given path This method issues the 'RETR' FTP command. The file is fed into the given Protocol instance. The data connection will be passive if self.passive is set. @param path: path to file that you wish to receive. @param protocol: a L{Protocol} instance. @param offset: offset to start downloading from @return: L{Deferred} """ cmds = ['RETR ' + self.escapePath(path)] if offset: cmds.insert(0, ('REST ' + str(offset))) return self.receiveFromConnection(cmds, protocol)
Example #15
Source File: ftp.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def list(self, path, protocol): """ Retrieve a file listing into the given protocol instance. This method issues the 'LIST' FTP command. @param path: path to get a file listing for. @param protocol: a L{Protocol} instance, probably a L{FTPFileListProtocol} instance. It can cope with most common file listing formats. @return: L{Deferred} """ if path is None: path = '' return self.receiveFromConnection(['LIST ' + self.escapePath(path)], protocol)
Example #16
Source File: test_tls.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_wrappedProtocolInterfaces(self): """ L{TLSMemoryBIOProtocol} instances provide the interfaces provided by the transport they wrap. """ class ITransport(Interface): pass class MyTransport(object): def write(self, data): pass clientFactory = ClientFactory() contextFactory = ClientTLSContext() wrapperFactory = TLSMemoryBIOFactory( contextFactory, True, clientFactory) transport = MyTransport() directlyProvides(transport, ITransport) tlsProtocol = TLSMemoryBIOProtocol(wrapperFactory, Protocol()) tlsProtocol.makeConnection(transport) self.assertTrue(ITransport.providedBy(tlsProtocol))
Example #17
Source File: test_tls.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_getHandle(self): """ L{TLSMemoryBIOProtocol.getHandle} returns the L{OpenSSL.SSL.Connection} instance it uses to actually implement TLS. This may seem odd. In fact, it is. The L{OpenSSL.SSL.Connection} is not actually the "system handle" here, nor even an object the reactor knows about directly. However, L{twisted.internet.ssl.Certificate}'s C{peerFromTransport} and C{hostFromTransport} methods depend on being able to get an L{OpenSSL.SSL.Connection} object in order to work properly. Implementing L{ISystemHandle.getHandle} like this is the easiest way for those APIs to be made to work. If they are changed, then it may make sense to get rid of this implementation of L{ISystemHandle} and return the underlying socket instead. """ factory = ClientFactory() contextFactory = ClientTLSContext() wrapperFactory = TLSMemoryBIOFactory(contextFactory, True, factory) proto = TLSMemoryBIOProtocol(wrapperFactory, Protocol()) transport = StringTransport() proto.makeConnection(transport) self.assertIsInstance(proto.getHandle(), ConnectionType)
Example #18
Source File: test_tls.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_makeConnection(self): """ When L{TLSMemoryBIOProtocol} is connected to a transport, it connects the protocol it wraps to a transport. """ clientProtocol = Protocol() clientFactory = ClientFactory() clientFactory.protocol = lambda: clientProtocol contextFactory = ClientTLSContext() wrapperFactory = TLSMemoryBIOFactory( contextFactory, True, clientFactory) sslProtocol = wrapperFactory.buildProtocol(None) transport = StringTransport() sslProtocol.makeConnection(transport) self.assertIsNotNone(clientProtocol.transport) self.assertIsNot(clientProtocol.transport, transport) self.assertIs(clientProtocol.transport, sslProtocol)
Example #19
Source File: test_tls.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def handshakeProtocols(self): """ Start handshake between TLS client and server. """ clientFactory = ClientFactory() clientFactory.protocol = Protocol clientContextFactory, handshakeDeferred = ( HandshakeCallbackContextFactory.factoryAndDeferred()) wrapperFactory = TLSMemoryBIOFactory( clientContextFactory, True, clientFactory) sslClientProtocol = wrapperFactory.buildProtocol(None) serverFactory = ServerFactory() serverFactory.protocol = Protocol serverContextFactory = ServerTLSContext() wrapperFactory = TLSMemoryBIOFactory( serverContextFactory, False, serverFactory) sslServerProtocol = wrapperFactory.buildProtocol(None) connectionDeferred = loopbackAsync(sslServerProtocol, sslClientProtocol) return (sslClientProtocol, sslServerProtocol, handshakeDeferred, connectionDeferred)
Example #20
Source File: test_tls.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_writeUnicodeRaisesTypeError(self): """ Writing C{unicode} to L{TLSMemoryBIOProtocol} throws a C{TypeError}. """ notBytes = u"hello" result = [] class SimpleSendingProtocol(Protocol): def connectionMade(self): try: self.transport.write(notBytes) except TypeError: result.append(True) self.transport.write(b"bytes") self.transport.loseConnection() d = self.writeBeforeHandshakeTest(SimpleSendingProtocol, b"bytes") return d.addCallback(lambda ign: self.assertEqual(result, [True]))
Example #21
Source File: test_stdio.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_getWriters(self): """ C{reactor.getWriters} includes descriptors that are filesystem files. """ reactor = self.buildReactor() self.addCleanup(self.unbuildReactor, reactor) # Cleanup might fail if file is GCed too soon: self.f = f = open(self.mktemp(), "wb") # Have the reader added: stdio = StandardIO(Protocol(), stdout=f.fileno(), stdin=self.extraFile.fileno(), reactor=reactor) self.assertNotIn(stdio._writer, reactor.getWriters()) stdio._writer.startWriting() self.assertIn(stdio._writer, reactor.getWriters())
Example #22
Source File: twisted_test.py From tornado-zh with MIT License | 6 votes |
def twisted_coroutine_fetch(self, url, runner): body = [None] @gen.coroutine def f(): # This is simpler than the non-coroutine version, but it cheats # by reading the body in one blob instead of streaming it with # a Protocol. client = Agent(self.reactor) response = yield client.request(b'GET', utf8(url)) with warnings.catch_warnings(): # readBody has a buggy DeprecationWarning in Twisted 15.0: # https://twistedmatrix.com/trac/changeset/43379 warnings.simplefilter('ignore', category=DeprecationWarning) body[0] = yield readBody(response) self.stop_loop() self.io_loop.add_callback(f) runner() return body[0]
Example #23
Source File: test_session.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_wrapProtocol(self): """ L{wrapProtocol}, when passed a L{Protocol} should return something that has write(), writeSequence(), loseConnection() methods which call the Protocol's dataReceived() and connectionLost() methods, respectively. """ protocol = MockProtocol() protocol.transport = StubTransport() protocol.connectionMade() wrapped = session.wrapProtocol(protocol) wrapped.dataReceived(b'dataReceived') self.assertEqual(protocol.transport.buf, b'dataReceived') wrapped.write(b'data') wrapped.writeSequence([b'1', b'2']) wrapped.loseConnection() self.assertEqual(protocol.data, b'data12') protocol.reason.trap(error.ConnectionDone)
Example #24
Source File: ftp.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def debugDeferred(self, *_): log.msg('debugDeferred(): %s' % str(_), debug=True) # -- DTP Protocol --
Example #25
Source File: test_tls.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def test_handshakeNotification(self): """ The completion of the TLS handshake calls C{handshakeCompleted} on L{Protocol} objects that provide L{IHandshakeListener}. At the time C{handshakeCompleted} is invoked, the transport's peer certificate will have been initialized. """ client, server, pump = handshakingClientAndServer() self.assertEqual(client.wrappedProtocol.handshook, False) self.assertEqual(server.wrappedProtocol.handshaked, False) pump.flush() self.assertEqual(client.wrappedProtocol.handshook, True) self.assertEqual(server.wrappedProtocol.handshaked, True) self.assertIsNot(client.wrappedProtocol.peerAfterHandshake, None)
Example #26
Source File: network.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def clientConnectionLost(self, connector, reason): pass # connectionLost event is handled on the Protocol.
Example #27
Source File: ftp.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def nlst(self, path, protocol): """ Retrieve a short file listing into the given protocol instance. This method issues the 'NLST' FTP command. NLST (should) return a list of filenames, one per line. @param path: path to get short file listing for. @param protocol: a L{Protocol} instance. """ if path is None: path = '' return self.receiveFromConnection(['NLST ' + self.escapePath(path)], protocol)
Example #28
Source File: stateful.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def makeConnection(self, transport): protocol.Protocol.makeConnection(self, transport) self._sful_data = self.getInitialState(), BytesIO(), 0
Example #29
Source File: basic.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def makeConnection(self, transport): """ Initializes the protocol. """ protocol.Protocol.makeConnection(self, transport) self._remainingData = b"" self._currentPayloadSize = 0 self._payload = BytesIO() self._state = self._PARSING_LENGTH self._expectedPayloadSize = 0 self.brokenPeer = 0
Example #30
Source File: ftp.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def makeConnection(self, transport): protocol.Protocol.makeConnection(self, transport) self.connectedDeferred.callback(self)