#34392: Allow using test client response.json() with StreamingHttpResponse
-----------------------------------+--------------------------------------
Reporter: vainu-arto | Owner: vainu-arto
Type: New feature | Status: assigned
Component: Testing framework | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 1 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-----------------------------------+--------------------------------------
Comment (by Carlton Gibson):
>"Consuming self" means calling StreamingHttpResponse.iter, right? That
just returns self.streaming_content, ending up in the same place as far as
I can tell.
No, that's not quite right. Rather `__iter__` and `__aiter__` both handle
mapping the ''wrong'' kind of iterator, and issue a warning, to let you
know that's likely not what you're after:
{{{
>>> import asyncio
>>> from django.conf import settings
>>> from django.http import StreamingHttpResponse
>>>
>>> settings.configure()
>>>
>>> async def content():
... yield 1
... await asyncio.sleep(1)
... yield 2
...
>>> r = StreamingHttpResponse(content())
>>> list(r)
/Users/carlton/Projects/Django/django/django/http/response.py:497:
Warning: StreamingHttpResponse must consume asynchronous iterators in
order to serve them synchronously. Use a synchronous iterator instead.
warnings.warn(
[b'1', b'2']
>>> r = StreamingHttpResponse(content())
>>> list(r.streaming_content)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'async_generator' object is not iterable
}}}
That is, calling `list` (or `join`, in the case at hand here) on the
response itself allows accessing the content, where doing the same on
`streaming_content` does not.
`getvalue()` is currently going via `streaming_content` and so (currently)
would hit the type error here. Moving to `…join(self)` would resolve that,
at the cost of the warning which would need to be captured.
Make sense?
--
Ticket URL: <https://code.djangoproject.com/ticket/34392#comment:6>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/0107018833fe17f1-4014ba26-91d5-4c71-871e-7e4f2f7b1cb1-000000%40eu-central-1.amazonses.com.