Python SDK for Insider — ship Beacons to your Insider server.
Project description
insider-python
The Python SDK for Insider.
Beam Beacons from your Python service to your Insider server with a one-line setup. No runtime overhead on your request path. Never raises into your code, no matter what.
Install
pip install insider-python
For the Django integration:
pip install "insider-python[django]"
Quick start
Plain Python
import insider
insider.init(
dsn="https://<beacon_token>@insider.example.com/<project_uuid>",
environment="production",
release="1.2.3",
)
try:
risky()
except Exception as exc:
insider.capture_exception(exc)
Out-of-band events (background jobs, explicit calls) use standalone beacons:
capture_exception, capture_log, capture_perf.
Django
Initialize in wsgi.py or asgi.py before get_wsgi_application() /
get_asgi_application():
WSGI (Gunicorn)
import os
import insider
from insider.integrations.django import DjangoIntegration
from insider.integrations.logging import LoggingIntegration
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
insider.init(
dsn=os.environ.get("INSIDER_DSN"),
environment="production",
release="1.2.3",
enable_logs=True,
integrations=[DjangoIntegration(), LoggingIntegration()],
)
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
ASGI (Daphne / Uvicorn — plain Django)
import os
import insider
from insider.integrations.django import DjangoIntegration
from insider.integrations.logging import LoggingIntegration
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
insider.init(
dsn=os.environ.get("INSIDER_DSN"),
environment="production",
release="1.2.3",
enable_logs=True,
integrations=[DjangoIntegration(), LoggingIntegration()],
)
from django.core.asgi import get_asgi_application
application = get_asgi_application()
ASGI + Channels (ProtocolTypeRouter)
Wrap only the HTTP branch; disable handler auto-perf to avoid double capture:
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
import django
django.setup()
import insider
from insider.integrations.django import DjangoIntegration
from insider.integrations.django.asgi import wrap_asgi_application
from insider.integrations.logging import LoggingIntegration
insider.init(
dsn=os.environ.get("INSIDER_DSN"),
environment="production",
enable_logs=True,
integrations=[DjangoIntegration(auto_perf=False), LoggingIntegration()],
)
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
application = ProtocolTypeRouter({
"http": wrap_asgi_application(get_asgi_application()),
"websocket": URLRouter(websocket_urlpatterns),
})
Set INSIDER_DEBUG=true to print which hooks installed at startup.
That's the whole setup. Every HTTP request emits one kind=request
beacon containing:
- timing (duration, method, path, status)
- request context (headers, path, query string)
- stdlib logs during that request (when
enable_logs=True) - unhandled exception + stack trace (when the request fails)
No middleware, no INSTALLED_APPS, and no EXCEPTION_HANDLER wiring.
Disable auto capture on high-traffic apps until sampling lands:
integrations=[DjangoIntegration(auto_perf=False)]
Logging
During an HTTP request, stdlib logging lines are buffered into the
request envelope — not beamed as separate rows:
import logging
logger = logging.getLogger(__name__)
logger.info("checkout completed") # → payload.logs[] on the request beacon
Requires enable_logs=True, LoggingIntegration(), and a configured
logger level (see your app's LOGGING settings).
Outside an HTTP request, stdlib logs still beam as standalone kind=log
beacons. For explicit structured events, use capture_log():
insider.capture_log(
"User checkout completed",
level="info",
source="checkout.service",
tags={"feature": "checkout"},
)
Manual perf timings (Celery, custom spans):
insider.capture_perf(
op="celery.tasks.send_email",
duration_ms=842,
)
Footprint kinds
| Kind | When |
|---|---|
request |
One per HTTP request (DjangoIntegration) |
error |
Manual capture_exception() outside request cycle |
log |
Manual capture_log() or stdlib logs outside request cycle |
perf |
Manual capture_perf() for non-HTTP timings |
Configuration
If no DSN is found anywhere, the SDK enters disabled mode: every public call is a no-op.
| Option | Default | Notes |
|---|---|---|
dsn |
env INSIDER_DSN |
If absent, SDK is disabled |
environment |
"production" |
Top-level Footprint field |
release |
None |
Top-level Footprint field |
enable_logs |
False |
Buffer stdlib logs into request envelopes |
send_default_pii |
False |
Required to capture request bodies |
debug |
False |
Print SDK warnings to stderr |
Promise
The SDK never raises into your code.
License
MIT
Project details
Release history Release notifications | RSS feed
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 insider_python-0.1.6.tar.gz.
File metadata
- Download URL: insider_python-0.1.6.tar.gz
- Upload date:
- Size: 40.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f1c0c112a8f843d6fac4fb61f58d6571aeb453ae0dc52d7a07167f0b3b09ed9
|
|
| MD5 |
137cd0ba109d338ee5f4432f052e2ce5
|
|
| BLAKE2b-256 |
d21adcee565ac6cdff526d645433111a09b4f1d3404ab7b52c0687b9d09878c4
|
File details
Details for the file insider_python-0.1.6-py3-none-any.whl.
File metadata
- Download URL: insider_python-0.1.6-py3-none-any.whl
- Upload date:
- Size: 39.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efa2c7b5e9ecb924c19f40766880ed74bcd413adaf9f9f947ebd83e225b2b8ec
|
|
| MD5 |
7b623d04c70f86d231033f43b1f27031
|
|
| BLAKE2b-256 |
496a27594ae8616fac8286c4400e6466adeebfd6afcf1379bfc31c8b3f2cc0bf
|