Skip to main content

watchdock-errors

Python SDK for application-level error tracking on the Watchdock platform.

Installation

pip install watchdock-errors

With framework extras:

pip install "watchdock-errors[django]"
pip install "watchdock-errors[fastapi]"
pip install "watchdock-errors[celery]"

Quickstart

import watchdock_errors

watchdock_errors.init(
    api_key="wdk_xxx",
    environment="production",
    release="1.0.0",
)

Django

# settings.py
MIDDLEWARE = [
    ...
    "watchdock_errors.integrations.django.DjangoErrorMiddleware",
]

Or via INSTALLED_APPS for automatic registration:

INSTALLED_APPS = [
    ...
    "watchdock_errors.integrations.django",
]

FastAPI

from watchdock_errors.integrations.fastapi import setup_watchdock

setup_watchdock(app)

Celery

from celery import Celery
from watchdock_errors.integrations.celery import register

app = Celery("myproject")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()

register(app)

Call register(app) once, after autodiscover_tasks(). It reports, automatically:

  • Task registry — every registered task (and, for periodic tasks, their beat schedule), once per worker on startup.
  • Failures, retries, and revocations — via task_failure, task_retry, and task_revoked. Successful runs are not reported.
  • Heartbeats for periodic tasks — a lightweight ping on every run of a beat-scheduled task, so Watchdock can flag one that's gone silent. Non-periodic tasks are never pinged.

watchdock_errors.init() must be called before these signals fire — if you're on Django, a worker_process_init handler that calls init() covers every forked worker process.

Manual capture

# Capture the current exception
try:
    process_payment()
except Exception:
    watchdock_errors.capture_exception()

# Capture a specific exception
watchdock_errors.capture_exception(exc)

# Capture a message
watchdock_errors.capture_message("Stripe webhook signature invalid")

# Capture a message with a custom level
watchdock_errors.capture_message("Queue depth high", level="warning")

Event levels

Every event carries a level. Exceptions default to "error"; messages default to "info" unless you pass level explicitly to capture_message.

Correlating with nginx requests

If your app is behind nginx and you've added $request_id to your access log format (see the nginx log collection docs) and forwarded it to your app via proxy_set_header X-Request-Id $request_id;, this SDK automatically reads that header off every captured request and attaches it as trace_id — no code changes needed. This lets WatchDock link a failed request in your nginx access logs directly to the exception it produced.

You can also pass trace_id explicitly, which takes priority over the auto-extracted value:

watchdock_errors.capture_exception(exc, trace_id=my_trace_id)
watchdock_errors.capture_message("Queue depth high", level="warning", trace_id=my_trace_id)

SDK initialization

When init() is called, the SDK sends a one-time, fire-and-forget ping to the platform (with the SDK version and environment) to register that it started up. This never blocks application startup and any failure is silently ignored.

PII scrubbing

By default, Authorization, Cookie, Set-Cookie, and X-Api-Key headers are stripped, the request body is not sent, and sensitive-looking query-param values (names containing token, secret, password, auth, key, session, credential, otp, pin, ssn, etc.) are redacted in both query_params and the captured url itself. Set send_pii=True to disable scrubbing.

Use the before_send hook for custom scrubbing:

def scrub(event):
    event["request"]["headers"].pop("X-Internal-Token", None)
    return event  # return None to drop the event entirely

watchdock_errors.init(api_key="wdk_xxx", before_send=scrub)

Release files for watchdock-errors 0.5.0

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

Source distribution (sdist)

Source distribution for watchdock-errors 0.5.0
File Size Uploaded
watchdock_errors-0.5.0.tar.gz 17.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for watchdock-errors 0.5.0
File Interpreter ABI Platform
watchdock_errors-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 34.5 kB

Release files / watchdock_errors-0.5.0.tar.gz

Download URL watchdock_errors-0.5.0.tar.gz
Size 17.8 kB
Tags Source
SHA-256 checksum
How to use checksums
1fc1d43659796a1c0e8866223168b531cdcb30391edf55c08327ab22824d2089
BLAKE2b-256 checksum
How to use checksums
cfcd785d7f59a886c7828395d8f12f24df3678204570902f248784f09edd3f29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / watchdock_errors-0.5.0-py3-none-any.whl

Download URL watchdock_errors-0.5.0-py3-none-any.whl
Size 16.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a7472b854f4e02da03012437b569c2bdcece7aa177a34216482379328c0b66ee
BLAKE2b-256 checksum
How to use checksums
3ba7ef5d366136932c42fd6f831a5dbe50d9d78351bcb21577118e210f305838
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

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