def connectionLost(self, reason): """ Deliver the accumulated response bytes to the waiting L{Deferred}, if the response body has been completely received without error. """ if reason.check(ResponseDone): body = b''.join(self.dataBuffer) # ---8<--- snippet from u1db.remote.http_client if self.status in (200, 201): self.deferred.callback(body) elif self.status in http_errors.ERROR_STATUSES: try: respdic = json.loads(body) except ValueError: self.deferred.errback( errors.HTTPError(self.status, body, self.headers)) else: self._error(respdic) # special cases elif self.status == 503: self.deferred.errback(errors.Unavailable(body, self.headers)) else: self.deferred.errback( errors.HTTPError(self.status, body, self.headers)) # ---8<--- end of snippet from u1db.remote.http_client elif reason.check(PotentialDataLoss): self.deferred.errback( PartialDownloadError(self.status, self.message, b''.join(self.dataBuffer))) else: self.deferred.errback(reason)
def test_HTTPError(self): err = errors.HTTPError(500) self.assertEqual(500, err.status) self.assertIs(None, err.wire_description) self.assertIs(None, err.message) err = errors.HTTPError(500, "Crash.") self.assertEqual(500, err.status) self.assertIs(None, err.wire_description) self.assertEqual("Crash.", err.message)
def test_get_doc_deleted_include_deleted(self): self.response_val = errors.HTTPError( 404, json.dumps({"error": errors.DOCUMENT_DELETED}), { 'x-u1db-rev': 'doc-rev-gone', 'x-u1db-has-conflicts': 'false' }) doc = self.db.get_doc('deleted', include_deleted=True) self.assertEqual('deleted', doc.doc_id) self.assertEqual('doc-rev-gone', doc.rev) self.assertIs(None, doc.content) self.assertEqual(('GET', ['doc', 'deleted'], { 'include_deleted': True }, None, None), self.got)
def _response(self): resp = self._conn.getresponse() body = resp.read() headers = dict(resp.getheaders()) if resp.status in (200, 201): return body, headers elif resp.status in http_errors.ERROR_STATUSES: try: respdic = json.loads(body) except ValueError: pass else: self._error(respdic) # special case if resp.status == 503: raise errors.Unavailable(body, headers) raise errors.HTTPError(resp.status, body, headers)
def test_get_doc_pass_through_errors(self): self.response_val = errors.HTTPError(500, 'Crash.') self.assertRaises(errors.HTTPError, self.db.get_doc, 'something-something')
def test_HTTPError_str(self): err = errors.HTTPError(500) self.assertEqual("HTTPError(500)", str(err)) err = errors.HTTPError(500, "ERROR") self.assertEqual("HTTPError(500, 'ERROR')", str(err))