1 | --- base.py (revision 3393)
|
---|
2 | +++ base.py (revision 3596)
|
---|
3 | @@ -1,7 +1,8 @@
|
---|
4 | from django.utils import httpwrappers
|
---|
5 | +import sys
|
---|
6 |
|
---|
7 | class BaseHandler:
|
---|
8 | def __init__(self):
|
---|
9 | self._request_middleware = self._view_middleware = self._response_middleware = self._exception_middleware = None
|
---|
10 |
|
---|
11 | def load_middleware(self):
|
---|
12 | @@ -105,18 +106,19 @@
|
---|
13 | except exceptions.PermissionDenied:
|
---|
14 | return httpwrappers.HttpResponseForbidden('<h1>Permission denied</h1>')
|
---|
15 | except: # Handle everything else, including SuspiciousOperation, etc.
|
---|
16 | if DEBUG:
|
---|
17 | return self.get_technical_error_response(request)
|
---|
18 | else:
|
---|
19 | + exc_info = sys.exc_info()
|
---|
20 | subject = 'Coding error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in INTERNAL_IPS and 'internal' or 'EXTERNAL'), getattr(request, 'path', ''))
|
---|
21 | try:
|
---|
22 | request_repr = repr(request)
|
---|
23 | except:
|
---|
24 | request_repr = "Request repr() unavailable"
|
---|
25 | - message = "%s\n\n%s" % (self._get_traceback(), request_repr)
|
---|
26 | + message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
|
---|
27 | mail_admins(subject, message, fail_silently=True)
|
---|
28 | return self.get_friendly_error_response(request, resolver)
|
---|
29 |
|
---|
30 | def get_friendly_error_response(self, request, resolver):
|
---|
31 | """
|
---|
32 | Returns an HttpResponse that displays a PUBLIC error message for a
|
---|
33 | @@ -135,10 +137,10 @@
|
---|
34 | from django.views import debug
|
---|
35 | if is404:
|
---|
36 | return debug.technical_404_response(request, exception)
|
---|
37 | else:
|
---|
38 | return debug.technical_500_response(request, *sys.exc_info())
|
---|
39 |
|
---|
40 | - def _get_traceback(self):
|
---|
41 | + def _get_traceback(self, exc_info=None):
|
---|
42 | "Helper function to return the traceback as a string"
|
---|
43 | import sys, traceback
|
---|
44 | - return '\n'.join(traceback.format_exception(*sys.exc_info()))
|
---|
45 | + return '\n'.join(traceback.format_exception(*(exc_info or sys.exc_info())))
|
---|