Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_getheaders(self):
headers = {"host": "example.com"}
r = HTTPResponse(headers=headers)
assert r.getheaders() == headers
# Test no defined length
fp = BytesIO(b"12345")
resp = HTTPResponse(fp, preload_content=False)
resp.read()
assert resp.length_remaining is None
# Test our update from content-length
fp = BytesIO(b"12345")
resp = HTTPResponse(fp, headers=headers, preload_content=False)
resp.read()
assert resp.length_remaining == 0
# Test partial read
fp = BytesIO(b"12345")
resp = HTTPResponse(fp, headers=headers, preload_content=False)
data = resp.stream(2)
next(data)
assert resp.length_remaining == 3
def test_retries(self):
fp = BytesIO(b"")
resp = HTTPResponse(fp)
assert resp.retries is None
retry = Retry()
resp = HTTPResponse(fp, retries=retry)
assert resp.retries == retry
def test_chunked_response_with_extensions(self):
stream = [b"foo", b"bar"]
fp = MockChunkedEncodingWithExtensions(stream)
r = httplib.HTTPResponse(MockSock)
r.fp = fp
r.chunked = True
r.chunk_left = None
resp = HTTPResponse(
r, preload_content=False, headers={"transfer-encoding": "chunked"}
)
assert stream == list(resp.stream())
def test_retries(self):
fp = BytesIO(b"")
resp = HTTPResponse(fp)
assert resp.retries is None
retry = Retry()
resp = HTTPResponse(fp, retries=retry)
assert resp.retries == retry
def test_length_w_bad_header(self):
garbage = {"content-length": "foo"}
fp = BytesIO(b"12345")
resp = HTTPResponse(fp, headers=garbage, preload_content=False)
assert resp.length_remaining is None
garbage["content-length"] = "-10"
resp = HTTPResponse(fp, headers=garbage, preload_content=False)
assert resp.length_remaining is None
def test_chunked_decoding_deflate(self):
data = zlib.compress(b"foo")
fp = BytesIO(data)
r = HTTPResponse(
fp, headers={"content-encoding": "deflate"}, preload_content=False
)
assert r.read(3) == b""
# Buffer in case we need to switch to the raw stream
assert r._decoder._data is not None
assert r.read(1) == b"f"
# Now that we've decoded data, we just stream through the decoder
assert r._decoder._data is None
assert r.read(2) == b"oo"
assert r.read() == b""
assert r.read() == b""
resp.close()
assert resp.closed
# Try closing with an `httplib.HTTPResponse`, because it has an
# `isclosed` method.
try:
hlr = httplib.HTTPResponse(sock)
resp2 = HTTPResponse(hlr, preload_content=False)
assert not resp2.closed
resp2.close()
assert resp2.closed
finally:
hlr.close()
# also try when only data is present.
resp3 = HTTPResponse("foodata")
with pytest.raises(IOError):
resp3.fileno()
resp3._fp = 2
# A corner case where _fp is present but doesn't have `closed`,
# `isclosed`, or `fileno`. Unlikely, but possible.
assert resp3.closed
with pytest.raises(IOError):
resp3.fileno()
def save_file(self, path, raw):
#TODO: Using Database for saving files
with open(path, "wb") as f:
if isinstance(raw, HTTPResponse):
shutil.copyfileobj(raw, f)
else:
f.write(raw)
low_conn.send(i.encode())
low_conn.send(b'\r\n')
low_conn.send(b'0\r\n\r\n')
# Receive the response from the server
try:
# For Python 2.7+ versions, use buffering of HTTP
# responses
r = low_conn.getresponse(buffering=True)
except TypeError:
# For compatibility with Python 2.6 versions and back
r = low_conn.getresponse()
resp = HTTPResponse.from_httplib(
r,
pool=conn,
connection=low_conn,
preload_content=False,
decode_content=False
)
except:
# If we hit any problems here, clean up the connection.
# Then, reraise so that we can handle the actual exception.
low_conn.close()
raise
except (ProtocolError, socket.error) as err:
raise ConnectionError(err, request=request)
except MaxRetryError as e: