Fixed #19519 again -- Regression in LiveServerTestCase after fd1279a4.

This commit is contained in:
Aymeric Augustin 2013-01-01 10:12:06 +01:00
parent 3570ff734e
commit bacb097ac3
4 changed files with 11 additions and 15 deletions

View File

@ -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

View File

@ -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:")

View File

@ -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:

View File

@ -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'])