Skip to main content

Typed, contract-driven data pipeline modeling for Python.

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

Pipelantic banner

Pipelantic

Documentation Status

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; swap Polars, Pandas, or SQL backends without rewriting the logical pipeline.

Status: Alpha 0.6.0 — local runtime + optional Polars/Pandas/SQL plugins. Spark and Airflow compilation are not shipped.

Install

Requires Python 3.11 or newer.

pip install pipelantic
# optional engines
pip install pipelantic-polars
pip install pipelantic-pandas
pip install pipelantic-sql

Verify:

python -c "import pipelantic; print(pipelantic.__version__)"

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.

Release

Tag a version that matches src/pipelantic/_version.py, then push the tag:

git tag v0.6.0
git push origin v0.6.0

GitHub Actions runs checks and publishes to PyPI using the PYPI_API_TOKEN repository secret.

Quick example

from pipelantic 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"))

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

Current capability boundary

Capability 0.6
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 (pipelantic-polars / pipelantic-pandas)
SQL plugin Available (pipelantic-sql)
Spark and Airflow plugins Not yet available

Documentation

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

pipelantic-0.6.0.tar.gz (159.3 kB view details)

Uploaded Source

Built Distribution

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

pipelantic-0.6.0-py3-none-any.whl (159.1 kB view details)

Uploaded Python 3

File details

Details for the file pipelantic-0.6.0.tar.gz.

File metadata

  • Download URL: pipelantic-0.6.0.tar.gz
  • Upload date:
  • Size: 159.3 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 pipelantic-0.6.0.tar.gz
Algorithm Hash digest
SHA256 6ffc563d9e5bf1cd0b989ea6d68f7d2e9099f94eab0ff806838ce0e38da8ca0c
MD5 937dbbcc32080b92b6bcf05aafee44fc
BLAKE2b-256 7091a95c0515f7aa1196a2778dcfc088f8e198b3b5c8abebc68b91738de7f9b9

See more details on using hashes here.

File details

Details for the file pipelantic-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: pipelantic-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 159.1 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 pipelantic-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5657a67e3b3a4d3231adcb7d349eaa84a5ee1cfb52e0da0e2fcfeff16676b5a8
MD5 13651f18e1bce02d49aa5099c8ce3fcc
BLAKE2b-256 33473080bfcf067d0f093d2df8cba2965d427ddcf9d462143ad6d0098c6c5e16

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