Make django pick up app- and module-specific admin email addresses for stack trace messages.
- Legacy-Id: 3204
This commit is contained in:
parent
aeff74a467
commit
7a2859db46
|
@ -164,7 +164,8 @@ class BaseHandler(object):
|
||||||
except:
|
except:
|
||||||
request_repr = "Request repr() unavailable"
|
request_repr = "Request repr() unavailable"
|
||||||
message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
|
message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
|
||||||
mail_admins(subject, message, fail_silently=True, html_message=html)
|
extra_emails = self._get_extra_emails(exc_info)
|
||||||
|
mail_admins(subject, message, fail_silently=True, html_message=html, extra_emails=extra_emails)
|
||||||
# Return an HttpResponse that displays a friendly error message.
|
# Return an HttpResponse that displays a friendly error message.
|
||||||
callback, param_dict = resolver.resolve500()
|
callback, param_dict = resolver.resolve500()
|
||||||
return callback(request, **param_dict)
|
return callback(request, **param_dict)
|
||||||
|
@ -174,6 +175,17 @@ class BaseHandler(object):
|
||||||
import traceback
|
import traceback
|
||||||
return '\n'.join(traceback.format_exception(*(exc_info or sys.exc_info())))
|
return '\n'.join(traceback.format_exception(*(exc_info or sys.exc_info())))
|
||||||
|
|
||||||
|
def _get_extra_emails(self, exc_info=None):
|
||||||
|
"Helper function to retrieve app-specific admin email lists."
|
||||||
|
etype, value, tb = exc_info or sys.exc_info()
|
||||||
|
admins = []
|
||||||
|
while tb is not None:
|
||||||
|
f = tb.tb_frame
|
||||||
|
if "DEBUG_EMAILS" in f.f_globals:
|
||||||
|
admins += f.f_globals["DEBUG_EMAILS"]
|
||||||
|
tb = tb.tb_next
|
||||||
|
return admins
|
||||||
|
|
||||||
def apply_response_fixes(self, request, response):
|
def apply_response_fixes(self, request, response):
|
||||||
"""
|
"""
|
||||||
Applies each of the functions in self.response_fixes to the request and
|
Applies each of the functions in self.response_fixes to the request and
|
||||||
|
|
|
@ -409,12 +409,14 @@ def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
|
||||||
for subject, message, sender, recipient in datatuple]
|
for subject, message, sender, recipient in datatuple]
|
||||||
return connection.send_messages(messages)
|
return connection.send_messages(messages)
|
||||||
|
|
||||||
def mail_admins(subject, message, fail_silently=False, html_message=None):
|
def mail_admins(subject, message, fail_silently=False, html_message=None, extra_emails=[]):
|
||||||
"""Sends a message to the admins, as defined by the ADMINS setting."""
|
"""Sends a message to the admins, as defined by the ADMINS setting."""
|
||||||
if not settings.ADMINS:
|
if not (settings.ADMINS or extra_emails):
|
||||||
return
|
return
|
||||||
|
emails = set(list(settings.ADMINS) + extra_emails);
|
||||||
|
print " * Admin email addresses:", emails
|
||||||
from django.core.mail import EmailMultiAlternatives
|
from django.core.mail import EmailMultiAlternatives
|
||||||
msg = EmailMultiAlternatives(settings.EMAIL_SUBJECT_PREFIX + subject, message, settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS])
|
msg = EmailMultiAlternatives(settings.EMAIL_SUBJECT_PREFIX + subject, message, settings.SERVER_EMAIL, [a[1] for a in emails])
|
||||||
if html_message:
|
if html_message:
|
||||||
msg.attach_alternative(html_message, "text/html")
|
msg.attach_alternative(html_message, "text/html")
|
||||||
msg.send(fail_silently=fail_silently)
|
msg.send(fail_silently=fail_silently)
|
||||||
|
|
Loading…
Reference in a new issue