MCPcopy
hub / github.com/cherrypy/cherrypy / get_error_page

Function get_error_page

cherrypy/_cperror.py:475–546  ·  view source on GitHub ↗

Return an HTML page, containing a pretty error response. status should be an int or a str. kwargs will be interpolated into the page template.

(status, **kwargs)

Source from the content-addressed store, hash-verified

473
474
475def get_error_page(status, **kwargs):
476 """Return an HTML page, containing a pretty error response.
477
478 status should be an int or a str. kwargs will be interpolated into
479 the page template.
480 """
481 try:
482 code, reason, message = _httputil.valid_status(status)
483 except ValueError:
484 raise cherrypy.HTTPError(500, _exc_info()[1].args[0])
485
486 # We can't use setdefault here, because some
487 # callers send None for kwarg values.
488 if kwargs.get('status') is None:
489 kwargs['status'] = '%s %s' % (code, reason)
490 if kwargs.get('message') is None:
491 kwargs['message'] = message
492 if kwargs.get('traceback') is None:
493 kwargs['traceback'] = ''
494 if kwargs.get('version') is None:
495 kwargs['version'] = cherrypy.__version__
496
497 for k, v in kwargs.items():
498 if v is None:
499 kwargs[k] = ''
500 else:
501 kwargs[k] = html.escape(kwargs[k], quote=False)
502
503 # Use a custom template or callable for the error page?
504 pages = cherrypy.serving.request.error_page
505 error_page = pages.get(code) or pages.get('default')
506
507 # Default template, can be overridden below.
508 template = _HTTPErrorTemplate
509 if error_page:
510 try:
511 if hasattr(error_page, '__call__'):
512 # The caller function may be setting headers manually,
513 # so we delegate to it completely. We may be returning
514 # an iterator as well as a string here.
515 #
516 # We *must* make sure any content is not unicode.
517 result = error_page(**kwargs)
518 if cherrypy.lib.is_iterator(result):
519 from cherrypy.lib.encoding import UTF8StreamEncoder
520 return UTF8StreamEncoder(result)
521 elif isinstance(result, str):
522 return result.encode('utf-8')
523 else:
524 if not isinstance(result, bytes):
525 raise ValueError(
526 'error page function did not '
527 'return a bytestring, str or an '
528 'iterator - returned object of type %s.'
529 % (type(result).__name__))
530 return result
531 else:
532 # Load the template from this path.

Callers 1

get_error_pageMethod · 0.85

Calls 5

UTF8StreamEncoderClass · 0.90
itemsMethod · 0.80
encodeMethod · 0.80
getMethod · 0.45
readMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…