Skip to main content

Easy ETL

Project description

ezl — Extremely Small Pipeline Library

Easy ETL -> EZL

ezl is a tiny, opinionated pipeline engine built around Tasks, queues, and optional webhook ingestion. It focuses on simplicity, predictable backpressure, and minimal Developer Experience.


Features at a Glance

  • Composable pipeline syntax:

    p = source >> process >> sink
    run(p)
    
  • Four task kinds detected automatically:

    • sync
    • sync_gen (generator → many outputs per input)
    • async
    • async_gen (async generator)
  • Deterministic backpressure using blocking queue.put() in worker threads.

  • Webhook ingestion with:

    • FastAPI auto-generated single + batch endpoints
    • Optional Pydantic validation
    • Built-in rate limiting
    • Automatic OpenAPI schema injection
    • API key support
  • Minimal, traceable logging, including a custom FLOW level (25) to visualize pull/put behavior.


When to Use ezl

Good For

  • Small to medium ETL pipelines

    • text processing, event enrichment, parsing, transformations
  • Offline, sequential or multi-stage workflows

    • batch jobs, file-based processing
  • Lightweight streaming

    • “pipe items through tasks” with predictable backpressure
  • Webhook → background processing pipelines

    • ingest data from external systems without building full infra
  • Rapid prototyping

    • tiny codebase, easy to understand
  • Hobby-scale or single-node data processing


Not Good For

  • Distributed or large-scale data processing

    • no clustering, no partitioning, no distributed queues
  • High-availability webhook ingestion

    • in-memory queue only; no persistence or replication
  • Long-running or resource-hungry async workloads

    • threads + asyncio coexist but not optimized for high concurrency
  • Multi-sink routing or DAGs

    • the pipeline is strictly linear: one downstream per task
  • High throughput message streaming

    • no batching at the worker level, no Kafka/RabbitMQ integration

Concept Overview

Task

A unit of computation. Created with:

@task(buffer=100, workers=3)
def my_task(x):
    return x * 2

A task can be:

  • a source (no upstream)
  • a worker (pulls from upstream queue)
  • a sink (no downstream)

Pipeline

Linear chain of tasks:

p = source >> step1 >> step2 >> sink
run(p)

Webhook Source

Turns a task into a FastAPI server:

@webhook(path="/ingest", model=MyModel)
def incoming():
    pass

Incoming HTTP POST data is validated and queued into downstream tasks.


Quick Example

from ezl import task, run

@task(workers=0)
def source():
    for i in range(5):
        yield i

@task(workers=2)
def double(x):
    return x * 2

@task(workers=1)
def printer(x):
    print("out:", x)

pipeline = source >> double >> printer
run(pipeline)

Strengths

Strength Description
Simplicity Very small codebase, easy to extend or customize.
Predictable behavior Blocking backpressure ensures slow sinks naturally throttle upstream.
Flexible task types Sync, async, generators, async generators.
Webhook integration FastAPI-based ingestion with validation and OpenAPI.
Debuggability FLOW-level logs show item movement through the pipeline.

Weaknesses / Limitations

Limitation Impact
In-memory queues only No durability; crashes lose items.
Single downstream DAGs, branching, joining not supported.
Threads for workers Not ideal for CPU-heavy workloads or massive scaling.
Single-process only No clustering or distributed pipelines.
Webhook backpressure Full queues cause immediate 503 responses.

Installation

pip install py-ezl 

# or if you are smart
uv add py-ezl

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

py_ezl-0.4.4.tar.gz (31.0 kB view details)

Uploaded Source

Built Distribution

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

py_ezl-0.4.4-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file py_ezl-0.4.4.tar.gz.

File metadata

  • Download URL: py_ezl-0.4.4.tar.gz
  • Upload date:
  • Size: 31.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.8

File hashes

Hashes for py_ezl-0.4.4.tar.gz
Algorithm Hash digest
SHA256 81a3540d39403f1962cc743e37372652b70290b2b8f2081f4beee131214af588
MD5 b521299b3e7e6d35a4d1bcfac64b3225
BLAKE2b-256 ea143983c1fc072f15c44b0f43d7d1703d7c6a1c7245d8b5cbb1b2e56205da24

See more details on using hashes here.

File details

Details for the file py_ezl-0.4.4-py3-none-any.whl.

File metadata

  • Download URL: py_ezl-0.4.4-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.8

File hashes

Hashes for py_ezl-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 1c066a1d7a0403176186ea011d49bb981075201875303a15899f70e1412f96fa
MD5 d9c53f3e9261c3f48cba14ab43e84c9a
BLAKE2b-256 9977ab390a0be5d8bbd29a8f7092ae2fb9cb6f73492157f9020b92d40bab68bc

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