mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-08-26 10:14:48 +00:00
80 lines
2.9 KiB
Diff
80 lines
2.9 KiB
Diff
From 1a48e1f898035e3bedc981f06520842c55977706 Mon Sep 17 00:00:00 2001
|
|
From: kleine-safie <k-guilherme@safie.jp>
|
|
Date: Wed, 10 Jun 2026 11:05:30 +0900
|
|
Subject: [PATCH] support for pause_reading
|
|
|
|
---
|
|
aioresponses/compat.py | 5 +++++
|
|
aioresponses/core.py | 2 ++
|
|
tests/test_aioresponses.py | 11 ++++++++++-
|
|
tox.ini | 11 ++++++-----
|
|
4 files changed, 23 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/aioresponses/compat.py b/aioresponses/compat.py
|
|
index 83fd47a..e95ecb2 100644
|
|
--- a/aioresponses/compat.py
|
|
+++ b/aioresponses/compat.py
|
|
@@ -2,6 +2,7 @@
|
|
import asyncio # noqa: F401
|
|
from re import Pattern
|
|
from typing import Dict, Optional, Union # noqa
|
|
+from unittest.mock import Mock
|
|
from urllib.parse import parse_qsl, urlencode
|
|
|
|
from aiohttp import __version__ as aiohttp_version, StreamReader
|
|
@@ -17,6 +18,10 @@ def stream_reader_factory( # noqa
|
|
loop: 'Optional[asyncio.AbstractEventLoop]' = None
|
|
) -> StreamReader:
|
|
protocol = ResponseHandler(loop=loop)
|
|
+ # Satisfies BaseProtocol's flow control hooks that
|
|
+ # fire when a large payload exceeds the StreamReader limit.
|
|
+ protocol._parser = Mock()
|
|
+ protocol._parser.feed_data.return_value = ([], False, b'')
|
|
return StreamReader(protocol, limit=2 ** 16, loop=loop)
|
|
|
|
|
|
diff --git a/aioresponses/core.py b/aioresponses/core.py
|
|
index a904cf9..52640f3 100644
|
|
--- a/aioresponses/core.py
|
|
+++ b/aioresponses/core.py
|
|
@@ -182,6 +182,8 @@ def _build_response(self, url: 'Union[URL, str]',
|
|
headers=CIMultiDictProxy(self._prepare_request_headers(request_headers)),
|
|
real_url=url
|
|
)
|
|
+ if 'stream_writer' in inspect.signature(response_class).parameters:
|
|
+ kwargs['stream_writer'] = Mock(output_size=0)
|
|
kwargs['writer'] = None
|
|
kwargs['continue100'] = None
|
|
kwargs['timer'] = TimerNoop()
|
|
diff --git a/tests/test_aioresponses.py b/tests/test_aioresponses.py
|
|
index 68bec3f..45c0d87 100644
|
|
--- a/tests/test_aioresponses.py
|
|
+++ b/tests/test_aioresponses.py
|
|
@@ -4,9 +4,10 @@
|
|
from asyncio import CancelledError, TimeoutError
|
|
from random import uniform
|
|
from typing import Coroutine, Generator, Union
|
|
-from unittest.mock import patch
|
|
+from unittest.mock import MagicMock, patch
|
|
|
|
from aiohttp import hdrs
|
|
+from aiohttp.base_protocol import BaseProtocol
|
|
from aiohttp import http
|
|
from aiohttp.client import ClientSession
|
|
from aiohttp.client_reqrep import ClientResponse
|
|
@@ -312,6 +313,14 @@ async def test_streaming(self, m):
|
|
content = await resp.content.read()
|
|
self.assertEqual(content, b'Test')
|
|
|
|
+ @aioresponses()
|
|
+ async def test_streaming_large_body(self, m):
|
|
+ body = b'x' * (1024 * 1024)
|
|
+ m.get(self.url, body=body)
|
|
+ resp = await self.session.get(self.url)
|
|
+ content = await resp.content.read()
|
|
+ self.assertEqual(content, body)
|
|
+
|
|
@aioresponses()
|
|
async def test_streaming_up_to(self, m):
|
|
m.get(self.url, body='Test')
|