Skip to main content

Compose Python logic into data-flow pipelines — sync or async, run anywhere

Project description

lythonic

PyPI version Documentation

Compose Python logic into data-flow pipelines — sync or async, run anywhere.

Write plain Python functions. Wire them with >>. Data flows visibly between nodes — you can see what went in, what came out, what failed. Unlike task schedulers where jobs are opaque units, lythonic tracks the data itself.

Quick Start

uv add lythonic
from lythonic.compose.namespace import Dag

def fetch(url: str) -> dict:
    return {"source": url, "values": [1, 2, 3]}

def double(data: dict) -> dict:
    return {**data, "values": [v * 2 for v in data["values"]]}

dag = Dag()
dag.node(fetch) >> dag.node(double)

# Run it — sync or async, doesn't matter
import asyncio
result = asyncio.run(dag(url="https://example.com"))
print(result.outputs)  # {"double": {"source": "...", "values": [2, 4, 6]}}

Why lythonic?

Data flow, not task flow. Each node receives typed data from upstream and passes results downstream. The DAG runner wires inputs to outputs by type — fan-out, fan-in, and map-reduce built in. Provenance tracking records what data flowed through each edge.

Compose freely. DAGs nest inside DAGs. dag.node(sub_dag) runs a sub-DAG as a single step. dag.map(sub_dag) runs it on each element of a collection, concurrently. Build small, reuse everywhere.

Run transparently. await dag() for a quick test. DagRunner with provenance for production. lyth start for a long-running engine with cron-triggered pipelines. Same code, different execution context.

Sync and async — mixed freely. Write sync functions, async functions, or both in the same DAG. Sync nodes run in a thread executor automatically.

Features

  • DAG composition>> wiring, callable DAGs, MapNode, CallNode
  • @dag_factory — define reusable DAG templates as decorated functions
  • Triggers — cron-scheduled or push-triggered execution via TriggerManager
  • Provenance — SQLite-backed tracking of runs, node executions, edge traversals
  • Caching — per-callable SQLite cache with probabilistic TTL refresh
  • lyth CLIstart, stop, run, fire, status commands
  • State — Pydantic-based SQLite ORM with schema management and multi-tenant support

Documentation

Full documentation at walnutgeek.github.io/lythonic.

Star History

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

lythonic-0.0.17.tar.gz (224.5 kB view details)

Uploaded Source

Built Distribution

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

lythonic-0.0.17-py3-none-any.whl (71.4 kB view details)

Uploaded Python 3

File details

Details for the file lythonic-0.0.17.tar.gz.

File metadata

  • Download URL: lythonic-0.0.17.tar.gz
  • Upload date:
  • Size: 224.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.8.13

File hashes

Hashes for lythonic-0.0.17.tar.gz
Algorithm Hash digest
SHA256 80eb71302ebcb57879c6f986179250064284f3f5f6b7d8627a61ecd3a4d0394a
MD5 669652403387677c3c9c84a766379f74
BLAKE2b-256 951d43c1ec55eba27859cb8bdff961d41847d1c35c4fc6bb69ec2ad74fc06785

See more details on using hashes here.

File details

Details for the file lythonic-0.0.17-py3-none-any.whl.

File metadata

  • Download URL: lythonic-0.0.17-py3-none-any.whl
  • Upload date:
  • Size: 71.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.8.13

File hashes

Hashes for lythonic-0.0.17-py3-none-any.whl
Algorithm Hash digest
SHA256 b960b2846d69db6d9a83ead0657d09deaacdf4794c10a0b48f1f4966a35f1fa9
MD5 f7b8217f2b0a0ab6fee38fbd2a0d7425
BLAKE2b-256 d9b3b995f03e9789befba2002a7f2bb6102564350a42d08ee173ced0e1de05d7

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