Skip to main content

Convert Python function plans to DAG (JSON, pseudo, optional SVG).

Project description

py2dag

Convert Python function plans to a DAG (JSON, pseudo, optional HTML/SVG).

Features

  • Writes plan.json with explicit nodes and edges for downstream tools.
  • Generates human-readable pseudo code at plan.pseudo.
  • Optional exports:
    • --html for an interactive Dagre graph with color-coded nodes.
    • --svg for a Graphviz-rendered SVG.
  • Node colors are chosen deterministically so the same op type is colored consistently across runs.

Install

  • From PyPI (once published):
pip install py2dag
  • From source using Makefile targets (recommended for development):
make setup         # create .venv and install deps (SVG extra by default)

Dev Environment via Makefile

  • Install Poetry (see poetry docs or pipx install poetry).
  • From the repo root:
poetry install

Notes:

  • HTML export uses Dagre via CDN (d3.js + dagre-d3). No local system deps, but an internet connection is required when opening plan.html. If you are offline or behind a firewall, the page will show a message; vendor the JS locally or open with internet access.
  • Optional Graphviz SVG export (--svg) requires Graphviz system binaries (e.g., brew install graphviz).

Local Virtualenv (.venv)

  • Create/update venv and install deps: make setup
  • Open interactive shell inside venv: make shell
  • .venv/ is ignored by git.

Usage

  • Run via Makefile (dev) — generates an interactive Dagre HTML graph:
make run FILE=path/to/your_file.py ARGS=--html
  • Run the installed CLI (after pip install py2dag):
py2dag path/to/your_file.py --html  # interactive HTML
py2dag path/to/your_file.py --svg   # Graphviz SVG
  • Or directly with Python (inside venv):
poetry run python cli.py path/to/your_file.py --html

This generates plan.json, plan.pseudo, and if --html/--svg is used, plan.html or plan.svg.

  • Function name: By default the tool auto-detects a suitable function in the file. To target a specific function, pass --func NAME.

Offline HTML (no internet)

plan.html references d3 and dagre-d3 from CDNs. To view graphs fully offline, download those files and place them next to plan.html, then edit the two <script> tags in py2dag/export_dagre.py to point at your local copies.

Example (download once):

wget https://d3js.org/d3.v5.min.js -O d3.v5.min.js
wget https://unpkg.com/dagre-d3@0.6.4/dist/dagre-d3.min.js -O dagre-d3.min.js

Then update the script tags to ./d3.v5.min.js and ./dagre-d3.min.js and regenerate plan.html.

Tests

Run tests using the Makefile (prints visible with -s):

make test

Build

Build the package artifacts (wheel and sdist):

make build

Releasing to PyPI

This repo includes a GitHub Actions workflow that publishes to PyPI when you push a Git tag like v0.1.1.

  1. In GitHub repo settings, add a repository secret named PYPI_API_TOKEN with your PyPI token (format: pypi-***).

  2. Bump patch version, commit, and tag locally; then push tags to trigger the workflow:

make patch        # bumps version, commits, and tags vX.Y.Z
make release      # pushes commits and tags to GitHub (triggers publish)

Or push tags manually:

git push --tags

You can also install from the local build with pip install dist/*.whl.

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

py2dag-0.3.11.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

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

py2dag-0.3.11-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file py2dag-0.3.11.tar.gz.

File metadata

  • Download URL: py2dag-0.3.11.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for py2dag-0.3.11.tar.gz
Algorithm Hash digest
SHA256 7fbe1f97fe8d0370dc4ac12feef7644c65ccd4ffe8ab9215b42b1b49bffda859
MD5 36baacb6e61f60fa82d329ff40f62cd6
BLAKE2b-256 26a32d00bd172a575f37d99bdb6bf1ae758a58b8d130629b481aa5d6c59a4381

See more details on using hashes here.

File details

Details for the file py2dag-0.3.11-py3-none-any.whl.

File metadata

  • Download URL: py2dag-0.3.11-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for py2dag-0.3.11-py3-none-any.whl
Algorithm Hash digest
SHA256 783e7f657f7b63888a64f6a356442f7b5059efda6dd68651f80ee9d55693fd04
MD5 a0d4f04a90912bc2dfd71b5d7fe2c60c
BLAKE2b-256 cc49e520faa41423e023e9278f3600c8a7b9ba56d59eabea78c00041137dfa4e

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