Skip to main content

Python SDK for aepipe — multi-tenant log ingestion and query

Project description

aepipe-sdk-python

Python SDK for aepipe, a multi-tenant log ingestion and query service built on Cloudflare Workers Analytics Engine.

Zero external dependencies. Python 3.10+.

Installation

pip install aepipe-sdk

Quick Start

from aepipe import Aepipe

client = Aepipe(
    base_url="https://aepipe.yourdomain.com",
    token="your-admin-token",
)

API Reference

ingest(project, logstore, points) -> IngestResult

Write structured event points to Analytics Engine.

Parameter Type Description
project str Project name (^[a-zA-Z0-9_-]{1,64}$)
logstore str Logstore name (^[a-zA-Z0-9_-]{1,64}$)
points list[DataPoint] Event points (max 250 per call)
from aepipe import DataPoint

result = client.ingest("myapp", "backend", [
    DataPoint(event="user_login"),
    DataPoint(event="api_error", level="error", blobs=["GET /api"], doubles=[1.23]),
])
print(result.ok)       # True
print(result.written)  # 2

log(project, logstore, logs) -> LogResult

Write raw log entries via Workers Observability.

Parameter Type Description
project str Project name
logstore str Logstore name
logs list[LogEntry] Log entries (max 250 per call)
from aepipe import LogEntry

result = client.log("myapp", "backend", [
    LogEntry(message="server started"),
    LogEntry(message="connection timeout", level="error", extra={"ip": "1.2.3.4"}),
])
print(result.written)  # 2

query(project, logstore, sql) -> QueryResult

Run a SQL query against Analytics Engine. Tenant filters are injected automatically.

Parameter Type Description
project str Project name
logstore str Logstore name
sql str SQL query (Analytics Engine dialect)
result = client.query("myapp", "backend", "SELECT count() as cnt FROM aepipe")
print(result.data)

rawlog(project, logstore, *, limit=50, start=None, end=None) -> RawLogResult

Query raw Worker logs via Cloudflare Telemetry API.

Parameter Type Default Description
project str Project name
logstore str Logstore name
limit int 50 Max results (server caps at 200)
start str or None None Start timestamp (ISO 8601)
end str or None None End timestamp (ISO 8601)
result = client.rawlog("myapp", "backend", limit=100, start="2025-01-01T00:00:00Z")
for entry in result.logs:
    print(f"[{entry.level}] {entry.timestamp} {entry.data}")
print(f"total: {result.count}")

list_projects() -> ListResult

List all projects that have written data.

result = client.list_projects()
print(result.items)  # ["myapp", "analytics", ...]

list_logstores(project) -> ListResult

List all logstores within a project.

result = client.list_logstores("myapp")
print(result.items)  # ["backend", "frontend", ...]

Data Types

DataPoint

Field Type Default Description
event str required Event name (non-empty)
level str "info" Log level
blobs list[str] [] String metadata (max 16 extra)
doubles list[float] [] Numeric metrics (max 20)

LogEntry

Field Type Default Description
message str required Log message (non-empty)
level str "info" Log level
extra dict[str, Any] {} Additional fields

Result Types

Type Fields
IngestResult ok: bool, written: int
LogResult ok: bool, written: int
QueryResult data: Any
RawLogResult logs: list[RawLogEntry], count: int
RawLogEntry timestamp: str, level: str, data: Any
ListResult items: list[str]

Validation

All methods validate inputs before making network requests:

  • Name format: project and logstore names must match ^[a-zA-Z0-9_-]{1,64}$.
  • Batch size: ingest() and log() accept at most 250 items per call.

Invalid inputs raise ValidationError (subclass of ValueError).

Error Handling

from aepipe import AepipeError, ValidationError

try:
    client.ingest("myapp", "backend", points)
except ValidationError as e:
    # Client-side validation failed
    print(f"invalid input: {e}")
except AepipeError as e:
    # Server returned an error
    print(f"API error {e.status}: {e.message}")
Error Class Parent Fields When
AepipeError Exception status, message Server returns non-2xx
ValidationError ValueError message Invalid client input

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

aepipe_sdk-0.1.0.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

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

aepipe_sdk-0.1.0-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file aepipe_sdk-0.1.0.tar.gz.

File metadata

  • Download URL: aepipe_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for aepipe_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2c0bf01429fe5da362ac1edce0a78055b5e5bf34824c4704011598225b5bdf0d
MD5 c67dc04178ed7e22cdce46f3ccff4fb9
BLAKE2b-256 d7c6a10ba9e10c244520500b8d22d4f01fe3f404c2bd3c68b99b022a13f383af

See more details on using hashes here.

File details

Details for the file aepipe_sdk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: aepipe_sdk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 5.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for aepipe_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 474f3689b09c4561239c9e43ae7f5c6a165820fa4b7876d2ad70d34e60020f7a
MD5 8c743e478bb99f2c6c2008fd243e5050
BLAKE2b-256 5dd70f7a2646e25879e14310f1e3aec5898869aaaf8304f8c915a2e366e5fc40

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