Source code for problemdetails.errors
from tornado import httputil, web
[docs]class Problem(web.HTTPError):
"""An exception that will be translated into a json document.
:param int status_code: HTTP status code to return
:param str log_message: optional log message that is passed
to the :class:`tornado.web.HTTPError` initializer
:param args: parameters that are passed to `log_message` in
the :class:`~tornado.web.HTTPError` initializer.
:keyword str reason: optional reason phrase to use in the
HTTP response line. *This value is NOT included in the
response document*.
:param kwargs: additional keyword parameters are included in
the response document
:meth:`problemdetails.ErrorWriter.write_error` recognizes this
exception type and renders :attr:`.document` as the *problem+json*
result. The *status* property is set to `status_code` and the
*type* property will be set by ``write_error`` unless it is
explicitly set.
.. attribute:: document
The keyword parameters are collected into this :class:`dict`
and rendered as the response document
"""
def __init__(self, status_code, log_message=None, *args, **kwargs):
if status_code not in httputil.responses:
kwargs.setdefault('reason', 'Abnormal Status')
super(Problem, self).__init__(status_code, log_message, *args,
**kwargs)
self.document = kwargs
self.document['status'] = status_code
self.document.pop('reason', None)
self.document.pop('log_message', None)