Skip to main content

About backlash

https://github.com/TurboGears/backlash/actions/workflows/run_tests.yml/badge.svg https://img.shields.io/pypi/v/backlash.svg

backlash is a swiss army knife for web applications debugging, which provides:

  • An Interactive In Browser Debugger for WSGI and ASGI applications, based on a Werkzeug Debugger fork

  • Crash reporting by email and on Sentry (WSGI)

  • Slow requests reporting by email and on Sentry (WSGI).

Backlash was born as a replacement for WebError in TurboGears2.3 versions.

Installing

backlash can be installed from pypi:

pip install backlash

should just work for most of the users. backlash has no runtime dependencies.

Debugging and Console

Backlash supports both debugging applications on crash and realtime console, both based on the Werkzeug Debugger.

The debugging function is provided by the WsgiDebuggedApplication middleware for WSGI applications and the AsgiDebuggedApplication middleware for ASGI applications (Starlette, FastAPI, bare ASGI apps). Wrapping your application with the middleware will intercept any exception and display the traceback and an interactive console in your browser.

An interactive console will also be always available at /__console__ path.

backlash.DebuggedApplication (importable also as backlash.debug.DebuggedApplication) is the same class as backlash.wsgi.WsgiDebuggedApplication, so existing WSGI setups keep working unchanged.

ASGI Applications

Bare ASGI applications are wrapped directly:

from backlash.asgi import AsgiDebuggedApplication

app = AsgiDebuggedApplication(app)

Starlette and FastAPI applications should install the debugger with add_middleware instead of wrapping the application object:

app.add_middleware(AsgiDebuggedApplication)

This places the debugger inside Starlette’s ServerErrorMiddleware, which otherwise sends its own 500 response before re-raising, leaving the debugger no chance to render its page.

Context Injectors

The debugger middlewares also make possible to provide one or more context injectors, those are simple python functions that will be called when an exception is raised to retrieve the context to store and make back available during debugging. Context injectors receive the WSGI environ or the ASGI scope of the failed request.

Context injectors have to return a dictionary which will be merged into the current request context, the request context itself will be made available inside the debugger as the ctx object.

This feature is used for example by TurboGears to provide back some of the objects which were available during execution like the current request.

Example

The DebuggedApplication middleware is used by TurboGears in the following way:

def _turbogears_backlash_context(environ):
    tgl = environ.get('tg.locals')
    return {'request':getattr(tgl, 'request', None)}

app = backlash.DebuggedApplication(app, context_injectors=[_turbogears_backlash_context])

Exception Tracing

The TraceErrorsMiddleware provides a WSGI middleware that intercepts any exception raised during execution, retrieves a traceback object and provides it to one or more reporters to log the error.

By default the EmailReporter and SentryReporter are provided to send error reports by email and on Sentry.

The EmailReporter supports most of the options WebError ErrorMiddleware to provide some kind of backward compatibility and make possible a quick transition.

While this function is easily replicable using the python logging SMTPHandler, the TraceErrorsMiddleware is explicitly meant for web applications crash reporting which has the benefit of being able to provide more complete information and keep a clear and separate process in managing errors.

Example

The TraceErrorsMiddleware is used by TurboGears in the following way:

from backlash.trace_errors import EmailReporter

def _turbogears_backlash_context(environ):
   tgl = environ.get('tg.locals')
   return {'request':getattr(tgl, 'request', None)}

app = backlash.TraceErrorsMiddleware(app, [EmailReporter(**errorware)],
                                     context_injectors=[_turbogears_backlash_context])

Slow Requests Tracing

The TraceSlowRequestsMiddleware provides a WSGI middleware that tracks requests execution time and reports requests that took more than a specified interval to complete (by default 25 seconds).

It is also possible to exclude a list of paths that start with a specified string to avoid reporting long polling connections or other kind of requests that are expected to have a long life spawn.

Example

The TraceSlowRequestsMiddleware is used by TurboGears in the following way:

from backlash.trace_errors import EmailReporter

def _turbogears_backlash_context(environ):
   tgl = environ.get('tg.locals')
   return {'request':getattr(tgl, 'request', None)}

app = backlash.TraceSlowRequestsMiddleware(app, [EmailReporter(**errorware)],
                                           interval=25, exclude_paths=None,
                                           context_injectors=[_turbogears_backlash_context])

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

backlash-0.5.0.tar.gz (190.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

backlash-0.5.0-py3-none-any.whl (184.3 kB view details)

Uploaded Python 3

File details

Details for the file backlash-0.5.0.tar.gz.

File metadata

  • Download URL: backlash-0.5.0.tar.gz
  • Upload date:
  • Size: 190.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for backlash-0.5.0.tar.gz
Algorithm Hash digest
SHA256 81fd4afb5abdde593465de069cabc51e13bc69ca1c902c6b6f63589cd5ad68ed
MD5 97dd33905521e6bc8c33686c3a2720bb
BLAKE2b-256 4c2496d4661661493d5627b25a3d50310c555769e0f8285ec80f2ddbffd5f572

See more details on using hashes here.

File details

Details for the file backlash-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: backlash-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 184.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for backlash-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8967514840f27ce7e5f77f8acd7848b2a27bc64a79c4f7df152221cb2058172e
MD5 5497ca9fc40f9235eeeb103f9a1b4c5e
BLAKE2b-256 2e1c6c152d59b44e97295f649fff2d8b0bd380b927ffb2a4ad1683c7a16715e5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page