Skip to main content

Agora — async-first ETL framework for Python.

Project description

Agora ETL

Async-first ETL framework for Python.

License Python PyPI

agora-etl is the core Agora runtime: a builder-first ETL framework organized around a Source → Middleware chain → Sink(s) model.

The core package owns runtime semantics, public contracts, CLI diagnostics, checkpointing, DLQ behavior, scheduling primitives, health/metrics surfaces, and plugin discovery. Backend integrations such as Redis, Kafka, PostgreSQL, cron scheduling, distributed coordination, and Anthropic live in the official agora-etl-plugins package.

Install

pip install agora-etl

Optional core extras:

pip install "agora-etl[file]"       # pyarrow + faster JSONL/file paths
pip install "agora-etl[rs]"         # optional Rust acceleration boundary
pip install "agora-etl[benchmark]"  # local benchmarking helpers

Official integrations:

pip install "agora-etl-plugins[redis]"
pip install "agora-etl-plugins[kafka]"
pip install "agora-etl-plugins[postgres]"
pip install "agora-etl-plugins[all]"

agora-etl-plugins 0.4.x targets agora-etl>=0.4.1,<1.

Quickstart

import asyncio

from agora import DeliveryConfig, IterableSource, Pipeline
from agora.core.dlq import SQLiteDLQSink


records = [
    {"id": 1, "city": "Ho Chi Minh City", "confidence": 0.92},
    {"id": 2, "city": "Da Nang", "confidence": 0.41},
    {"id": 3, "city": "Hanoi", "confidence": 0.88},
]


async def main() -> None:
    summary = await (
        Pipeline(IterableSource(records))
        .filter(lambda row: row["confidence"] >= 0.5, name="confidence_gate")
        .build(
            config=DeliveryConfig(
                dlq=SQLiteDLQSink(".agora_dlq.db"),
                batch_size=100,
            ),
        )
        .run()
    )
    print(summary)


asyncio.run(main())

build() without an explicit sink uses the default stdout sink. The example:

  • emits in-memory records
  • filters low-confidence rows
  • writes accepted records to stdout
  • routes failed records to a local SQLite DLQ
  • returns a PipelineRunSummary with counts, timing, and runtime signals

Core capabilities

Area What core provides
Pipeline builder Immutable Pipeline, BoundPipeline, .pipe(), .build(), .fan_out(), .route(), and .explain().
Runtime lanes Linear, buffered, Python batch, and Arrow batch execution with one shared data-plane vocabulary.
Reliability Checkpoint stores, DLQ sinks, replay semantics, retry policies, sink failure policies, and conservative checkpoint advancement.
Workers Schedule, ScheduledPipeline, WorkerPool, graceful shutdown, health endpoints, and distributed-coordination hooks.
Observability Run summaries, runtime metrics, tracing, Prometheus rendering helpers, health snapshots, and doctor diagnostics.
Extensibility Public plugin entry-point groups, manifest compatibility diagnostics, registries, and stable core facades.
AI runtime support Provider contracts, AI middleware, cache contracts, budget/cost governance, and provider capability guards.

Runtime guarantees

Agora's public runtime contract is documented in Runtime Guarantees. The high-level model:

  • source order is preserved at the sink boundary
  • checkpoint advancement waits for handled outcomes
  • sink delivery is fail-closed by default
  • DLQ replay acknowledges only after durable replay success
  • batch, Arrow, and process-isolated paths keep the same correctness contract
  • at-least-once delivery is the model; exactly-once behavior requires external idempotency or transactional systems

Execution lanes and data planes

Agora selects the execution lane from explicit source, middleware, and sink contracts:

  • python_rows
  • python_batches
  • arrow_batches

Use .explain() before a run to inspect lane selection and sink downgrade decisions:

from agora import Pipeline
from agora.sinks.file.csv import CsvSink


bound = Pipeline(source).build(CsvSink(path="out.csv", row_mapper=lambda row: row))
plan = bound.explain(max_records=1_000)

print(plan)
print(plan.to_dict())

PipelineExplain includes the selected lane, source data plane, writer input plane, middleware compatibility, sink plane, and downgrade markers.

Core vs plugins

Keep the package boundary clear:

Package Owns
agora-etl Runtime semantics, public contracts, CLI, docs, health, metrics, checkpointing, DLQ behavior, and plugin discovery.
agora-etl-plugins Official Redis, Kafka, PostgreSQL, cron, distributed coordination, Anthropic, backend DLQ, and backend-specific observability surfaces.
agora-etl-rs Optional acceleration primitives selected through the core acceleration boundary.

If a capability depends on Redis, Kafka, PostgreSQL, cron parsing, distributed lease ownership, or a hosted AI provider, it belongs in a plugin package rather than core.

CLI

The package installs the agora command:

agora --help
agora doctor
agora plugins list
agora dlq replay --help

Use agora doctor and agora plugins list --json in release gates and operator diagnostics when installed package behavior matters.

Documentation map

Reference sections:

Development

python -m venv .venv
.venv/bin/pip install -e ".[file,dev,benchmark]"
make ci

Useful focused checks:

make docs-check
make test-core
make contracts
make preservation

The GitHub CI matrix runs on Python 3.11, 3.12, and 3.13.

Security

Security reporting instructions live in SECURITY.md. Do not include exploitable details, credentials, payloads, production hostnames, or private stack traces in public issues.

License

Apache 2.0 — see LICENSE.

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

agora_etl-0.4.3.tar.gz (556.3 kB view details)

Uploaded Source

Built Distribution

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

agora_etl-0.4.3-py3-none-any.whl (367.0 kB view details)

Uploaded Python 3

File details

Details for the file agora_etl-0.4.3.tar.gz.

File metadata

  • Download URL: agora_etl-0.4.3.tar.gz
  • Upload date:
  • Size: 556.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agora_etl-0.4.3.tar.gz
Algorithm Hash digest
SHA256 d946c36d89eed3ad2bf90d0882637194e4f5fd85daad206c66f88cfa74712e21
MD5 72cf05b9d2ad2962092cd7465f26ee9e
BLAKE2b-256 658e0a0e458dd0c5f5c05331bf311ec5f3ec4afd9f1a9ab3c0c977e22801d2e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for agora_etl-0.4.3.tar.gz:

Publisher: release.yml on thanhtham010891/agora-etl

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

File details

Details for the file agora_etl-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: agora_etl-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 367.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agora_etl-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2888d1d204ff467245174badaf189f9a9692684f9fea2c73cdcc91350b6ae009
MD5 0280f7c263fed1398e9f6c2e5057e510
BLAKE2b-256 d386d00da6531339f97e1f79db3f2a5a4dac45bddca4130e74d8091f7e084e44

See more details on using hashes here.

Provenance

The following attestation bundles were made for agora_etl-0.4.3-py3-none-any.whl:

Publisher: release.yml on thanhtham010891/agora-etl

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