Skip to main content

API Lens Python SDK with OpenTelemetry-based ingest forwarding

Project description

API Lens Python SDK

Production-ready Python ingest client for API Lens with OpenTelemetry integration.

Framework support matrix

Framework Integration Module Integration Type Client Type
FastAPI apilens.fastapi ASGI Middleware AsyncIO
Starlette apilens.starlette ASGI Middleware AsyncIO
Django REST Framework apilens.django Django Middleware Threading
Django Ninja apilens.django Django Middleware Threading
Flask apilens.flask WSGI Wrapper Threading
Litestar apilens.litestar Plugin Protocol AsyncIO
BlackSheep apilens.blacksheep ASGI Middleware AsyncIO

What this SDK includes

  • batched + retrying ingest client (ApiLensClient)
  • OpenTelemetry span exporter (apilens.otel) for teams already on OTel
  • first-class framework integrations listed above
  • automatic request/response payload sampling (size-limited)

Install

pip install apilenss

With framework support:

pip install 'apilenss[all]'
# or only one
pip install 'apilenss[fastapi]'
pip install 'apilenss[flask]'

Local development install (from repo):

pip install ./sdks/python
pip install './sdks/python[all]'

Quick start (manual capture)

from apilens import ApiLensClient, ApiLensConfig

client = ApiLensClient(
    ApiLensConfig(
        api_key="your_app_api_key",
        base_url="https://api.apilens.ai/api/v1",
        environment="production",
    )
)

client.capture(
    method="GET",
    path="/health",
    status_code=200,
    response_time_ms=12.4,
)

client.shutdown(flush=True)

FastAPI

No OpenTelemetry instrumentation is required for endpoint + payload monitoring.

from fastapi import FastAPI
from typing import Annotated
from fastapi import Depends, Request
from apilens.fastapi import ApiLensMiddleware, set_consumer

app = FastAPI()

app.add_middleware(
    ApiLensMiddleware,
    api_key="your_app_api_key",
    base_url="https://api.apilens.ai/api/v1",
    env="production",
    enable_request_logging=True,
    log_request_body=True,
    log_response_body=True,
)

def identify_consumer(request: Request, user_id: Annotated[str, Depends(lambda: "user_123")]):
    set_consumer(request, identifier=user_id, name="Demo User", group="starter")

app.router.dependencies.append(Depends(identify_consumer))

@app.get("/v1/orders")
def list_orders():
    return {"ok": True}

Starlette

from starlette.applications import Starlette
from apilens import ApiLensClient, ApiLensConfig
from apilens.starlette import instrument_app

app = Starlette()
client = ApiLensClient(ApiLensConfig(api_key="your_app_api_key"))
instrument_app(app, client)

Flask

from flask import Flask
from apilens import ApiLensClient, ApiLensConfig
from apilens.flask import instrument_app

app = Flask(__name__)

client = ApiLensClient(
    ApiLensConfig(
        api_key="your_app_api_key",
        base_url="https://api.apilens.ai/api/v1",
        environment="production",
    )
)

instrument_app(app, client)

@app.get("/v1/invoices")
def invoices():
    return {"ok": True}

Django (DRF + Django Ninja)

Add middleware in Django settings:

MIDDLEWARE = [
    # ...
    "apilens.django.ApiLensDjangoMiddleware",
]

APILENS_API_KEY = "your_app_api_key"
APILENS_BASE_URL = "https://api.apilens.ai/api/v1"
APILENS_ENVIRONMENT = "production"

Litestar

from litestar import Litestar
from apilens import ApiLensClient, ApiLensConfig
from apilens.litestar import ApiLensPlugin

client = ApiLensClient(ApiLensConfig(api_key="your_app_api_key"))
app = Litestar(route_handlers=[], plugins=[ApiLensPlugin(client=client)])

BlackSheep

from blacksheep import Application
from apilens import ApiLensClient, ApiLensConfig
from apilens.blacksheep import instrument_app

app = Application()
client = ApiLensClient(ApiLensConfig(api_key="your_app_api_key"))
instrument_app(app, client)

Notes

  • default flush interval: 3s
  • default batch size: 200
  • max ingest batch payload sent per request: follows backend limit (<= 1000)
  • call client.shutdown(flush=True) on graceful shutdown

Roadmap

Next adapters planned after FastAPI and Flask:

  • Django
  • Starlette
  • Aiohttp

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

apilenss-0.1.4.tar.gz (74.4 kB view details)

Uploaded Source

Built Distribution

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

apilenss-0.1.4-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file apilenss-0.1.4.tar.gz.

File metadata

  • Download URL: apilenss-0.1.4.tar.gz
  • Upload date:
  • Size: 74.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for apilenss-0.1.4.tar.gz
Algorithm Hash digest
SHA256 7b2e753dc04b5bcc1ef0e494b6fd5491839a522220b11a9903937c6db2f8a868
MD5 da8859b28616253082b836dc3dfe0abc
BLAKE2b-256 ea4dc7d024a08bc5f18ed0ef87a6d2b8e71cadbfc3ebcf253b16ff59f9e2f8be

See more details on using hashes here.

Provenance

The following attestation bundles were made for apilenss-0.1.4.tar.gz:

Publisher: workflow.yml on apilens/apilens

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file apilenss-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: apilenss-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 18.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for apilenss-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 6a85f4c0b344644a19a9afd13c91542deda44c6b50476421ea2c87a744cbb35b
MD5 e8db489f1641df493485b8fec6a38312
BLAKE2b-256 909895cd5cbd6a3831f18c8d897917f6646fb802b12e9b1e3f65b790a4590cd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for apilenss-0.1.4-py3-none-any.whl:

Publisher: workflow.yml on apilens/apilens

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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