Beispiel #1
0
def error_handler(request, exc):
    '''Default renderer for errors.'''
    app = request.app
    response = request.response
    if not response.content_type:
        content_type = request.get('default.content_type')
        if content_type:
            response.content_type = request.content_types.best_match(
                content_type)
    content_type = None
    if response.content_type:
        content_type = response.content_type.split(';')[0]
    is_html = content_type == 'text/html'

    if app.debug:
        msg = render_error_debug(request, exc, is_html)
    else:
        msg = error_messages.get(response.status_code) or str(exc)
        if is_html:
            msg = app.render_template(['%s.html' % response.status_code,
                                       'error.html'],
                                      {'status_code': response.status_code,
                                       'status_message': msg})
    #
    if is_html:
        doc = request.html_document
        doc.head.title = response.status
        doc.body.append(msg)
        return doc.render(request)
    elif content_type in JSON_CONTENT_TYPES:
        return json.dumps({'status': response.status_code,
                           'message': msg})
    else:
        return '\n'.join(msg) if isinstance(msg, (list, tuple)) else msg
Beispiel #2
0
def error_handler(request, exc):
    '''Default renderer for errors.'''
    app = request.app
    response = request.response
    if not response.content_type:
        content_type = request.get('default.content_type')
        if content_type:
            response.content_type = request.content_types.best_match(
                content_type)
    content_type = None
    if response.content_type:
        content_type = response.content_type.split(';')[0]
    is_html = content_type == 'text/html'

    if app.debug:
        msg = render_error_debug(request, exc, is_html)
    else:
        msg = error_messages.get(response.status_code) or str(exc)
        if is_html:
            msg = app.render_template(['%s.html' % response.status_code,
                                       'error.html'],
                                      {'status_code': response.status_code,
                                       'status_message': msg},
                                      request=request)
    #
    if is_html:
        doc = request.html_document
        doc.head.title = response.status
        doc.body.append(msg)
        return doc.render(request)
    elif content_type in JSON_CONTENT_TYPES:
        return json.dumps({'status': response.status_code,
                           'message': msg})
    else:
        return '\n'.join(msg) if isinstance(msg, (list, tuple)) else msg
Beispiel #3
0
def error_handler(request, exc):
    """Default renderer for errors."""
    app = request.app
    response = request.response
    if not response.content_type:
        content_type = request.get('default.content_type')
        if content_type:
            if isinstance(content_type, str):
                content_type = (content_type,)
            response.content_type = request.content_types.best_match(
                content_type)
    content_type = ''

    if response.content_type:
        content_type = response.content_type.split(';')[0]

    errors = None
    message = None
    if hasattr(exc, 'args') and exc.args:
        errors = exc.args[0]
        if isinstance(errors, str):
            errors = None
            message = errors

    if not message:
        message = (
            app.config['ERROR_MESSAGES'].get(response.status_code) or
            response.status
        )

    is_html = (content_type == 'text/html')
    trace = None
    if response.status_code == 500 and app.debug:
        trace = render_error_debug(request, exc, is_html)

    if content_type in JSON_CONTENT_TYPES:
        return json.dumps(json_message(request, message,
                                       errors=errors, trace=trace))
    elif is_html:
        context = {'status_code': response.status_code,
                   'status_message': trace or message}
        page = Page(body_template=(
            '%s.html' % response.status_code, 'error.html')
        )
        return app.cms.page_response(
            request, page, context, title=response.status
        )
    elif content_type[-4:] == '/xml':
        return XML_ERROR % (response.status_code, message)
    elif trace:
        return '\n'.join(trace)
    else:
        return message
Beispiel #4
0
def error_handler(request, exc):
    """Default renderer for errors."""
    app = request.app
    response = request.response
    if not response.content_type:
        content_type = request.get('default.content_type')
        if content_type:
            if isinstance(content_type, str):
                content_type = (content_type, )
            response.content_type = request.content_types.best_match(
                content_type)
    content_type = None
    if response.content_type:
        content_type = response.content_type.split(';')[0]
    is_html = content_type == 'text/html'

    msg = (str(exc) or error_messages.get(response.status_code)
           or response.response)
    trace = None
    if response.status_code >= 500:
        if app.debug:
            trace = render_error_debug(request, exc, is_html)
        else:
            msg = error_messages.get(response.status_code, 'Internal error')

    if is_html:
        context = {
            'status_code': response.status_code,
            'status_message': trace or msg
        }
        return app.html_response(
            request, ['%s.html' % response.status_code, 'error.html'],
            context,
            title=response.status)
    #
    if content_type in JSON_CONTENT_TYPES:
        return json.dumps(
            json_message(request, msg, error=response.status_code,
                         trace=trace))
    elif trace:
        return '\n'.join(trace)
    else:
        return msg
Beispiel #5
0
def error_handler(request, exc):
    """Default renderer for errors."""
    app = request.app
    response = request.response
    if not response.content_type:
        content_type = request.get('default.content_type')
        if content_type:
            if isinstance(content_type, str):
                content_type = (content_type,)
            response.content_type = request.content_types.best_match(
                content_type)
    content_type = None
    if response.content_type:
        content_type = response.content_type.split(';')[0]
    is_html = content_type == 'text/html'

    msg = (str(exc) or error_messages.get(response.status_code) or
           response.response)
    trace = None
    if response.status_code >= 500:
        if app.debug:
            trace = render_error_debug(request, exc, is_html)
        else:
            msg = error_messages.get(response.status_code, 'Internal error')

    if is_html:
        context = {'status_code': response.status_code,
                   'status_message': trace or msg}
        return app.html_response(request,
                                 ['%s.html' % response.status_code,
                                  'error.html'],
                                 context,
                                 title=response.status)
    #
    if content_type in JSON_CONTENT_TYPES:
        return json.dumps(json_message(request, msg,
                                       error=response.status_code,
                                       trace=trace))
    elif trace:
        return '\n'.join(trace)
    else:
        return msg