[Python-modules-commits] [python-django] 01/01: Add patch fix-24193-python34-test-failure.diff to fix a test failure with Python3.4.

Raphaël Hertzog hertzog at moszumanska.debian.org
Fri Jan 23 11:11:21 UTC 2015


This is an automated email from the git hooks/post-receive script.

hertzog pushed a commit to branch debian/experimental
in repository python-django.

commit 459109c5d05504ca048f15262204eb431e2a6d55
Author: Raphaël Hertzog <hertzog at debian.org>
Date:   Fri Jan 23 11:21:20 2015 +0100

    Add patch fix-24193-python34-test-failure.diff to fix a test failure with Python3.4.
---
 debian/changelog                                   |   4 +
 .../patches/fix-24193-python34-test-failure.diff   | 124 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 3 files changed, 129 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 5a17859..f25fff9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -8,6 +8,10 @@ python-django (1.7.3-1~exp1) experimental; urgency=high
     - Database DoS with ModelMultipleChoiceField (CVE-2015-0222)
     Closes: #775375
 
+  [ Raphaël Hertzog ]
+  * Add patch fix-24193-python34-test-failure.diff to fix a test failure with
+    Python3.4.
+
  -- Raphaël Hertzog <hertzog at debian.org>  Wed, 21 Jan 2015 09:56:19 +0100
 
 python-django (1.7.2-1) experimental; urgency=medium
