Falcon error tracking SDK for Python
Project description
roselabs-falcon
Official Falcon error tracking SDK for Python.
Installation
pip install roselabs-falcon
Quick Start
from falcon_sdk import init, capture_exception
# Initialize Falcon - validates immediately, fails fast on bad config
init(
api_key="sk_your_api_key",
app_name="my-app",
environment="production",
)
# That's it! Now capture errors manually or install auto-capture.
Automatic Exception Capture
from falcon_sdk import Falcon, FalconConfig
falcon = Falcon(FalconConfig(
api_key="sk_your_api_key",
app_name="my-app",
environment="production",
))
# Install automatic exception handler
falcon.install()
# Now uncaught exceptions are automatically reported
Manual Error Capture
from falcon_sdk import capture_exception
try:
risky_operation()
except Exception as e:
capture_exception(e, context={"user_id": "123", "action": "checkout"})
Capture Messages
from falcon_sdk import capture_message
capture_message("User completed signup", level="info", context={"plan": "pro"})
User Context
from falcon_sdk import set_user
# Set user context for all future events
set_user(user_id="user-123", email="user@example.com", name="John Doe")
# Clear user on logout
set_user()
Async Support
from falcon_sdk import Falcon, FalconConfig
falcon = Falcon(FalconConfig(
api_key="sk_your_api_key",
app_name="my-app",
))
# Async capture
await falcon.capture_exception_async(error)
await falcon.capture_message_async("Hello", level="info")
Configuration Options
from falcon_sdk import Falcon, FalconConfig
falcon = Falcon(FalconConfig(
# Required
api_key="sk_your_api_key",
app_name="my-app",
# Optional
environment="production", # Default: None
release="1.0.0", # Default: None
api_url="https://api.falcon.roselabs.io", # Default
enabled=True, # Default: True
debug=False, # Default: False
# Rate limiting (prevents error storms)
max_events_per_minute=60, # Default: 60, 0=unlimited
max_events_per_second=10, # Default: 10, 0=unlimited
# Before send hook
before_send=lambda event: event, # Return None to drop
))
Pre-validation
The SDK validates configuration immediately on initialization. If your config is invalid, you'll get a FalconConfigError right away instead of silent failures later:
from falcon_sdk import init, FalconConfigError
try:
init(api_key="bad_key", app_name="my-app") # Missing sk_ prefix
except FalconConfigError as e:
print(f"Config error: {e}")
# Invalid Falcon configuration:
# - apiKey must start with 'sk_' (e.g., 'sk_your_key_here')
Rate Limiting
Built-in rate limiting prevents error storms from overwhelming your server:
init(
api_key="sk_xxx",
app_name="my-app",
max_events_per_second=10, # Burst limit
max_events_per_minute=60, # Sustained limit
)
When limits are exceeded, events are silently dropped (logged in debug mode).
Logging Integration
Automatically send Python logging errors to Falcon:
import logging
from falcon_sdk import Falcon, FalconConfig
falcon = Falcon(FalconConfig(api_key="sk_xxx", app_name="my-app"))
# Add Falcon handler to root logger
logging.getLogger().addHandler(falcon.get_logging_handler())
# Now logging.error() also reports to Falcon
logging.error("Something went wrong!")
Decorator
Automatically capture errors from functions:
from falcon_sdk import Falcon, FalconConfig
falcon = Falcon(FalconConfig(api_key="sk_xxx", app_name="my-app"))
@falcon.capture_errors
def risky_function():
raise ValueError("Something went wrong")
@falcon.capture_errors
async def risky_async_function():
raise ValueError("Async error")
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file roselabs_falcon-0.1.1.tar.gz.
File metadata
- Download URL: roselabs_falcon-0.1.1.tar.gz
- Upload date:
- Size: 18.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7db2c1b179c965adfe0c6f219def7a476e31f337a83c6bccb2b28dac4d144c14
|
|
| MD5 |
767b68d3d78b67da26a7f2be7135e810
|
|
| BLAKE2b-256 |
b8ea5a5f2803daa3a06635dee8210fecc32d778185deb59dc117c99a0143de98
|
File details
Details for the file roselabs_falcon-0.1.1-py3-none-any.whl.
File metadata
- Download URL: roselabs_falcon-0.1.1-py3-none-any.whl
- Upload date:
- Size: 23.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa3594188e82f5f69045779705b9b2748c45ae8f15a695c99c68a04038ab810b
|
|
| MD5 |
f7dd562ed154cb06f44193057cf83324
|
|
| BLAKE2b-256 |
f1c2b1187d1a903bb7639623d5cf70e3fe87cbcf9269501a42d1192b3ee066de
|