Python twisted.internet.error.ConnectionLost() Examples
The following are 30
code examples of twisted.internet.error.ConnectionLost().
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.error
, or try the search function
.
Example #1
Source File: posixbase.py From learn_python3_spider with MIT License | 6 votes |
def _disconnectSelectable(self, selectable, why, isRead, faildict={ error.ConnectionDone: failure.Failure(error.ConnectionDone()), error.ConnectionLost: failure.Failure(error.ConnectionLost()) }): """ Utility function for disconnecting a selectable. Supports half-close notification, isRead should be boolean indicating whether error resulted from doRead(). """ self.removeReader(selectable) f = faildict.get(why.__class__) if f: if (isRead and why.__class__ == error.ConnectionDone and IHalfCloseableDescriptor.providedBy(selectable)): selectable.readConnectionLost(f) else: self.removeWriter(selectable) selectable.connectionLost(f) else: self.removeWriter(selectable) selectable.connectionLost(failure.Failure(why))
Example #2
Source File: abstract.py From learn_python3_spider with MIT License | 6 votes |
def _handleRead(self, rc, data, evt): """ Returns False if we should stop reading for now """ if self.disconnected: return False # graceful disconnection if (not (rc or data)) or rc in (errno.WSAEDISCON, ERROR_HANDLE_EOF): self.reactor.removeActiveHandle(self) self.readConnectionLost(failure.Failure(main.CONNECTION_DONE)) return False # XXX: not handling WSAEWOULDBLOCK # ("too many outstanding overlapped I/O requests") elif rc: self.connectionLost(failure.Failure( error.ConnectionLost("read error -- %s (%s)" % (errno.errorcode.get(rc, 'unknown'), rc)))) return False else: assert self._readSize == 0 assert self._readNextBuffer == 0 self._readSize = data return self._dispatchData()
Example #3
Source File: test_ssl.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def _cbLostConns(self, results): (sSuccess, sResult), (cSuccess, cResult) = results self.assertFalse(sSuccess) self.assertFalse(cSuccess) acceptableErrors = [SSL.Error] # Rather than getting a verification failure on Windows, we are getting # a connection failure. Without something like sslverify proxying # in-between we can't fix up the platform's errors, so let's just # specifically say it is only OK in this one case to keep the tests # passing. Normally we'd like to be as strict as possible here, so # we're not going to allow this to report errors incorrectly on any # other platforms. if platform.isWindows(): from twisted.internet.error import ConnectionLost acceptableErrors.append(ConnectionLost) sResult.trap(*acceptableErrors) cResult.trap(*acceptableErrors) return self.serverPort.stopListening()
Example #4
Source File: posixbase.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def _disconnectSelectable(self, selectable, why, isRead, faildict={ error.ConnectionDone: failure.Failure(error.ConnectionDone()), error.ConnectionLost: failure.Failure(error.ConnectionLost()) }): """ Utility function for disconnecting a selectable. Supports half-close notification, isRead should be boolean indicating whether error resulted from doRead(). """ self.removeReader(selectable) f = faildict.get(why.__class__) if f: if (isRead and why.__class__ == error.ConnectionDone and IHalfCloseableDescriptor.providedBy(selectable)): selectable.readConnectionLost(f) else: self.removeWriter(selectable) selectable.connectionLost(f) else: self.removeWriter(selectable) selectable.connectionLost(failure.Failure(why))
Example #5
Source File: test_newclient.py From learn_python3_spider with MIT License | 6 votes |
def test_someResponseButNotAll(self): """ If a partial response was received and the connection is lost, the resulting error is L{ResponseFailed}, but not L{ResponseNeverReceived}. """ protocol = HTTPClientParser( Request(b'HEAD', b'/', _boringHeaders, None), lambda ign: None) d = protocol._responseDeferred protocol.makeConnection(StringTransport()) protocol.dataReceived(b'2') protocol.connectionLost(ConnectionLost()) return self.assertFailure(d, ResponseFailed).addCallback( self.assertIsInstance, ResponseFailed)
Example #6
Source File: test_ssl.py From learn_python3_spider with MIT License | 6 votes |
def _cbLostConns(self, results): (sSuccess, sResult), (cSuccess, cResult) = results self.assertFalse(sSuccess) self.assertFalse(cSuccess) acceptableErrors = [SSL.Error] # Rather than getting a verification failure on Windows, we are getting # a connection failure. Without something like sslverify proxying # in-between we can't fix up the platform's errors, so let's just # specifically say it is only OK in this one case to keep the tests # passing. Normally we'd like to be as strict as possible here, so # we're not going to allow this to report errors incorrectly on any # other platforms. if platform.isWindows(): from twisted.internet.error import ConnectionLost acceptableErrors.append(ConnectionLost) sResult.trap(*acceptableErrors) cResult.trap(*acceptableErrors) return self.serverPort.stopListening()
Example #7
Source File: amp.py From learn_python3_spider with MIT License | 6 votes |
def sendBox(self, box): """ Send a amp.Box to my peer. Note: transport.write is never called outside of this method. @param box: an AmpBox. @raise ProtocolSwitched: if the protocol has previously been switched. @raise ConnectionLost: if the connection has previously been lost. """ if self._locked: raise ProtocolSwitched( "This connection has switched: no AMP traffic allowed.") if self.transport is None: raise ConnectionLost() if self._startingTLSBuffer is not None: self._startingTLSBuffer.append(box) else: self.transport.write(box.serialize())
Example #8
Source File: test_newclient.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_someResponseButNotAll(self): """ If a partial response was received and the connection is lost, the resulting error is L{ResponseFailed}, but not L{ResponseNeverReceived}. """ protocol = HTTPClientParser( Request(b'HEAD', b'/', _boringHeaders, None), lambda ign: None) d = protocol._responseDeferred protocol.makeConnection(StringTransport()) protocol.dataReceived(b'2') protocol.connectionLost(ConnectionLost()) return self.assertFailure(d, ResponseFailed).addCallback( self.assertIsInstance, ResponseFailed)
Example #9
Source File: test_tls.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_unexpectedEOF(self): """ Unexpected disconnects get converted to ConnectionLost errors. """ tlsClient, tlsServer, handshakeDeferred, disconnectDeferred = ( self.handshakeProtocols()) serverProtocol = tlsServer.wrappedProtocol data = [] reason = [] serverProtocol.dataReceived = data.append serverProtocol.connectionLost = reason.append # Write data, then disconnect *underlying* transport, resulting in an # unexpected TLS disconnect: def handshakeDone(ign): tlsClient.write(b"hello") tlsClient.transport.loseConnection() handshakeDeferred.addCallback(handshakeDone) # Receiver should be disconnected, with ConnectionLost notification # (masking the Unexpected EOF SSL error): def disconnected(ign): self.assertTrue(reason[0].check(ConnectionLost), reason[0]) disconnectDeferred.addCallback(disconnected) return disconnectDeferred
Example #10
Source File: test_http.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_connectionLost(self): """ L{http.Request.connectionLost} closes L{Request.content} and drops the reference to the L{HTTPChannel} to assist with garbage collection. """ req = http.Request(DummyChannel(), False) # Cause Request.content to be created at all. req.gotLength(10) # Grab a reference to content in case the Request drops it later on. content = req.content # Put some bytes into it req.handleContentChunk(b"hello") # Then something goes wrong and content should get closed. req.connectionLost(Failure(ConnectionLost("Finished"))) self.assertTrue(content.closed) self.assertIdentical(req.channel, None)
Example #11
Source File: twisted.py From honeything with GNU General Public License v3.0 | 6 votes |
def _invoke_callback(self, fd, events): (reader, writer) = self._fds[fd] if reader: err = None if reader.fileno() == -1: err = error.ConnectionLost() elif events & IOLoop.READ: err = log.callWithLogger(reader, reader.doRead) if err is None and events & IOLoop.ERROR: err = error.ConnectionLost() if err is not None: self.removeReader(reader) reader.readConnectionLost(failure.Failure(err)) if writer: err = None if writer.fileno() == -1: err = error.ConnectionLost() elif events & IOLoop.WRITE: err = log.callWithLogger(writer, writer.doWrite) if err is None and events & IOLoop.ERROR: err = error.ConnectionLost() if err is not None: self.removeWriter(writer) writer.writeConnectionLost(failure.Failure(err))
Example #12
Source File: stream.py From ccs-calendarserver with Apache License 2.0 | 6 votes |
def stopProducing(self, failure=ti_error.ConnectionLost()): if self.consumer is not None: self.consumer.unregisterProducer() if self.finishedCallback is not None: if failure is not None: self.finishedCallback.errback(failure) else: self.finishedCallback.callback(None) self.finishedCallback = None self.paused = True if self.stream is not None: self.stream.close() self.finishedCallback = self.deferred = self.consumer = self.stream = None # # ProcessStreamer #
Example #13
Source File: test_sslverify.py From learn_python3_spider with MIT License | 5 votes |
def test_refusedAnonymousClientConnection(self): """ Check that anonymous connections are refused when certificates are required on the server. """ onServerLost = defer.Deferred() onClientLost = defer.Deferred() self.loopback(sslverify.OpenSSLCertificateOptions(privateKey=self.sKey, certificate=self.sCert, verify=True, caCerts=[self.sCert], requireCertificate=True), sslverify.OpenSSLCertificateOptions( requireCertificate=False), onServerLost=onServerLost, onClientLost=onClientLost) d = defer.DeferredList([onClientLost, onServerLost], consumeErrors=True) def afterLost(result): ((cSuccess, cResult), (sSuccess, sResult)) = result self.assertFalse(cSuccess) self.assertFalse(sSuccess) # Win32 fails to report the SSL Error, and report a connection lost # instead: there is a race condition so that's not totally # surprising (see ticket #2877 in the tracker) self.assertIsInstance(cResult.value, (SSL.Error, ConnectionLost)) self.assertIsInstance(sResult.value, SSL.Error) return d.addCallback(afterLost)
Example #14
Source File: test_ftp.py From learn_python3_spider with MIT License | 5 votes |
def tearDown(self): """ Deliver disconnection notification to the client so that it can perform any cleanup which may be required. """ self.client.connectionLost(error.ConnectionLost())
Example #15
Source File: test_ident.py From learn_python3_spider with MIT License | 5 votes |
def test_lostConnection(self): """ A pending query which failed because of a ConnectionLost should receive an L{ident.IdentError}. """ d = defer.Deferred() self.client.queries.append((d, 765, 432)) self.client.connectionLost(failure.Failure(error.ConnectionLost())) return self.assertFailure(d, ident.IdentError)
Example #16
Source File: abstract.py From learn_python3_spider with MIT License | 5 votes |
def _handleWrite(self, rc, numBytesWritten, evt): """ Returns false if we should stop writing for now """ if self.disconnected or self._writeDisconnected: return False # XXX: not handling WSAEWOULDBLOCK # ("too many outstanding overlapped I/O requests") if rc: self.connectionLost(failure.Failure( error.ConnectionLost("write error -- %s (%s)" % (errno.errorcode.get(rc, 'unknown'), rc)))) return False else: self.offset += numBytesWritten # If there is nothing left to send, if self.offset == len(self.dataBuffer) and not self._tempDataLen: self.dataBuffer = b"" self.offset = 0 # stop writing self.stopWriting() # If I've got a producer who is supposed to supply me with data if self.producer is not None and ((not self.streamingProducer) or self.producerPaused): # tell them to supply some more. self.producerPaused = True self.producer.resumeProducing() elif self.disconnecting: # But if I was previously asked to let the connection die, # do so. self.connectionLost(failure.Failure(main.CONNECTION_DONE)) elif self._writeDisconnecting: # I was previously asked to half-close the connection. self._writeDisconnected = True self._closeWriteConnection() return False else: return True
Example #17
Source File: test_ftp.py From learn_python3_spider with MIT License | 5 votes |
def test_lostRETR(self): """ Try a RETR, but disconnect during the transfer. L{ftp.FTPClient.retrieveFile} should return a Deferred which errbacks with L{ftp.ConnectionLost) """ self.client.passive = False l = [] def generatePort(portCmd): portCmd.text = 'PORT %s' % (ftp.encodeHostPort('127.0.0.1', 9876),) tr = proto_helpers.StringTransportWithDisconnection() portCmd.protocol.makeConnection(tr) tr.protocol = portCmd.protocol portCmd.protocol.dataReceived(b"x" * 500) l.append(tr) self.client.generatePortCommand = generatePort self._testLogin() proto = _BufferingProtocol() d = self.client.retrieveFile("spam", proto) self.assertEqual(self.transport.value(), ('PORT %s\r\n' % (ftp.encodeHostPort('127.0.0.1', 9876),)).encode( self.client._encoding)) self.transport.clear() self.client.lineReceived(b'200 PORT OK') self.assertEqual(self.transport.value(), b'RETR spam\r\n') self.assertTrue(l) l[0].loseConnection() self.transport.loseConnection() self.assertFailure(d, ftp.ConnectionLost) return d
Example #18
Source File: util.py From ccs-calendarserver with Apache License 2.0 | 5 votes |
def _done(self, protocol): if self._deliveryLoop: self._deliveryLoop.stop() protocol.connectionLost(Failure(ConnectionLost()))
Example #19
Source File: test_tls.py From learn_python3_spider with MIT License | 5 votes |
def test_disorderlyShutdown(self): """ If a L{TLSMemoryBIOProtocol} loses its connection unexpectedly, this is reported to the application. """ clientConnectionLost = Deferred() clientFactory = ClientFactory() clientFactory.protocol = ( lambda: ConnectionLostNotifyingProtocol( clientConnectionLost)) clientContextFactory = HandshakeCallbackContextFactory() wrapperFactory = TLSMemoryBIOFactory( clientContextFactory, True, clientFactory) sslClientProtocol = wrapperFactory.buildProtocol(None) # Client speaks first, so the server can be dumb. serverProtocol = Protocol() loopbackAsync(serverProtocol, sslClientProtocol) # Now destroy the connection. serverProtocol.transport.loseConnection() # And when the connection completely dies, check the reason. def cbDisconnected(clientProtocol): clientProtocol.lostConnectionReason.trap(Error, ConnectionLost) clientConnectionLost.addCallback(cbDisconnected) return clientConnectionLost
Example #20
Source File: test_jabberxmlstream.py From learn_python3_spider with MIT License | 5 votes |
def testDisconnectTimeoutCancellation(self): """ Test if timeouts for iq's that haven't yet received a response are cancelled on stream disconnect. """ self.iq.timeout = 60 d = self.iq.send() xs = self.xmlstream xs.connectionLost("Closed by peer") self.assertFailure(d, ConnectionLost) self.assertFalse(self.clock.calls) return d
Example #21
Source File: test_jabberxmlstream.py From learn_python3_spider with MIT License | 5 votes |
def testDisconnectCleanup(self): """ Test if deferreds for iq's that haven't yet received a response have their errback called on stream disconnect. """ d = self.iq.send() xs = self.xmlstream xs.connectionLost("Closed by peer") self.assertFailure(d, ConnectionLost) return d
Example #22
Source File: test_newclient.py From learn_python3_spider with MIT License | 5 votes |
def test_noResponseAtAll(self): """ If no response at all was received and the connection is lost, the resulting error is L{ResponseNeverReceived}. """ protocol = HTTPClientParser( Request(b'HEAD', b'/', _boringHeaders, None), lambda ign: None) d = protocol._responseDeferred protocol.makeConnection(StringTransport()) protocol.connectionLost(ConnectionLost()) return self.assertFailure(d, ResponseNeverReceived)
Example #23
Source File: test_http.py From learn_python3_spider with MIT License | 5 votes |
def test_writeAfterConnectionLost(self): """ Calling L{Request.write} after L{Request.connectionLost} has been called does not raise an exception. L{RuntimeError} will be raised when finish is called on the request. """ channel = DummyChannel() req = http.Request(channel, False) req.connectionLost(Failure(ConnectionLost("The end."))) req.write(b'foobar') self.assertRaises(RuntimeError, req.finish)
Example #24
Source File: test_http.py From learn_python3_spider with MIT License | 5 votes |
def test_finishAfterConnectionLost(self): """ Calling L{Request.finish} after L{Request.connectionLost} has been called results in a L{RuntimeError} being raised. """ channel = DummyChannel() req = http.Request(channel, False) req.connectionLost(Failure(ConnectionLost("The end."))) self.assertRaises(RuntimeError, req.finish)
Example #25
Source File: test_http.py From learn_python3_spider with MIT License | 5 votes |
def test_connectionLostNotification(self): """ L{Request.connectionLost} triggers all finish notification Deferreds and cleans up per-request state. """ d = DummyChannel() request = http.Request(d, True) finished = request.notifyFinish() request.connectionLost(Failure(ConnectionLost("Connection done"))) self.assertIdentical(request.channel, None) return self.assertFailure(finished, ConnectionLost)
Example #26
Source File: test_http2.py From learn_python3_spider with MIT License | 5 votes |
def test_notifyOnFast400(self): """ A HTTP/2 stream that has had _respondToBadRequestAndDisconnect called on it from a request handler calls the L{http.Request.notifyFinish} errback with L{ConnectionLost}. """ connection = H2Connection() connection.requestFactory = NotifyingRequestFactory(DelayedHTTPHandler) frameFactory, transport = self.connectAndReceive( connection, self.getRequestHeaders, [] ) deferreds = connection.requestFactory.results self.assertEqual(len(deferreds), 1) # We need this to errback with a Failure indicating the loss of the # connection. def callback(ign): self.fail("Didn't errback, called back instead") def errback(reason): self.assertIsInstance(reason, failure.Failure) self.assertIs(reason.type, error.ConnectionLost) return None # Trap the error d = deferreds[0] d.addCallbacks(callback, errback) # Abort the stream. The only "natural" way to trigger this in the # current codebase is to send a multipart/form-data request that the # cgi module doesn't like. # That's absurdly hard, so instead we'll just call it ourselves. For # this reason we use the DummyProducerHandler, which doesn't write the # headers straight away. stream = connection.streams[1] stream._respondToBadRequestAndDisconnect() return d
Example #27
Source File: test_http2.py From learn_python3_spider with MIT License | 5 votes |
def test_failOnStopProducing(self): """ The transport telling the HTTP/2 connection to stop producing will fire all L{http.Request.notifyFinish} errbacks with L{error.} """ # We need to set up two requests concurrently so that we can validate # that these all fail. connectAndReceive will set up one: we will need # to manually send the rest. connection = H2Connection() connection.requestFactory = NotifyingRequestFactory(DelayedHTTPHandler) frameFactory, transport = self.connectAndReceive( connection, self.getRequestHeaders, [] ) secondRequest = buildRequestBytes( self.getRequestHeaders, [], frameFactory=frameFactory, streamID=3 ) connection.dataReceived(secondRequest) # Now we want to grab the deferreds from the notifying factory. deferreds = connection.requestFactory.results self.assertEqual(len(deferreds), 2) # We need these to errback with a Failure indicating the consumer # aborted our data production. def callback(ign): self.fail("Didn't errback, called back instead") def errback(reason): self.assertIsInstance(reason, failure.Failure) self.assertIs(reason.type, error.ConnectionLost) return None # Trap the error for d in deferreds: d.addCallbacks(callback, errback) # Now call stopProducing. connection.stopProducing() return defer.gatherResults(deferreds)
Example #28
Source File: test_http2.py From learn_python3_spider with MIT License | 5 votes |
def test_failOnGoaway(self): """ A HTTP/2 GoAway triggers the L{http.Request.notifyFinish} deferred for all outstanding requests with a Failure that contains a RemoteGoAway error. """ # We need to set up two requests concurrently so that we can validate # that these all fail. connectAndReceive will set up one: we will need # to manually send the rest. connection = H2Connection() connection.requestFactory = NotifyingRequestFactory(DelayedHTTPHandler) frameFactory, transport = self.connectAndReceive( connection, self.getRequestHeaders, [] ) secondRequest = buildRequestBytes( self.getRequestHeaders, [], frameFactory=frameFactory, streamID=3 ) connection.dataReceived(secondRequest) # Now we want to grab the deferreds from the notifying factory. deferreds = connection.requestFactory.results self.assertEqual(len(deferreds), 2) # We need these to errback with a Failure indicating the GOAWAY frame. def callback(ign): self.fail("Didn't errback, called back instead") def errback(reason): self.assertIsInstance(reason, failure.Failure) self.assertIs(reason.type, error.ConnectionLost) return None # Trap the error for d in deferreds: d.addCallbacks(callback, errback) # Now send the GoAway frame. invalidData = frameFactory.buildGoAwayFrame(lastStreamID=3).serialize() connection.dataReceived(invalidData) return defer.gatherResults(deferreds)
Example #29
Source File: test_http2.py From learn_python3_spider with MIT License | 5 votes |
def test_notifyOnResetStream(self): """ A HTTP/2 reset stream fires the L{http.Request.notifyFinish} deferred with L{ConnectionLost}. """ connection = H2Connection() connection.requestFactory = NotifyingRequestFactory(DelayedHTTPHandler) frameFactory, transport = self.connectAndReceive( connection, self.getRequestHeaders, [] ) deferreds = connection.requestFactory.results self.assertEqual(len(deferreds), 1) # We need this to errback with a Failure indicating the RSTSTREAM # frame. def callback(ign): self.fail("Didn't errback, called back instead") def errback(reason): self.assertIsInstance(reason, failure.Failure) self.assertIs(reason.type, error.ConnectionLost) return None # Trap the error d = deferreds[0] d.addCallbacks(callback, errback) # Now send the RSTSTREAM frame. invalidData = frameFactory.buildRstStreamFrame(streamID=1).serialize() connection.dataReceived(invalidData) return d
Example #30
Source File: test_agent.py From learn_python3_spider with MIT License | 5 votes |
def test_otherErrors(self): """ If there is an exception other than L{client.PotentialDataLoss} while L{client.readBody} is collecting the response body, the L{Deferred} returned by {client.readBody} fires with that exception. """ response = DummyResponse() d = client.readBody(response) response.protocol.dataReceived(b"first") response.protocol.connectionLost( Failure(ConnectionLost("mystery problem"))) reason = self.failureResultOf(d) reason.trap(ConnectionLost) self.assertEqual(reason.value.args, ("mystery problem",))