diff --git a/debian/patches/fix-24193-python34-test-failure.diff b/debian/patches/fix-24193-python34-test-failure.diff
new file mode 100644
index 0000000..d3f0c4d
--- /dev/null
+++ b/debian/patches/fix-24193-python34-test-failure.diff
@@ -0,0 +1,124 @@
+Author: Claude Paroz <claude at 2xlibre.net>
+Date:   Wed Jan 21 20:59:40 2015 +0100
+
+    [1.7.x] Fixed #24193 -- Prevented unclosed file warnings in static.serve()
+    
+    This regression was caused by 818e59a3f0. The patch is a partial
+    backport of the new FileResponse class available in later Django
+    versions.
+    Thanks Raphaël Hertzog for the report, and Tim Graham and Collin
+    Anderson for the reviews.
+
+Origin: upstream, https://github.com/django/django/commit/b1bf8d64fbadcab860eb98662c49b8db33db0c3c
+Applied-Upstream: 1.7.4
+Bug: https://code.djangoproject.com/ticket/24193
+
+--- a/django/http/__init__.py
++++ b/django/http/__init__.py
+@@ -1,7 +1,8 @@
+ from django.http.cookie import SimpleCookie, parse_cookie
+ from django.http.request import (HttpRequest, QueryDict,
+     RawPostDataException, UnreadablePostError, build_request_repr)
+-from django.http.response import (HttpResponse, StreamingHttpResponse,
++from django.http.response import (
++    HttpResponse, StreamingHttpResponse, FileResponse,
+     HttpResponseRedirect, HttpResponsePermanentRedirect,
+     HttpResponseNotModified, HttpResponseBadRequest, HttpResponseForbidden,
+     HttpResponseNotFound, HttpResponseNotAllowed, HttpResponseGone,
+@@ -16,5 +17,5 @@ __all__ = [
+     'HttpResponseBadRequest', 'HttpResponseForbidden', 'HttpResponseNotFound',
+     'HttpResponseNotAllowed', 'HttpResponseGone', 'HttpResponseServerError',
+     'Http404', 'BadHeaderError', 'fix_location_header', 'JsonResponse',
+-    'conditional_content_removal',
++    'FileResponse', 'conditional_content_removal',
+ ]
+--- a/django/http/response.py
++++ b/django/http/response.py
+@@ -382,6 +382,9 @@ class StreamingHttpResponse(HttpResponse
+ 
+     @streaming_content.setter
+     def streaming_content(self, value):
++        self._set_streaming_content(value)
++
++    def _set_streaming_content(self, value):
+         # Ensure we can never iterate on "value" more than once.
+         self._iterator = iter(value)
+         if hasattr(value, 'close'):
+@@ -391,6 +394,21 @@ class StreamingHttpResponse(HttpResponse
+         return self.streaming_content
+ 
+ 
++class FileResponse(StreamingHttpResponse):
++    """
++    A streaming HTTP response class optimized for files.
++    """
++    block_size = 4096
++
++    def _set_streaming_content(self, value):
++        if hasattr(value, 'read'):
++            self._iterator = iter(lambda: value.read(self.block_size), b'')
++            if hasattr(value, 'close'):
++                self._closable_objects.append(value)
++        else:
++            super(FileResponse, self)._set_streaming_content(value)
++
++
+ class HttpResponseRedirectBase(HttpResponse):
+     allowed_schemes = ['http', 'https', 'ftp']
+ 
+--- a/django/views/static.py
++++ b/django/views/static.py
+@@ -11,14 +11,12 @@ import posixpath
+ import re
+ 
+ from django.http import (Http404, HttpResponse, HttpResponseRedirect,
+-    HttpResponseNotModified, StreamingHttpResponse)
++    HttpResponseNotModified, FileResponse)
+ from django.template import loader, Template, Context, TemplateDoesNotExist
+ from django.utils.http import http_date, parse_http_date
+ from django.utils.six.moves.urllib.parse import unquote
+ from django.utils.translation import ugettext as _, ugettext_lazy
+ 
+-STREAM_CHUNK_SIZE = 4096
+-
+ 
+ def serve(request, path, document_root=None, show_indexes=False):
+     """
+@@ -63,9 +61,7 @@ def serve(request, path, document_root=N
+         return HttpResponseNotModified()
+     content_type, encoding = mimetypes.guess_type(fullpath)
+     content_type = content_type or 'application/octet-stream'
+-    f = open(fullpath, 'rb')
+-    response = StreamingHttpResponse(iter(lambda: f.read(STREAM_CHUNK_SIZE), b''),
+-                                     content_type=content_type)
++    response = FileResponse(open(fullpath, 'rb'), content_type=content_type)
+     response["Last-Modified"] = http_date(statobj.st_mtime)
+     if stat.S_ISREG(statobj.st_mode):
+         response["Content-Length"] = statobj.st_size
+--- a/tests/view_tests/tests/test_static.py
++++ b/tests/view_tests/tests/test_static.py
+@@ -5,10 +5,10 @@ from os import path
+ import unittest
+ 
+ from django.conf.urls.static import static
+-from django.http import HttpResponseNotModified
++from django.http import FileResponse, HttpResponseNotModified
+ from django.test import SimpleTestCase, override_settings
+ from django.utils.http import http_date
+-from django.views.static import was_modified_since, STREAM_CHUNK_SIZE
++from django.views.static import was_modified_since
+ 
+ from .. import urls
+ from ..urls import media_dir
+@@ -37,9 +37,10 @@ class StaticTests(SimpleTestCase):
+         "The static view should stream files in chunks to avoid large memory usage"
+         response = self.client.get('/%s/%s' % (self.prefix, 'long-line.txt'))
+         first_chunk = next(response.streaming_content)
+-        self.assertEqual(len(first_chunk), STREAM_CHUNK_SIZE)
++        self.assertEqual(len(first_chunk), FileResponse.block_size)
+         second_chunk = next(response.streaming_content)
+         self.assertEqual(len(second_chunk), 1451)
++        response.close()
+ 
+     def test_unknown_mime_type(self):
+         response = self.client.get('/%s/file.unknown' % self.prefix)
diff --git a/debian/patches/series b/debian/patches/series
index c73a668..fcd2e9c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
 02_disable-sources-in-sphinxdoc.diff
 03_manpage.diff
 06_use_debian_geoip_database_as_default.diff
+fix-24193-python34-test-failure.diff

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-django.git



More information about the Python-modules-commits mailing list