Author: jezdez Date: 2012-02-12 04:19:02 -0800 (Sun, 12 Feb 2012) New Revision: 17512
Modified: django/trunk/django/utils/log.py django/trunk/tests/regressiontests/logging_tests/tests.py Log: Fixed AdminEmailHandler to format the subject message correctly when arguments are passed. This bug was hidden before r17480 as it basically didn't take the arguments into account. Refs #14973. Modified: django/trunk/django/utils/log.py =================================================================== --- django/trunk/django/utils/log.py 2012-02-11 22:17:02 UTC (rev 17511) +++ django/trunk/django/utils/log.py 2012-02-12 12:19:02 UTC (rev 17512) @@ -49,7 +49,7 @@ record.levelname, (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), - record.msg + record.getMessage() ) filter = get_exception_reporter_filter(request) request_repr = filter.get_request_repr(request) Modified: django/trunk/tests/regressiontests/logging_tests/tests.py =================================================================== --- django/trunk/tests/regressiontests/logging_tests/tests.py 2012-02-11 22:17:02 UTC (rev 17511) +++ django/trunk/tests/regressiontests/logging_tests/tests.py 2012-02-12 12:19:02 UTC (rev 17512) @@ -4,7 +4,7 @@ from django.conf import compat_patch_logging_config from django.core import mail -from django.test import TestCase +from django.test import TestCase, RequestFactory from django.test.utils import override_settings from django.utils.log import CallbackFilter, RequireDebugFalse, getLogger @@ -124,6 +124,16 @@ class AdminEmailHandlerTest(TestCase): + def get_admin_email_handler(self, logger): + # Inspired from regressiontests/views/views.py: send_log() + # ensuring the AdminEmailHandler does not get filtered out + # even with DEBUG=True. + admin_email_handler = [ + h for h in logger.handlers + if h.__class__.__name__ == "AdminEmailHandler" + ][0] + return admin_email_handler + @override_settings( ADMINS=(('whatever admin', 'ad...@example.com'),), EMAIL_SUBJECT_PREFIX='-SuperAwesomeSubject-' @@ -134,33 +144,63 @@ setting are used to compose the email subject. Refs #16736. """ - message = "Custom message that says '%s' and '%s'" token1 = 'ping' token2 = 'pong' logger = getLogger('django.request') - # Inspired from regressiontests/views/views.py: send_log() - # ensuring the AdminEmailHandler does not get filtered out - # even with DEBUG=True. - admin_email_handler = [ - h for h in logger.handlers - if h.__class__.__name__ == "AdminEmailHandler" - ][0] + admin_email_handler = self.get_admin_email_handler(logger) # Backup then override original filters orig_filters = admin_email_handler.filters - admin_email_handler.filters = [] + try: + admin_email_handler.filters = [] - logger.error(message, token1, token2) + logger.error(message, token1, token2) - self.assertEqual(len(mail.outbox), 1) - self.assertEqual(mail.outbox[0].to, ['ad...@example.com']) - self.assertEqual(mail.outbox[0].subject, - "-SuperAwesomeSubject-ERROR: Custom message that says 'ping' and 'pong'") + self.assertEqual(len(mail.outbox), 1) + self.assertEqual(mail.outbox[0].to, ['ad...@example.com']) + self.assertEqual(mail.outbox[0].subject, + "-SuperAwesomeSubject-ERROR: Custom message that says 'ping' and 'pong'") + finally: + # Restore original filters + admin_email_handler.filters = orig_filters - # Restore original filters - admin_email_handler.filters = orig_filters + @override_settings( + ADMINS=(('whatever admin', 'ad...@example.com'),), + EMAIL_SUBJECT_PREFIX='-SuperAwesomeSubject-', + INTERNAL_IPS=('127.0.0.1',), + ) + def test_accepts_args_and_request(self): + """ + Ensure that the subject is also handled if being + passed a request object. + """ + message = "Custom message that says '%s' and '%s'" + token1 = 'ping' + token2 = 'pong' + logger = getLogger('django.request') + admin_email_handler = self.get_admin_email_handler(logger) + # Backup then override original filters + orig_filters = admin_email_handler.filters + try: + admin_email_handler.filters = [] + rf = RequestFactory() + request = rf.get('/') + logger.error(message, token1, token2, + extra={ + 'status_code': 403, + 'request': request, + } + ) + self.assertEqual(len(mail.outbox), 1) + self.assertEqual(mail.outbox[0].to, ['ad...@example.com']) + self.assertEqual(mail.outbox[0].subject, + "-SuperAwesomeSubject-ERROR (internal IP): Custom message that says 'ping' and 'pong'") + finally: + # Restore original filters + admin_email_handler.filters = orig_filters + @override_settings( ADMINS=(('admin', 'ad...@example.com'),), EMAIL_SUBJECT_PREFIX='', -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.