Skip to main content

without-dag

Concurrent execution of DAG-shaped async workflows, liftable into a without Processor. A Processor[In, Out] is otherwise an opaque stream-to-stream closure; this package lets the inside of a per-event step be a graph of async sub-steps that run with bounded concurrency and recombine into one output. It is the value-level fan-out/fan-in the substrate leaves room for: one input value drives many concurrent computations.

Graph is the typed frontend: a builder that threads value types through the wiring so a mismatched dependency is a mypy error and a cycle is unrepresentable. It compiles once into a CompiledGraph, an async callable reused per event:

from without_dag import Graph


async def fetch(request: Request) -> Fetched: ...
async def parse(fetched: Fetched) -> Parsed: ...
async def render(fetched: Fetched, parsed: Parsed) -> Report: ...


graph, (request,) = Graph.of(Request)
fetched = graph.node("fetched", fetch, request)
parsed = graph.node("parsed", parse, fetched)
report = graph.node("report", render, fetched, parsed)
run = graph.build(output=report, limit=4)

result: Report = await run(some_request)

Each node runs once (memoized, so a diamond's shared ancestor executes a single time with no glitch), acyclicity is proven at the boundary via stdlib graphlib, and a single-input graph is an async (In) -> Out callable, exactly what from_map lifts into a Processor.

A node's key is a name you choose, so it means the same thing after a crash: run.stream(...) yields each (key, result) as it lands, and handing that mapping back as run(..., checkpoint=...) skips every step it names. Sink the pairs to a Redis hash or a table row under a workflow's idempotency key and the graph is a resumable durable workflow, with no engine underneath it. Resumable is a claim about one runner over time: running the same workflow from two processes at once needs the store to say who may write, which is a guarantee the store owns rather than the graph.

See the without-dag guide (with the API reference) for the full surface: the object-interface execution core (Plan, drive, evaluate), the typed frontend, resuming from a checkpoint, and lifting into a processor.

Metadata

Release files for without-dag 0.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for without-dag 0.0.8
File Size Uploaded
without_dag-0.0.8.tar.gz 9.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for without-dag 0.0.8
File Interpreter ABI Platform
without_dag-0.0.8-py3-none-any.whl Python 3 none any Details

Total release size: 21.1 kB

Release files / without_dag-0.0.8.tar.gz

Download URL without_dag-0.0.8.tar.gz
Size 9.7 kB
Tags Source
SHA-256 checksum
How to use checksums
0b9d76ba346d6978f5f98afea39b05c61ecb91922923c3570b17e606f2888e64
BLAKE2b-256 checksum
How to use checksums
58fae03f8086a611b31195d5dcdc36c3672d2bee54ba6ca230333f4948abd575
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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}

Release files / without_dag-0.0.8-py3-none-any.whl

Download URL without_dag-0.0.8-py3-none-any.whl
Size 11.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b73e64cafd428b4e271490f26e2993283a71e71843c003a247bf8c61debbfb07
BLAKE2b-256 checksum
How to use checksums
f477f3e300fb959aa5777aba57f30383ae41dbbe67e9053efa72641e8b269a08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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}

Release history Release notifications | RSS feed

0.0.9

2 release files

This release

0.0.8 This release

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page