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.13.tar.gz (33.6 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.13-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for py_ezl-0.4.13.tar.gz
Algorithm Hash digest
SHA256 84f9f5d28b3251de3c9bb4e375e36fbc813a2fdfd39ec50aec75a2e8690022c7
MD5 a45ef5c91f2063d852baee0084d6dc88
BLAKE2b-256 a7d4f719ad6f41ba93bf4b355c60ddb1528dadb40c1c0a2945b793993c903032

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for py_ezl-0.4.13-py3-none-any.whl
Algorithm Hash digest
SHA256 99c7dafc21ea2dabe32b220a60283058965221e687ffdcf482fbd17d19b6d945
MD5 500a96baaf9d255bbac97a81de351791
BLAKE2b-256 7a91c6f634bf78fa73002afd4951ff4aeb3439de2089044ddfbd7a5f334c7e52

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