Skip to main content

Official Python SDK for Bugwatch - AI-Powered Error Tracking

Project description

Bugwatch Python SDK

Official Python SDK for Bugwatch - AI-Powered Error Tracking.

Installation

pip install bugwatch-sdk

With framework integrations:

# Django
pip install bugwatch-sdk[django]

# Flask
pip install bugwatch-sdk[flask]

# FastAPI
pip install bugwatch-sdk[fastapi]

# All integrations
pip install bugwatch-sdk[all]

Quick Start (Plug and Play)

import bugwatch

# Option 1: Use environment variable
# Set BUGWATCH_API_KEY=your-api-key in your environment
bugwatch.init()

# Option 2: Pass API key explicitly
bugwatch.init(api_key="your-api-key")

# That's it! All uncaught exceptions are now captured automatically.

The SDK automatically captures:

  • Uncaught exceptions in the main thread (sys.excepthook)
  • Thread exceptions in spawned threads (threading.excepthook)
  • Async task exceptions in asyncio tasks

Environment Variables

Variable Description
BUGWATCH_API_KEY Your API key (required if not passed to init())
BUGWATCH_ENVIRONMENT Environment name (e.g., "production")
BUGWATCH_RELEASE Release/version identifier

Manual Capture (Optional)

You can also capture exceptions manually:

import bugwatch

bugwatch.init(api_key="your-api-key")

try:
    do_something_risky()
except Exception:
    bugwatch.capture_exception()

# Capture messages
bugwatch.capture_message("Something happened", level=bugwatch.Level.WARNING)

Django Integration

Add the middleware to your settings:

# settings.py

MIDDLEWARE = [
    'bugwatch.integrations.django.BugwatchMiddleware',
    # ... other middleware
]

BUGWATCH = {
    'api_key': 'your-api-key',  # Or use BUGWATCH_API_KEY env var
    'environment': 'production',
    'release': '1.0.0',
}

Flask Integration

from flask import Flask
from bugwatch.integrations.flask import BugwatchFlask

app = Flask(__name__)
BugwatchFlask(app, api_key='your-api-key')

FastAPI Integration

from fastapi import FastAPI
from bugwatch.integrations.fastapi import BugwatchFastAPI

app = FastAPI()
BugwatchFastAPI(app, api_key='your-api-key')

Logging Integration

Capture logged errors automatically:

import logging
from bugwatch.integrations.logging import BugwatchHandler, setup_logging

# Quick setup - captures ERROR and above
setup_logging()

# Or manual setup with options
handler = BugwatchHandler(
    level=logging.ERROR,
    capture_breadcrumbs=True,  # Add logs as breadcrumbs
    breadcrumb_level=logging.INFO,
)
logging.getLogger().addHandler(handler)

# Now logged errors are captured
logging.error("This will be sent to Bugwatch")

Features

  • Plug and play - Just call init() and all exceptions are captured
  • Automatic exception hooks - Captures uncaught exceptions globally
  • Thread safety - Captures exceptions in spawned threads
  • Async support - Captures exceptions in asyncio tasks
  • Logging integration - Capture logged errors
  • Breadcrumbs - Track user actions leading up to an error
  • User context - Associate errors with users
  • Tags and extra data - Add custom metadata to errors
  • Fingerprinting - Automatic grouping of similar errors
  • Framework integrations - Django, Flask, FastAPI support
  • Atexit handling - Flushes pending events on shutdown

API Reference

bugwatch.init(api_key=None, **options)

Initialize the SDK. If api_key is not provided, reads from BUGWATCH_API_KEY environment variable.

Options:

  • api_key (str): Your Bugwatch API key
  • endpoint (str): API endpoint (default: https://api.bugwatch.io)
  • environment (str): Environment name
  • release (str): Release/version identifier
  • debug (bool): Enable debug logging
  • sample_rate (float): Sample rate for events (0.0-1.0)
  • max_breadcrumbs (int): Maximum breadcrumbs to keep
  • install_excepthook (bool): Install sys.excepthook (default: True)
  • install_threading_hook (bool): Install threading.excepthook (default: True)
  • install_asyncio_hook (bool): Install asyncio exception handler (default: True)

bugwatch.capture_exception(error=None, level=Level.ERROR, tags=None, extra=None)

Capture an exception. If error is None, captures the current exception from sys.exc_info().

bugwatch.capture_message(message, level=Level.INFO, tags=None, extra=None)

Capture a message.

bugwatch.add_breadcrumb(category, message, level=Level.INFO, data=None)

Add a breadcrumb.

bugwatch.set_user(user)

Set the current user context.

bugwatch.set_tag(key, value)

Set a tag for all future events.

bugwatch.set_extra(key, value)

Set extra context for all future events.

bugwatch.flush()

Flush any pending events to Bugwatch.

bugwatch.close()

Close the client and restore original exception hooks.

Disabling Automatic Capture

If you want manual control only:

bugwatch.init(
    api_key="your-api-key",
    install_excepthook=False,
    install_threading_hook=False,
    install_asyncio_hook=False,
)

License

MIT

Project details


Download files

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

Source Distribution

bugwatch_sdk-0.2.0.tar.gz (25.3 kB view details)

Uploaded Source

Built Distribution

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

bugwatch_sdk-0.2.0-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

File details

Details for the file bugwatch_sdk-0.2.0.tar.gz.

File metadata

  • Download URL: bugwatch_sdk-0.2.0.tar.gz
  • Upload date:
  • Size: 25.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for bugwatch_sdk-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e469f39c90ab91d71da2fa0f36f0b9fa23fe3f8f82bc59baa63d9252e2489a8f
MD5 0d620725439c75c4f2a2902d44144fb3
BLAKE2b-256 efc3debf5a75d5ef58ec349e33f9c98a4de1460652da2cc54f4437b312fe58c7

See more details on using hashes here.

File details

Details for the file bugwatch_sdk-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: bugwatch_sdk-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 27.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for bugwatch_sdk-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 56fc3abda041c9f88a8bca50d99629d0ed84ca445944e023f8e34924ea8f4588
MD5 32b7b5c813d65f8d501508a5f79b7397
BLAKE2b-256 379ca85b26b21628e25414a88ad9634f8b96f4b3876694fbd18a66b64b3d4495

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