Skip to main content

Typed, contract-driven data pipeline modeling for Python.

Project description

ETLantic

CI PyPI Python Versions License: MIT Ruff

Catch incompatible data-pipeline wiring before you process data.

Define datasets, transformations, and pipelines as typed Python classes. Validate and plan them once. Run locally today with registered implementations; optional Polars, Pandas, SQL, PySpark, and Airflow plugins attach when installed. Portable @Transformation.portable authoring ships in 0.11; portable compilers remain 0.12–0.15.

Status: Alpha 0.11.0 — local runtime + optional Polars/Pandas/SQL/PySpark/Airflow plugins, plus portable @Transformation.portable authoring to dtcs.transform-plan/2. Structured Streaming is experimental. Portable compilers remain planned for 0.12–0.15.

Install

Requires Python 3.11+.

pip install etlantic
etlantic --version

This is everything required for the local quickstart. Add an engine only after the first successful run: choose an integration.

From source

Requires uv.

git clone https://github.com/eddiethedean/etlantic.git
cd etlantic
uv sync
uv run python -c "import etlantic; print(etlantic.__version__)"
uv run python examples/quickstart.py

Quick example

from etlantic import (
    Data,
    Input,
    Output,
    Pipeline,
    PipelineRuntime,
    Sink,
    Source,
    Transformation,
)


class RawCustomer(Data):
    customer_id: int
    first_name: str
    last_name: str


class Customer(Data):
    customer_id: int
    full_name: str


class NormalizeCustomers(Transformation):
    customers: Input[RawCustomer]
    result: Output[Customer]


class CustomerPipeline(Pipeline):
    raw: Source[RawCustomer] = Source(binding="customer_source")
    normalized = NormalizeCustomers.step(customers=raw)
    curated: Sink[Customer] = Sink(
        input=normalized.result,
        binding="customer_sink",
    )


@NormalizeCustomers.implementation("local")
def normalize(customers: list[RawCustomer]) -> list[Customer]:
    return [
        Customer(
            customer_id=row.customer_id,
            full_name=f"{row.first_name} {row.last_name}",
        )
        for row in customers
    ]


CustomerPipeline.validate(profile="development").raise_for_errors()

runtime = PipelineRuntime()
runtime.memory.seed(
    "customer_source",
    [RawCustomer(customer_id=1, first_name="Ada", last_name="Lovelace")],
)
run_report = CustomerPipeline.run(profile="development", runtime=runtime)
print(runtime.memory.get("customer_sink"))

Catch bad wiring before processing data—change the sink type and validate() fails with a structured diagnostic instead of a runtime surprise.

Run the complete tested version at examples/quickstart.py.

Current capability boundary

Capability 0.11
Typed modeling, validation, contracts, and planning Available
Local Python execution and run reports Available
Memory, callable, JSON, CSV, and no-write storage Available
Polars and Pandas dataframe plugins Available (etlantic-polars / etlantic-pandas)
SQL plugin Available (etlantic-sql)
PySpark plugin + local provider Available (etlantic-pyspark)
Structured Streaming Experimental
Airflow orchestrator compiler Available (etlantic-airflow)
CLI compile / generate / schema / SARIF Available
Plugin allowlists / keyring / SQLModel extras Available
SparkForge migration adapter Available (etlantic-sparkforge)

Next design line: Portable authoring ships in 0.11. Releases 0.12–0.15 add Polars, PySpark, Pandas, and safe SQL compilers for the same dtcs.transform-plan/2 plans. See the portable transformation guide and roadmap.

Documentation

Hosted docs: etlantic.readthedocs.io

Build the docs locally with uv run mkdocs serve.

Development

Requires uv.

uv sync
uv run pytest
uv run ruff check .
uv run ruff format .

uv sync creates .venv, installs the package in editable mode, and installs the dev dependency group (pytest, ruff, mkdocs) by default.

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

etlantic-0.11.0.tar.gz (266.4 kB view details)

Uploaded Source

Built Distribution

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

etlantic-0.11.0-py3-none-any.whl (238.4 kB view details)

Uploaded Python 3

File details

Details for the file etlantic-0.11.0.tar.gz.

File metadata

  • Download URL: etlantic-0.11.0.tar.gz
  • Upload date:
  • Size: 266.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for etlantic-0.11.0.tar.gz
Algorithm Hash digest
SHA256 8fc74264dd010bbf038b9eb732525b210b5c3c0a1be4dfbe3b0f1873e40af6f1
MD5 ca181444ed121e3eb7ae5b55b34201fe
BLAKE2b-256 78bafa25b826263ce88ceea47377a75f2b50721df25cefd734c81d90e427e064

See more details on using hashes here.

File details

Details for the file etlantic-0.11.0-py3-none-any.whl.

File metadata

  • Download URL: etlantic-0.11.0-py3-none-any.whl
  • Upload date:
  • Size: 238.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for etlantic-0.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d23010e5a3c611403e46ce193ddc34f55e7f618c3b9f7d2e2c3c10f524c532e5
MD5 8a4a07ace5c60cfbf7e1ddc5c1082d03
BLAKE2b-256 7bcb13aa8b14044a5f016c947275fcb06ce59bfd5a2097999f184d5d4e99a129

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