From 26a395f27d86bbf65f330851c8136c33694ac867 Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Wed, 18 Jan 2023 12:45:07 +0000 Subject: [PATCH] Refs #34233 -- Used aiter() and anext(). Available since Python 3.10. --- django/core/handlers/asgi.py | 2 +- django/http/response.py | 2 +- tests/httpwrappers/tests.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/django/core/handlers/asgi.py b/django/core/handlers/asgi.py index 998d135691..2aede079b9 100644 --- a/django/core/handlers/asgi.py +++ b/django/core/handlers/asgi.py @@ -268,7 +268,7 @@ class ASGIHandler(base.BaseHandler): # allow mapping of a sync iterator. # - Use aclosing() when consuming aiter. # See https://github.com/python/cpython/commit/6e8dcda - async with aclosing(response.__aiter__()) as content: + async with aclosing(aiter(response)) as content: async for part in content: for chunk, _ in self.chunk_bytes(part): await send( diff --git a/django/http/response.py b/django/http/response.py index 465a8553dc..f62dec8ce9 100644 --- a/django/http/response.py +++ b/django/http/response.py @@ -502,7 +502,7 @@ class StreamingHttpResponse(HttpResponseBase): self._iterator = iter(value) self.is_async = False except TypeError: - self._iterator = value.__aiter__() + self._iterator = aiter(value) self.is_async = True if hasattr(value, "close"): self._resource_closers.append(value.close) diff --git a/tests/httpwrappers/tests.py b/tests/httpwrappers/tests.py index fa2c8fd5d2..0a41ea5ec6 100644 --- a/tests/httpwrappers/tests.py +++ b/tests/httpwrappers/tests.py @@ -754,7 +754,7 @@ class StreamingHttpResponseTests(SimpleTestCase): "serve them asynchronously. Use an asynchronous iterator instead." ) with self.assertWarnsMessage(Warning, msg): - self.assertEqual(b"hello", await r.__aiter__().__anext__()) + self.assertEqual(b"hello", await anext(aiter(r))) class FileCloseTests(SimpleTestCase):