Skip to content

Commit

Permalink
fix: usage of io-like interface with VCR.py
Browse files Browse the repository at this point in the history
  • Loading branch information
tito committed Jan 22, 2025
1 parent 8217a4c commit f3a7903
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
18 changes: 18 additions & 0 deletions tests/integration/test_aiohttp.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import io
import logging
import ssl
import urllib.parse
Expand Down Expand Up @@ -466,3 +467,20 @@ def test_filter_query_parameters(tmpdir, httpbin):
cassette_content = f.read()
assert "password" not in cassette_content
assert "secret" not in cassette_content


@pytest.mark.online
@pytest.mark.asyncio
def test_use_cassette_with_io(tmpdir, caplog, httpbin):
url = httpbin.url + "/post"

# test without cassettes
data = io.BytesIO(b"hello")
_, response_json = request("POST", url, output="json", data=data)
assert response_json["data"] == "hello"

# test with cassettes
data = io.BytesIO(b"hello")
with vcr.use_cassette(str(tmpdir.join("post.yaml"))):
_, response_json = request("POST", url, output="json", data=data)
assert response_json["data"] == "hello"
7 changes: 6 additions & 1 deletion vcr/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ def __init__(self, method, uri, body, headers):
self._was_file = hasattr(body, "read")
self._was_iter = _is_nonsequence_iterator(body)
if self._was_file:
self.body = body.read()
if hasattr(body, "tell"):
tell = body.tell()
self.body = body.read()
body.seek(tell)
else:
self.body = body.read()
elif self._was_iter:
self.body = list(body)
else:
Expand Down

0 comments on commit f3a7903

Please sign in to comment.