Skip to main content

Flask Exception Handlers

Defines an extension for standardising exception handling in HMLR's Flask applications.

Basic Usage

Initialise as any Flask extension:

exception_handlers = ExceptionHandlers()

def register_extensions(app):
    exception_handlers.init_app(app)

Custom Renderers

If you need to change how the errors are returned to the client, use the on_http_error_render, on_application_error_render and on_unhandled_error_render event handlers:

def http_error_renderer(description, code, http_code, e=None):
    return render_template('app/errors/unhandled.html', http_code=http_code), http_code


def unhandled_error_renderer(description, code, http_code, e=None):
    return render_template('app/errors/unhandled.html', http_code=http_code), http_code


def application_error_renderer(description, code, http_code, e=None):
    try:
        return render_template('app/errors/application/{}.html'.format(e.code), description=e.message, code=e.code,
                               http_code=http_code, e=e), http_code
    except TemplateNotFound:
        return render_template('app/errors/application.html', description=e.message, code=e.code, http_code=http_code),
                               http_code


def register_exception_handlers(app):
    handlers = ExceptionHandlers()
    handlers.init_app(app)
    handlers.on_http_error_render = http_error_renderer
    handlers.on_application_error_render = application_error_renderer
    handlers.on_unhandled_error_render = unhandled_error_renderer

Suppressing HTTP Response Codes

Want your app to only send certain HTTP response codes? Supply the list of allowed codes to init_app:

handlers = ExceptionHandlers()
handlers.init_app(app, [403, 404])
# Or...
handlers = ExceptionHandlers(app=app, allow_codes=[418])

(Anything not in the list gets replaced with a 500).

The helper list ALLOWED_UI_RESPONSES (403, 404, 429 and 500) is available:

from landregistry.exceptions import ExceptionHandlers, ALLOWED_UI_RESPONSES

handlers = ExceptionHandlers()
handlers.init_app(app, ALLOWED_UI_RESPONSES)

ApplicationError

Use this class when the application identifies there's been a problem and the client should be informed.

exception ApplicationError(message: str, error_code: str, http_code: int, force_logging: bool)

message The text of the exception message.

error_code Unique identifier for the error. Can be anything, but useful to reference in support documentation or knowledge items.

http_code Defaults to 500. Specifies the HTTP response code to send.

force_logging Defaults to False. Forces logging to Info if True (Debug otherwise). If the http code is 500, this parameter is ignored (and logging is to Error).

Examples:

from landregistry.exceptions import ApplicationError

raise ApplicationError("Critical error", "DB")
# or
raise ApplicationError("Title number invalid", "E102", http_code=400)
# or
raise ApplicationError("Title number invalid", "E102", http_code=400, force_logging=True)

Metadata

Release files for landregistry-exception-handlers 0.9.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for landregistry-exception-handlers 0.9.9
File Size Uploaded
landregistry_exception_handlers-0.9.9.tar.gz 4.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for landregistry-exception-handlers 0.9.9
File Interpreter ABI Platform
landregistry_exception_handlers-0.9.9-py3-none-any.whl Python 3 none any Details

Total release size: 9.7 kB

Release files / landregistry_exception_handlers-0.9.9.tar.gz

Download URL landregistry_exception_handlers-0.9.9.tar.gz
Size 4.3 kB
Tags Source
SHA-256 checksum
How to use checksums
fc2b47b254cab421af14d5972da0b9cf8073748afd0650af3909af646c8f1508
BLAKE2b-256 checksum
How to use checksums
3bbccea47c53d84bcae768937521f4e4132b41f48f2e7545c9c01a6658ef474b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.10.12

Release files / landregistry_exception_handlers-0.9.9-py3-none-any.whl

Download URL landregistry_exception_handlers-0.9.9-py3-none-any.whl
Size 5.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ae15d9c0612c7f44813d429f3b126776bd637a87b188a4683ae3588b2f7ca71e
BLAKE2b-256 checksum
How to use checksums
f13230e54685dde1b2ce64495c1ad705af3c32f4aed989ff1881902fecb9c7c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.9.9 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page