Commit 05248a10 authored by Jon Dufresne's avatar Jon Dufresne Committed by Tim Graham
Browse files

Fixed #25576 -- Added IOBase methods required by TextIOWrapper to HttpResponse.

parent 1745aa00
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -263,6 +263,12 @@ class HttpResponseBase(six.Iterator):
    # These methods partially implement a stream-like object interface.
    # See https://docs.python.org/library/io.html#io.IOBase

    def readable(self):
        return False

    def seekable(self):
        return False

    def writable(self):
        return False

+14 −0
Original line number Diff line number Diff line
@@ -807,6 +807,20 @@ Methods
    Returns the value of :attr:`HttpResponse.content`. This method makes
    an :class:`HttpResponse` instance a stream-like object.

.. method:: HttpResponse.readable()

   .. versionadded:: 1.10

    Always ``False``. This method makes an :class:`HttpResponse` instance a
    stream-like object.

.. method:: HttpResponse.seekable()

   .. versionadded:: 1.10

    Always ``False``. This method makes an :class:`HttpResponse` instance a
    stream-like object.

.. method:: HttpResponse.writable()

    Always ``True``. This method makes an :class:`HttpResponse` instance a
+5 −0
Original line number Diff line number Diff line
@@ -174,6 +174,11 @@ Requests and Responses

* Added ``request.user`` to the debug view.

* Added :class:`~django.http.HttpResponse` methods
  :meth:`~django.http.HttpResponse.readable()` and
  :meth:`~django.http.HttpResponse.seekable()` to make an instance a
  stream-like object and allow wrapping it with :py:class:`io.TextIOWrapper`.

Serialization
^^^^^^^^^^^^^

+9 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

from __future__ import unicode_literals

import io

from django.conf import settings
from django.http import HttpResponse
from django.http.response import HttpResponseBase
@@ -112,3 +114,10 @@ class HttpResponseTests(SimpleTestCase):
        response = HttpResponse(content="Café :)".encode(UTF8), status=201)
        expected = '<HttpResponse status_code=201, "text/html; charset=utf-8">'
        self.assertEqual(repr(response), expected)

    def test_wrap_textiowrapper(self):
        content = "Café :)"
        r = HttpResponse()
        with io.TextIOWrapper(r, UTF8) as buf:
            buf.write(content)
        self.assertEqual(r.content, content.encode(UTF8))