|
1 | 1 | import json |
| 2 | +import pickle |
2 | 3 | from unittest import mock |
3 | 4 |
|
4 | 5 | import brotli |
@@ -853,3 +854,36 @@ def content(): |
853 | 854 | headers = {"Content-Length": "8"} |
854 | 855 | response = httpx.Response(200, content=content(), headers=headers) |
855 | 856 | assert response.headers == {"Content-Length": "8"} |
| 857 | + |
| 858 | + |
| 859 | +def test_response_picklable(): |
| 860 | + response = httpx.Response( |
| 861 | + 200, |
| 862 | + content=b"Hello, world!", |
| 863 | + request=httpx.Request("GET", "https://example.org"), |
| 864 | + ) |
| 865 | + pickle_response = pickle.loads(pickle.dumps(response)) |
| 866 | + assert pickle_response.is_closed is True |
| 867 | + assert pickle_response.is_stream_consumed is True |
| 868 | + assert pickle_response.next_request is None |
| 869 | + assert pickle_response.stream is not None |
| 870 | + assert pickle_response.content == b"Hello, world!" |
| 871 | + assert pickle_response.status_code == 200 |
| 872 | + assert pickle_response.request.url == response.request.url |
| 873 | + assert pickle_response.extensions == {} |
| 874 | + assert pickle_response.history == [] |
| 875 | + |
| 876 | + |
| 877 | +@pytest.mark.asyncio |
| 878 | +async def test_response_async_streaming_picklable(): |
| 879 | + response = httpx.Response(200, content=async_streaming_body()) |
| 880 | + pickle_response = pickle.loads(pickle.dumps(response)) |
| 881 | + assert pickle_response.content is None |
| 882 | + assert pickle_response._num_bytes_downloaded == 0 |
| 883 | + assert pickle_response.headers == {"Transfer-Encoding": "chunked"} |
| 884 | + |
| 885 | + response = httpx.Response(200, content=async_streaming_body()) |
| 886 | + await response.aread() |
| 887 | + pickle_response = pickle.loads(pickle.dumps(response)) |
| 888 | + assert pickle_response.content == b"Hello, world!" |
| 889 | + assert pickle_response._num_bytes_downloaded == 13 |
0 commit comments