PyPI Python versions License: MIT CI

AllStak SDK for Python, Django, Flask, FastAPI, and plain services. Captures exceptions, logs, inbound and outbound HTTP requests, spans, database telemetry, and cron heartbeats.

Install

pip install allstak

Framework extras are opt-in so the base install stays minimal:

pip install "allstak[fastapi]"     # FastAPI/Starlette helpers
pip install "allstak[flask]"       # Flask helpers
pip install "allstak[django]"      # Django middleware + integrations
pip install "allstak[sqlalchemy]"  # SQLAlchemy query telemetry
pip install "allstak[all]"         # everything above

Requires Python 3.9+. Wheels are universal (py3-none-any). Every release is built reproducibly under a pinned SOURCE_DATE_EPOCH, validated via twine check --strict, smoke-installed on Python 3.10/3.11/3.12, and uploaded via PyPI Trusted Publishers (OIDC) with PEP 740 Sigstore attestations.

Setup

import os
import allstak

allstak.init(
    api_key=os.getenv("ALLSTAK_API_KEY"),
    environment=os.getenv("APP_ENV", "production"),
    release=os.getenv("ALLSTAK_RELEASE"),
)

allstak.log.info("worker started")
allstak.capture_exception(RuntimeError("checkout failed"))

FastAPI

After allstak.init(...), FastAPI / Starlette apps are auto-instrumented — no extra line needed:

import allstak
from fastapi import FastAPI

allstak.init(api_key="ask_live_...")

app = FastAPI()  # inbound request telemetry + error capture are already wired

To attach explicitly (or to set a service name / disable the auto-attach via allstak.init(..., capture_fastapi=False)):

from fastapi import FastAPI
from allstak.integrations.fastapi import AllStakFastAPI

app = FastAPI()
AllStakFastAPI(app, service="checkout-api")

Logs

allstak.init(...) auto-attaches the logging bridge (disable with capture_logs=False), so standard-library logs flow to AllStak with no extra code. ERROR/CRITICAL records become error events (with the exception + stack for logger.exception(...)), and lower levels become breadcrumbs:

import logging

logging.getLogger("checkout").error("payment declined")
try:
    charge()
except Exception:
    logging.getLogger("checkout").exception("charge crashed")  # captured with stack

Flask

from flask import Flask
from allstak.integrations.flask import AllStakFlask

app = Flask(__name__)
AllStakFlask(app)

Django

Add "allstak" to INSTALLED_APPS and the SDK auto-inserts its request middleware for you — no manual MIDDLEWARE edit needed:

INSTALLED_APPS = [
    # ...
    "allstak",
]

ALLSTAK = {
    "api_key": "ask_live_...",
    "environment": "production",
    # "auto_middleware": False,  # opt out of auto-insertion
}

Prefer to wire it by hand? Add the middleware at the front of the stack (AllStakDjangoMiddleware is an alias of the same class):

MIDDLEWARE = [
    "allstak.integrations.django.AllStakMiddleware",
    *MIDDLEWARE,
]

Spans

with allstak.start_span("checkout.authorize", tags={"provider": "payments"}):
    authorize_payment()

Configuration

OptionDescription
api_keyProject API key.
environmentDeployment environment.
releaseApp version or commit SHA.
flush_interval_msBackground flush interval.
buffer_sizeMax buffered events.

Privacy

The SDK redacts common sensitive headers and fields. Avoid putting secrets in custom metadata.

Troubleshooting

  • No events: confirm ALLSTAK_API_KEY is set before allstak.init(...).
  • Missing request telemetry: register the framework integration during app startup.
  • Short-lived script: call allstak.get_client().flush() before exit when a client is initialized.

Contributing and Support

License

MIT