Here are the examples of the python api django.views.debug.ExceptionReporter taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
18 Examples
3
Example 1
Project: django-peavy Source File: handlers.py
def get_debug_page(self, record, request):
"""
Given a logging.LogRecord and a Django request that encountered an
exception, create a Django server error debugging page.
"""
from django.views.debug import ExceptionReporter
debug_page = ""
if record.exc_info:
exc_info = record.exc_info
reporter = ExceptionReporter(request, *exc_info)
debug_page = reporter.get_traceback_html() or ""
return debug_page
3
Example 2
def get_stack_trace(self, record, request):
"""
Given a logging.LogRecord and a Django request that encountered an
exception, collect a stack trace.
"""
from django.views.debug import ExceptionReporter
stack_trace = ""
if record.exc_info:
exc_info = record.exc_info
reporter = ExceptionReporter(request, *exc_info)
stack_trace = "\n".join(
traceback.format_exception(*record.exc_info)
)
return stack_trace
3
Example 3
def _send_email(self, subject, message, exc_info=None, attachments=None):
"""
Helper method mimicking :class:`AdminEmailHandler` - if exception is available renders traceback as HTML message
content
"""
if exc_info is not None:
reporter = ExceptionReporter(None, is_email=True, *exc_info)
html_message = reporter.get_traceback_html()
attachments.append(("debug.html", html_message, "text/html"))
self.logger.info("Sending message to admins: %s - %s", subject, message)
self._mail_admins_with_attachment(subject, message, attachments=attachments)
0
Example 4
Project: GAE-Bulk-Mailer Source File: log.py
def emit(self, record):
try:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
(request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
and 'internal' or 'EXTERNAL'),
record.getMessage()
)
filter = get_exception_reporter_filter(request)
request_repr = filter.get_request_repr(request)
except Exception:
subject = '%s: %s' % (
record.levelname,
record.getMessage()
)
request = None
request_repr = "Request repr() unavailable."
subject = self.format_subject(subject)
if record.exc_info:
exc_info = record.exc_info
stack_trace = '\n'.join(traceback.format_exception(*record.exc_info))
else:
exc_info = (None, record.getMessage(), None)
stack_trace = 'No stack trace available'
message = "%s\n\n%s" % (stack_trace, request_repr)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
html_message = self.include_html and reporter.get_traceback_html() or None
mail.mail_admins(subject, message, fail_silently=True, html_message=html_message)
0
Example 5
Project: edison Source File: resource.py
def error_handler(self, e, request, meth, em_format):
"""
Override this method to add handling of errors customized for your
needs
"""
if isinstance(e, FormValidationError):
return self.form_validation_response(e)
elif isinstance(e, TypeError):
result = rc.BAD_REQUEST
hm = HandlerMethod(meth)
sig = hm.signature
msg = 'Method signature does not match.\n\n'
if sig:
msg += 'Signature should be: %s' % sig
else:
msg += 'Resource does not expect any parameters.'
if self.display_errors:
msg += '\n\nException was: %s' % str(e)
result.content = format_error(msg)
return result
elif isinstance(e, Http404):
return rc.NOT_FOUND
elif isinstance(e, HttpStatusCode):
return e.response
else:
"""
On errors (like code errors), we'd like to be able to
give crash reports to both admins and also the calling
user. There's two setting parameters for this:
Parameters::
- `PISTON_EMAIL_ERRORS`: Will send a Django formatted
error email to people in `settings.ADMINS`.
- `PISTON_DISPLAY_ERRORS`: Will return a simple traceback
to the caller, so he can tell you what error they got.
If `PISTON_DISPLAY_ERRORS` is not enabled, the caller will
receive a basic "500 Internal Server Error" message.
"""
exc_type, exc_value, tb = sys.exc_info()
rep = ExceptionReporter(request, exc_type, exc_value, tb.tb_next)
if self.email_errors:
self.email_exception(rep)
if self.display_errors:
return HttpResponseServerError(
format_error('\n'.join(rep.format_exception())))
else:
raise
0
Example 6
Project: PyClassLessons Source File: log.py
def emit(self, record):
try:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
else 'EXTERNAL'),
record.getMessage()
)
filter = get_exception_reporter_filter(request)
request_repr = '\n{0}'.format(force_text(filter.get_request_repr(request)))
except Exception:
subject = '%s: %s' % (
record.levelname,
record.getMessage()
)
request = None
request_repr = "unavailable"
subject = self.format_subject(subject)
if record.exc_info:
exc_info = record.exc_info
else:
exc_info = (None, record.getMessage(), None)
message = "%s\n\nRequest repr(): %s" % (self.format(record), request_repr)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
html_message = reporter.get_traceback_html() if self.include_html else None
mail.mail_admins(subject, message, fail_silently=True,
html_message=html_message,
connection=self.connection())
0
Example 7
Project: Django--an-app-at-a-time Source File: log.py
def emit(self, record):
try:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
else 'EXTERNAL'),
record.getMessage()
)
filter = get_exception_reporter_filter(request)
request_repr = '\n{}'.format(force_text(filter.get_request_repr(request)))
except Exception:
subject = '%s: %s' % (
record.levelname,
record.getMessage()
)
request = None
request_repr = "unavailable"
subject = self.format_subject(subject)
if record.exc_info:
exc_info = record.exc_info
else:
exc_info = (None, record.getMessage(), None)
message = "%s\n\nRequest repr(): %s" % (self.format(record), request_repr)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
html_message = reporter.get_traceback_html() if self.include_html else None
self.send_mail(subject, message, fail_silently=True, html_message=html_message)
0
Example 8
Project: snowy Source File: resource.py
def error_handler(self, e, request, meth):
"""
Override this method to add handling of errors customized for your
needs
"""
if isinstance(e, FormValidationError):
return self.form_validation_response(e)
elif isinstance(e, TypeError):
result = rc.BAD_REQUEST
hm = HandlerMethod(meth)
sig = hm.signature
msg = 'Method signature does not match.\n\n'
if sig:
msg += 'Signature should be: %s' % sig
else:
msg += 'Resource does not expect any parameters.'
if self.display_errors:
msg += '\n\nException was: %s' % str(e)
result.content = format_error(msg)
return result
elif isinstance(e, Http404):
return rc.NOT_FOUND
elif isinstance(e, HttpStatusCode):
return e.response
else:
"""
On errors (like code errors), we'd like to be able to
give crash reports to both admins and also the calling
user. There's two setting parameters for this:
Parameters::
- `PISTON_EMAIL_ERRORS`: Will send a Django formatted
error email to people in `settings.ADMINS`.
- `PISTON_DISPLAY_ERRORS`: Will return a simple traceback
to the caller, so he can tell you what error they got.
If `PISTON_DISPLAY_ERRORS` is not enabled, the caller will
receive a basic "500 Internal Server Error" message.
"""
exc_type, exc_value, tb = sys.exc_info()
rep = ExceptionReporter(request, exc_type, exc_value, tb.tb_next)
if self.email_errors:
self.email_exception(rep)
if self.display_errors:
return HttpResponseServerError(
format_error('\n'.join(rep.format_exception())))
else:
raise
0
Example 9
Project: splunk-webframework Source File: views.py
def get_exception_info(request):
# We use Django's debug reporter, even though we are doing our own template.
# This is because it has a great way of collecting all the useful info we
# need, so no reason not to leverage it
exc_info = sys.exc_info()
reporter = ExceptionReporter(request, *exc_info)
ctx = reporter.get_traceback_data()
# This is a refactor of what the technical_500_template contains, just
# doing the logic in Python rather than in a template. We collect all this
# information so that we can log it.
exception_type = ctx['exception_type'] if 'exception_type' in ctx else "No exception supplied"
exception_value = ctx['exception_value'] if 'exception_value' in ctx else "No exception supplied"
django_version = ctx["django_version_info"]
python_executable = ctx['sys_executable']
python_version = ctx['sys_version_info']
python_path = ctx['sys_path']
server_time = str(ctx['server_time'])
unicode_hint = None
if 'unicode_hint' in ctx:
unicdoe_hint = ctx['unicode_hint']
last_frame = None
if 'lastframe' in ctx:
frame_info = ctx['lastframe']
last_frame = "%s in %s, line %s" % (frame_info['filename'], frame_info['function'], frame_info['lineno'])
loaders = []
if 'template_does_not_exist' in ctx and 'loader_debug_info' in ctx and ctx['loader_debug_info']:
for loader in ctx['loader_debug_info']:
loader_info = {"name": loader['loader'], "templates": []}
for tmpl in loader['templates']:
loader_info['templates'].append({"file": tmpl['name'], "exists": tmpl['exists']})
loaders.append(loader_info)
template_errors = None
if 'template_info' in ctx and ctx['template_info']:
template_info = ctx['template_info']
template_errors = {
"name": template_info['name'],
"line": template_info['line'],
"message": template_info['message']
}
exception_info = []
if 'frames' in ctx:
frames = ctx['frames']
for frame in frames:
frame_info = {
"filename": frame['filename'],
"function": frame['function'],
"line": frame['lineno'],
"context_line": frame['context_line'],
"vars": []
}
if 'vars' in frame:
for var in frame['vars']:
frame_info['vars'].append({
"variable": str(var[0]),
"value": format(var[1])
})
exception_info.append(frame_info)
request_info = {
"path_info": request.path_info,
"method": request.META['REQUEST_METHOD'],
"url": request.build_absolute_uri(),
"GET": {},
"POST": {},
"FILES": {},
"COOKIES": {},
"META": {}
}
if hasattr(request, "GET"):
for key, value in request.GET.iteritems():
request_info['GET'][key] = format(value)
if "filtered_POST" in ctx:
for key, value in ctx['filtered_POST'].iteritems():
request_info['POST'][key] = format(value)
if hasattr(request, "FILES"):
for key, value in request.FILES.iteritems():
request_info['FILES'][key] = format(value)
if hasattr(request, "COOKIES"):
for key, value in request.COOKIES.iteritems():
request_info['COOKIES'][key] = format(value)
if hasattr(request, "META"):
for key, value in request.META.iteritems():
request_info['META'][key] = format(value)
settings_info = {}
for key, value in ctx['settings'].iteritems():
settings_info[key] = format(value)
ctx['errorid'] = errorid = uuid.uuid4().hex
full_info = dict(
__time=datetime.datetime.now().isoformat(),
__uuid=errorid,
settings=settings_info,
request=request_info,
traceback=exception_info,
stack=traceback.format_exc(exc_info[2]),
last_frame=last_frame,
template_loaders=loaders,
template_errors=template_errors,
unicode_hint=unicdoe_hint,
exception_type=exception_type,
exception_value=exception_value,
django_version=django_version,
python_version=python_version,
python_executable=python_executable,
python_path=python_path,
server_time=server_time
)
return (errorid, ctx, full_info)
0
Example 10
Project: ion Source File: email_handler.py
def emit(self, record):
try:
request = record.request
subject = '%s (%s IP: %s): %s' % (record.levelname, (request.user if request.user else 'No user'),
('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS else
'EXTERNAL'), record.getMessage())
except Exception:
subject = '%s: %s' % (record.levelname, record.getMessage())
request = None
subject = self.format_subject(subject)
# Since we add a nicely formatted traceback on our own, create a copy
# of the log record without the exception data.
no_exc_record = copy(record)
no_exc_record.exc_info = None
no_exc_record.exc_text = None
if record.exc_info:
exc_info = record.exc_info
else:
exc_info = (None, record.getMessage(), None)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
message = "%s\n\n%s" % (self.format(no_exc_record), reporter.get_traceback_text())
html_message = reporter.get_traceback_html() if self.include_html else None
self.send_mail(subject, message, fail_silently=True, html_message=html_message)
0
Example 11
Project: django-scribbler Source File: views.py
@require_POST
def preview_scribble(request, ct_pk):
"Render scribble content or return error information."
if not request.user.is_authenticated():
return HttpResponseForbidden()
content_type = get_object_or_404(ContentType, pk=ct_pk)
change_scribble = '{0}.change_{1}'.format(
content_type.app_label, content_type.model)
add_scribble = '{0}.add_{1}'.format(
content_type.app_label, content_type.model)
can_edit = request.user.has_perm(change_scribble)
can_create = request.user.has_perm(add_scribble)
if not (can_edit or can_create):
return HttpResponseForbidden()
results = {
'valid': False,
'html': '',
}
form = PreviewForm(request.POST)
if form.is_valid():
results['valid'] = True
if hasattr(template, 'engines'):
scribbler_template = template.engines['django'].from_string(form.cleaned_data.get('content', ''))
else:
scribbler_template = template.Template(form.cleaned_data.get('content', ''))
context = build_scribble_context(form.instance)
results['html'] = scribbler_template.render(context, request)
results['variables'] = get_variables(RequestContext(request, context))
else:
if hasattr(form, 'exc_info'):
# Pre Django 1.9
try:
exc_type, exc_value, tb = form.exc_info
reporter = ExceptionReporter(request, exc_type, exc_value, tb)
reporter.get_template_exception_info()
results['error'] = reporter.template_info
# Django >= 1.9: get_template_info() is moved from ExceptionReporter
# onto Template. We pass the data it returns from scribbler/forms.py
# to here.
except (ValueError, AttributeError):
# ValueError is raised when we pass in all 12 the arguments,
# in form.exc_info and AttributeError is raised when
# ExceptionReporter.get_template_exception_info() is called.
results['error'] = form.exc_info
else:
# Not sure what to do here
results['error'] = {
'message': 'Content is not valid',
'line': '',
}
content = json.dumps(results, cls=DjangoJSONEncoder, ensure_ascii=False)
return HttpResponse(content, content_type='application/json')
0
Example 12
Project: cgstudiomap Source File: log.py
def emit(self, record):
try:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
else 'EXTERNAL'),
record.getMessage()
)
except Exception:
subject = '%s: %s' % (
record.levelname,
record.getMessage()
)
request = None
subject = self.format_subject(subject)
# Since we add a nicely formatted traceback on our own, create a copy
# of the log record without the exception data.
no_exc_record = copy(record)
no_exc_record.exc_info = None
no_exc_record.exc_text = None
if record.exc_info:
exc_info = record.exc_info
else:
exc_info = (None, record.getMessage(), None)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
message = "%s\n\n%s" % (self.format(no_exc_record), reporter.get_traceback_text())
html_message = reporter.get_traceback_html() if self.include_html else None
self.send_mail(subject, message, fail_silently=True, html_message=html_message)
0
Example 13
Project: django-nonrel Source File: log.py
def emit(self, record):
import traceback
from django.conf import settings
from django.views.debug import ExceptionReporter
try:
if sys.version_info < (2,5):
# A nasty workaround required because Python 2.4's logging
# module doesn't support passing in extra context.
# For this handler, the only extra data we need is the
# request, and that's in the top stack frame.
request = record.exc_info[2].tb_frame.f_locals['request']
else:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
(request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'),
record.msg
)
request_repr = repr(request)
except:
subject = '%s: %s' % (
record.levelname,
record.msg
)
request = None
request_repr = "Request repr() unavailable"
if record.exc_info:
exc_info = record.exc_info
stack_trace = '\n'.join(traceback.format_exception(*record.exc_info))
else:
exc_info = (None, record.msg, None)
stack_trace = 'No stack trace available'
message = "%s\n\n%s" % (stack_trace, request_repr)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
html_message = self.include_html and reporter.get_traceback_html() or None
mail.mail_admins(subject, message, fail_silently=True,
html_message=html_message)
0
Example 14
Project: hue Source File: log.py
def emit(self, record):
try:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
else 'EXTERNAL'),
record.getMessage()
)
filter = get_exception_reporter_filter(request)
request_repr = filter.get_request_repr(request)
except Exception:
subject = '%s: %s' % (
record.levelname,
record.getMessage()
)
request = None
request_repr = "Request repr() unavailable."
subject = self.format_subject(subject)
if record.exc_info:
exc_info = record.exc_info
stack_trace = '\n'.join(traceback.format_exception(*record.exc_info))
else:
exc_info = (None, record.getMessage(), None)
stack_trace = 'No stack trace available'
message = "%s\n\n%s" % (stack_trace, request_repr)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
html_message = reporter.get_traceback_html() if self.include_html else None
mail.mail_admins(subject, message, fail_silently=True,
html_message=html_message,
connection=self.connection())
0
Example 15
Project: django-db-log Source File: manager.py
def create_from_exception(self, exception=None, traceback=None, **kwargs):
"""
Creates an error log from an exception.
"""
if not exception:
exc_type, exc_value, traceback = sys.exc_info()
elif not traceback:
warnings.warn('Using just the ``exception`` argument is deprecated, send ``traceback`` in addition.', DeprecationWarning)
exc_type, exc_value, traceback = sys.exc_info()
else:
exc_type = exception.__class__
exc_value = exception
def to_unicode(f):
if isinstance(f, dict):
nf = dict()
for k, v in f.iteritems():
nf[str(k)] = to_unicode(v)
f = nf
elif isinstance(f, (list, tuple)):
f = [to_unicode(f) for f in f]
else:
try:
f = smart_unicode(f)
except (UnicodeEncodeError, UnicodeDecodeError):
f = '(Error decoding value)'
return f
reporter = ExceptionReporter(None, exc_type, exc_value, traceback)
frames = reporter.get_traceback_frames()
data = kwargs.pop('data', {}) or {}
data['exc'] = base64.b64encode(pickle.dumps(map(to_unicode, [exc_type.__class__.__module__, exc_value.args, frames])).encode('zlib'))
tb_message = '\n'.join(traceback_mod.format_exception(exc_type, exc_value, traceback))
kwargs.setdefault('message', to_unicode(exc_value))
return self._create(
class_name=exc_type.__name__,
traceback=tb_message,
data=data,
**kwargs
)
0
Example 16
Project: django-dbbackup Source File: utils.py
def email_uncaught_exception(func):
"""
Function decorator for send email with uncaught exceptions to admins.
Email is sent to ``settings.DBBACKUP_FAILURE_RECIPIENTS``
(``settings.ADMINS`` if not defined). The message contains a traceback
of error.
"""
module = func.__module__
@wraps(func)
def wrapper(*args, **kwargs):
try:
func(*args, **kwargs)
except:
if settings.SEND_EMAIL:
excType, excValue, traceback = sys.exc_info()
reporter = ExceptionReporter(FAKE_HTTP_REQUEST, excType,
excValue, traceback.tb_next)
subject = 'Cron: Uncaught exception running %s' % module
body = reporter.get_traceback_html()
msgFrom = settings.SERVER_EMAIL
msgTo = [admin[1] for admin in settings.FAILURE_RECIPIENTS]
message = EmailMessage(subject, body, msgFrom, msgTo)
message.content_subtype = 'html'
message.send(fail_silently=False)
raise
finally:
connection.close()
return wrapper
0
Example 17
Project: feedsanitizer Source File: log.py
def emit(self, record):
import traceback
from django.conf import settings
from django.views.debug import ExceptionReporter
try:
if sys.version_info < (2,5):
# A nasty workaround required because Python 2.4's logging
# module doesn't support passing in extra context.
# For this handler, the only extra data we need is the
# request, and that's in the top stack frame.
request = record.exc_info[2].tb_frame.f_locals['request']
else:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
(request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'),
record.msg
)
request_repr = repr(request)
except:
subject = 'Error: Unknown URL'
request = None
request_repr = "Request repr() unavailable"
if record.exc_info:
exc_info = record.exc_info
stack_trace = '\n'.join(traceback.format_exception(*record.exc_info))
else:
exc_info = (None, record.msg, None)
stack_trace = 'No stack trace available'
message = "%s\n\n%s" % (stack_trace, request_repr)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
html_message = reporter.get_traceback_html()
mail.mail_admins(subject, message, fail_silently=True,
html_message=html_message)
0
Example 18
Project: django-slack Source File: log.py
def emit(self, record):
try:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
else 'EXTERNAL'),
record.getMessage(),
)
except Exception:
subject = '%s: %s' % (
record.levelname,
record.getMessage(),
)
request = None
subject = self.format_subject(subject)
# Since we add a nicely formatted traceback on our own, create a copy
# of the log record without the exception data.
no_exc_record = copy.copy(record)
no_exc_record.exc_info = None
no_exc_record.exc_text = None
if record.exc_info:
exc_info = record.exc_info
else:
exc_info = (None, record.getMessage(), None)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
try:
tb = reporter.get_traceback_text()
except:
tb = "(An exception occured when getting the traceback text)"
if reporter.exc_type:
tb = "%s (An exception occured when rendering the traceback)" \
% reporter.exc_type.__name__
message = "%s\n\n%s" % (self.format(no_exc_record), tb)
colors = {
'ERROR': 'danger',
'WARNING': 'warning',
'INFO': 'good',
}
attachments = {
'title': subject,
'text': message,
'color': colors.get(record.levelname, '#AAAAAA'),
}
attachments.update(self.kwargs)
self.send_message(
self.template,
{'text': subject},
self.generate_attachments(**attachments),
)