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.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| without_dag-0.0.5.tar.gz | 9.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| without_dag-0.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.1 kB
Release files / without_dag-0.0.5.tar.gz
| Download URL | without_dag-0.0.5.tar.gz |
|---|---|
| Size | 9.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
32f05cc759970aa8611ad1196621ca7d701fd1bfa3d87325d1c77d374704688c
|
|
BLAKE2b-256 checksum How to use checksums |
80b45fb4e45b7e96730280cd6c58ad0fb25c38980f051b100261c1a92deb1181
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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.5-py3-none-any.whl
| Download URL | without_dag-0.0.5-py3-none-any.whl |
|---|---|
| Size | 11.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
61beffd859d3655d317924c54c545afc9640cdbb9c963ae75c6b804c2a1fd4c3
|
|
BLAKE2b-256 checksum How to use checksums |
854ff095acfb13217eb6ac27714b8ec9f9d39ff97a2171d5fcfa7d083de430c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}
|