Skip to main content

ShuETL

PyPI version PyPI - Python Version CI License

ShuETL (pronounced “shuttle”) is the opinionated FastAPI integration and deployment package for ETLantic.

ShuETL composes ETLantic into a durable, schedulable FastAPI service.

ShuETL does not reimplement ETLantic's pipeline or control-plane semantics. Instead, it assembles ETLantic's public packages, contracts, stores, and runtime roles into a coherent application-facing experience.

  • ETLantic owns canonical pipeline definitions and revisions, planning, execution semantics, durable submission, run and attempt state, scheduling, reports, events, artifacts, idempotency, recovery, and provider protocols.
  • etlantic-fastapi is ETLantic's low-level HTTP adapter and authoritative source of ETLantic request, response, route, SSE, and error semantics.
  • ShuETL owns opinionated composition: configuration, provider wiring, FastAPI mounting, lifecycle integration, deployment profiles, compatibility pins, optional ecosystem adapters, and operator-focused documentation.

If a required semantic capability is absent from ETLantic, the default response is to add it to ETLantic or one of its provider packages. ShuETL must not create a competing Pipeline, Run, Schedule, Artifact, or executor model.

Architecture principles

  • Integrate; do not reinterpret.
  • One ETLantic contract at every boundary.
  • Useful defaults, replaceable providers.
  • FastAPI-native composition and lifecycle.
  • Development convenience must not become a false production guarantee.
  • SQL-only infrastructure baseline where the selected ETLantic providers support it.

The reference ecosystem can compose in one FastAPI application:

FastAPI host
├── Hedron presentation (optional)
├── AuthMate identity adapter (optional)
└── ShuETL
    ├── etlantic-fastapi
    ├── ETLantic control-plane/runtime contracts
    └── ETLantic persistence and execution providers

Hedron and AuthMate remain optional peer packages. ShuETL integrates with them through public contracts and FastAPI dependencies.

Status

The upcoming ShuETL 0.2.0 release provides a typed FastAPI facade for local development and automated tests. It accepts a prebuilt etlantic_fastapi.ETLanticAPI; the host remains responsible for providers and their lifecycle. In-memory providers are process-local and are not a production durability claim.

The complete design pack is in docs/plans/.

The implementation contracts are in docs/plans/PHASE_0_1_EXECUTION.md and docs/plans/PHASE_0_2_EXECUTION.md.

Quickstart

from fastapi import FastAPI
from shuetl import ShuETL

integration = ShuETL(api=prebuilt_etlantic_api)
app = FastAPI(lifespan=integration.lifespan)
integration.mount(app, prefix="/etl")

Use integration.create_app() for a dedicated root-mounted application. Prefixes are literal slash-prefixed segments (/etl, /internal/etl); use "" for the root. Mounting rejects occupied state keys, route namespaces, operation IDs, and custom ControlPlaneError handlers before mutating the host. Dependency overrides target the original ETLantic callables through ordinary FastAPI APIs.

For tests, override the exact upstream dependencies and remove them normally:

app.dependency_overrides[integration.api.principal_dependency] = override_principal
app.dependency_overrides[integration.api.context_dependency] = override_context
# ...test...
app.dependency_overrides.pop(integration.api.principal_dependency, None)
app.dependency_overrides.pop(integration.api.context_dependency, None)

Mount the integration before startup. ShuETL does not start, stop, close, or mutate caller-owned providers; the host remains responsible for their lifecycle. When a host lifespan is present, compose it explicitly: the host enters first and ShuETL exits before the host. The host first initializes providers, then ShuETL records its active mount:

from contextlib import asynccontextmanager


@asynccontextmanager
async def host_lifespan(app):
    # Initialize caller-owned ETLantic providers here.
    yield
    # Close caller-owned providers here.


app = FastAPI(lifespan=integration.compose_lifespan(host_lifespan))
integration.mount(app, prefix="/etl")

Prefixes are literal path segments: use "" for the root, or a slash-prefixed sequence of ASCII letters, digits, ., _, ~, and - segments. A prefix may not have a trailing slash or contain empty, dot, or dot-dot segments, route parameters, query or fragment markers, percent escapes, backslashes, whitespace, or control characters. InvalidPrefixError reports invalid prefixes. Mounting raises MountConflictError before mutation when reserved state, handlers, route namespaces, or operation IDs collide; resolve the host conflict before retrying.

This release does not construct or own providers, execute ETLantic work, or provide production deployment orchestration. It is intended for local development and automated tests, and the in-memory provider examples are process-local.

To run the local evidence gate:

uv sync --locked --all-groups --extra test
uv run python scripts/capture_openapi.py
uv run python scripts/check_release.py

Planned ShuETL capabilities

  • mount a curated ETLantic API into an existing FastAPI application;
  • create a complete FastAPI application from explicit ETLantic providers;
  • validate provider compatibility and production readiness at startup;
  • configure ETLantic definition, submission, event, schedule, and persistence providers without exposing their implementation details to application code;
  • offer safe local-development defaults;
  • document and test separate gateway, scheduler, and worker roles for production;
  • integrate host authentication/authorization with ETLantic's control-plane context and authorizer contracts;
  • publish a tested compatibility matrix across FastAPI and ETLantic packages;
  • provide optional Hedron and AuthMate composition adapters when those packages are available.

Deployment goal

Local development may use one process and SQLite or in-memory providers.

The production reference uses one installable application/image with separate supervised roles:

FastAPI gateway
+
ETLantic scheduler/worker process or supported external execution host
+
PostgreSQL

The baseline should not require Redis, RabbitMQ, Kafka, an object store, or an external scheduler. “No required broker” does not imply that long-running ETL work executes inside the FastAPI gateway process.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shuetl-0.2.0.tar.gz (140.8 kB view details)

Uploaded Source

Built Distribution

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

shuetl-0.2.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file shuetl-0.2.0.tar.gz.

File metadata

  • Download URL: shuetl-0.2.0.tar.gz
  • Upload date:
  • Size: 140.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for shuetl-0.2.0.tar.gz
Algorithm Hash digest
SHA256 219a76bc1811a492e91132ac180bd27222ed8f45fbfae7ea82852b2d07ec3d5c
MD5 e86ba688fef8ac46f2a68c99733e9c41
BLAKE2b-256 13946d0ab884b149bb2b5032f68f775254013805fdb1117f6381a100544e6638

See more details on using hashes here.

Provenance

The following attestation bundles were made for shuetl-0.2.0.tar.gz:

Publisher: release.yml on eddiethedean/shuetl

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

File details

Details for the file shuetl-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: shuetl-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for shuetl-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d3ddba2e89609ade7360df226d7d1e63c8ea1dec0284ab4b09053ee279cb0a20
MD5 3ef8a83360e9be7b820dc7ed5c672fc8
BLAKE2b-256 508e61668b15fb0bdff0208115113573e5681ab73f532cad872772cc6fc1a90f

See more details on using hashes here.

Provenance

The following attestation bundles were made for shuetl-0.2.0-py3-none-any.whl:

Publisher: release.yml on eddiethedean/shuetl

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

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.0

2 files

This release

0.2.0 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page