mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Backport of 328f5b5.
This commit is contained in:
		| @@ -16,7 +16,9 @@ from django.conf import settings | |||||||
| from django.contrib.auth import authenticate, login | from django.contrib.auth import authenticate, login | ||||||
| from django.core.handlers.base import BaseHandler | from django.core.handlers.base import BaseHandler | ||||||
| from django.core.handlers.wsgi import WSGIRequest | from django.core.handlers.wsgi import WSGIRequest | ||||||
| from django.core.signals import got_request_exception | from django.core.signals import (request_started, request_finished, | ||||||
|  |     got_request_exception) | ||||||
|  | from django.db import close_connection | ||||||
| from django.http import SimpleCookie, HttpRequest, QueryDict | from django.http import SimpleCookie, HttpRequest, QueryDict | ||||||
| from django.template import TemplateDoesNotExist | from django.template import TemplateDoesNotExist | ||||||
| from django.test import signals | from django.test import signals | ||||||
| @@ -76,7 +78,9 @@ def closing_iterator_wrapper(iterable, close): | |||||||
|         for item in iterable: |         for item in iterable: | ||||||
|             yield item |             yield item | ||||||
|     finally: |     finally: | ||||||
|         close() |         request_finished.disconnect(close_connection) | ||||||
|  |         close()                                 # will fire request_finished | ||||||
|  |         request_finished.connect(close_connection) | ||||||
|  |  | ||||||
|  |  | ||||||
| class ClientHandler(BaseHandler): | class ClientHandler(BaseHandler): | ||||||
| @@ -91,14 +95,13 @@ class ClientHandler(BaseHandler): | |||||||
|  |  | ||||||
|     def __call__(self, environ): |     def __call__(self, environ): | ||||||
|         from django.conf import settings |         from django.conf import settings | ||||||
|         from django.core import signals |  | ||||||
|  |  | ||||||
|         # Set up middleware if needed. We couldn't do this earlier, because |         # Set up middleware if needed. We couldn't do this earlier, because | ||||||
|         # settings weren't available. |         # settings weren't available. | ||||||
|         if self._request_middleware is None: |         if self._request_middleware is None: | ||||||
|             self.load_middleware() |             self.load_middleware() | ||||||
|  |  | ||||||
|         signals.request_started.send(sender=self.__class__) |         request_started.send(sender=self.__class__) | ||||||
|         request = WSGIRequest(environ) |         request = WSGIRequest(environ) | ||||||
|         # sneaky little hack so that we can easily get round |         # sneaky little hack so that we can easily get round | ||||||
|         # CsrfViewMiddleware.  This makes life easier, and is probably |         # CsrfViewMiddleware.  This makes life easier, and is probably | ||||||
| @@ -112,7 +115,9 @@ class ClientHandler(BaseHandler): | |||||||
|             response.streaming_content = closing_iterator_wrapper( |             response.streaming_content = closing_iterator_wrapper( | ||||||
|                 response.streaming_content, response.close) |                 response.streaming_content, response.close) | ||||||
|         else: |         else: | ||||||
|             response.close() |             request_finished.disconnect(close_connection) | ||||||
|  |             response.close()                    # will fire request_finished | ||||||
|  |             request_finished.connect(close_connection) | ||||||
|  |  | ||||||
|         return response |         return response | ||||||
|  |  | ||||||
|   | |||||||
| @@ -641,8 +641,6 @@ class TransactionTestCase(SimpleTestCase): | |||||||
|         else: |         else: | ||||||
|             content = response.content |             content = response.content | ||||||
|         content = content.decode(response._charset) |         content = content.decode(response._charset) | ||||||
|         # Avoid ResourceWarning about unclosed files. |  | ||||||
|         response.close() |  | ||||||
|         if html: |         if html: | ||||||
|             content = assert_and_parse_html(self, content, None, |             content = assert_and_parse_html(self, content, None, | ||||||
|                 "Response's content is not valid HTML:") |                 "Response's content is not valid HTML:") | ||||||
|   | |||||||
| @@ -4,8 +4,6 @@ from xml.dom.minidom import parseString, Node | |||||||
|  |  | ||||||
| from django.conf import settings, UserSettingsHolder | from django.conf import settings, UserSettingsHolder | ||||||
| from django.core import mail | from django.core import mail | ||||||
| from django.core.signals import request_finished |  | ||||||
| from django.db import close_connection |  | ||||||
| from django.test.signals import template_rendered, setting_changed | from django.test.signals import template_rendered, setting_changed | ||||||
| from django.template import Template, loader, TemplateDoesNotExist | from django.template import Template, loader, TemplateDoesNotExist | ||||||
| from django.template.loaders import cached | from django.template.loaders import cached | ||||||
| @@ -70,10 +68,8 @@ def setup_test_environment(): | |||||||
|     """Perform any global pre-test setup. This involves: |     """Perform any global pre-test setup. This involves: | ||||||
|  |  | ||||||
|         - Installing the instrumented test renderer |         - Installing the instrumented test renderer | ||||||
|         - Setting the email backend to the locmem email backend. |         - Set the email backend to the locmem email backend. | ||||||
|         - Setting the active locale to match the LANGUAGE_CODE setting. |         - Setting the active locale to match the LANGUAGE_CODE setting. | ||||||
|         - Disconnecting the request_finished signal to avoid closing |  | ||||||
|           the database connection within tests. |  | ||||||
|     """ |     """ | ||||||
|     Template.original_render = Template._render |     Template.original_render = Template._render | ||||||
|     Template._render = instrumented_test_render |     Template._render = instrumented_test_render | ||||||
| @@ -85,8 +81,6 @@ def setup_test_environment(): | |||||||
|  |  | ||||||
|     deactivate() |     deactivate() | ||||||
|  |  | ||||||
|     request_finished.disconnect(close_connection) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def teardown_test_environment(): | def teardown_test_environment(): | ||||||
|     """Perform any global post-test teardown. This involves: |     """Perform any global post-test teardown. This involves: | ||||||
|   | |||||||
| @@ -56,6 +56,5 @@ class SignalsTests(TestCase): | |||||||
|     def test_request_signals_streaming_response(self): |     def test_request_signals_streaming_response(self): | ||||||
|         response = self.client.get('/streaming/') |         response = self.client.get('/streaming/') | ||||||
|         self.assertEqual(self.signals, ['started']) |         self.assertEqual(self.signals, ['started']) | ||||||
|         # Avoid self.assertContains, because it explicitly calls response.close() |  | ||||||
|         self.assertEqual(b''.join(response.streaming_content), b"streaming content") |         self.assertEqual(b''.join(response.streaming_content), b"streaming content") | ||||||
|         self.assertEqual(self.signals, ['started', 'finished']) |         self.assertEqual(self.signals, ['started', 'finished']) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user