Skip to main content

Yaml2Dot

Python implementation of a yaml2dot converter. Now with JSON Support and enhcanched node customization!

Check out a demo at my personal page teamayejay.com/Adrian/Yaml2Dot.

Inspried by the original yml2dot.

The YAML to DOT Converter is a Python utility designed to transform YAML or JSON data into a visual graph representation, available in either the DOT (Graph Description Language) or JSON format. This tool employs NetworkX to construct the graph structure and offers the flexibility to produce either DOT files or JSON output in the form of node-link data.

Transform this data:

person:
  name: Alice
  age: 28
  address:
    street: 456 Elm St
    city: Another Town
    zip: '54321'
  hobbies:
    - reading
    - hiking

into this easy to read graph(after rendering using d3-graphviz):

Nested Yaml

Table of Contents

Getting Started

Prerequisites

Before using the YAML to DOT Converter, ensure you have the following dependencies installed:

Installation

The most straightforward way to install is to use pip:

pip install yaml2dot

For a manual install you can setup a virtual environment and do the following:

pip install networkx pydot click

or clone the repository and navigate to the project directory:

pip install .

Usage

To convert a YAML/JSON file to a DOT file, use the following command:

yaml2dot --input-file INPUT_FILE --output-file OUTPUT_FILE [--rankdir RANKDIR] [--output-format OUTPUT_FORMAT] [--multi-view] [--round-robin] [--shape SHAPE]
  • INPUT_FILE: Path to the input YAML/JSON file.
  • OUTPUT_FILE: Path to the output DOT file.
  • RANKDIR (optional): Rank direction (LR for left to right, TB for top to bottom). Default is LR.
  • MULTI-VIEW (optional): Enable alternative graph view for multiple YAML documents.
  • ROUND-ROBIN (optional): Enable round-robin node style selection. If not specified, defaults the rounded shape.
  • SHAPE (optional): User-defined node shape, applicable when round-robin is not used. See Graphviz Shapes for supported shapes.

Example usage for conerting to DOT:

yaml2dot --input-file input.yaml --output-file output.dot --rankdir LR

Example usage for converting for node link data JSON:

yaml2dot --input-file input.json --output-file output.json --output-format json

Here's an example of how to use the library's API to convert YAML or JSON data:

from yaml2dot import data_loader,converter

# Load YAML or JSON data from a file
data = data_loader.load_yaml_or_json('input.yaml')
# or input a python dict directly
# data = {"example":"example"}

# Convert the data to DOT format (default)
dot_output = converter.convert_yaml_or_json_to_format(data)

# Convert the data to JSON format
json_output = converter.convert_yaml_or_json_to_format(data, output_format='json')

# Print or save the outputs as needed
print(dot_output)
print(json_output)

CLI Options

The yaml2dot command offers various options to customize the graph rendering:

  • --round-robin: Automatically assigns different node shapes in a round-robin fashion for each YAML document.
  • --shape: Specify a custom shape for nodes. This option is ignored if --round-robin is used.
  • --multi-view: Useful for rendering multiple YAML documents in a single file with distinct node styles. Disables round-robin.

Examples

Sample YAML/JSON Files

The examples directory contains several sample YAML files that you can use for testing and experimentation. These files cover various YAML structures and complexities. It also contain an example json file for testing and experimentation.

Rendering Example

To render a sample YAML/JSON file, use the following command:

yaml2dot --input-file examples/small_graph.yaml --output-file small_graph.dot --rankdir LR --shape diamond

This will generate a DOT file that can be visualized using Graphviz or other compatible tools.

To render to JSON format:

yaml2dot --input-file examples/small_graph.yaml --output-file small_graph.json --rankdir LR --output-format json 

This will generate a node link data JSON file of the networkx graph that can be visualzied using d3.

For a round-robin node style in multi-document YAMLS:

yaml2dot --input-file examples/multi_document.yaml --output-file multi_document.dot --rankdir LR --multi-view --round-robin

Development

Contributing

Contributions are welcome! I don't have any formal contributing guidelines but since this is a fairly small project, feel free to send an informal message.

Dev Install

The fastest way to start developing is to clone the repository and run the following command:

pip install '.[all]'

Testing

Simply run:

pytest

License

This project is licensed under the MIT License. See the LICENSE file for details.

Release files for yaml2dot 2.1.1

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

Source distribution (sdist)

Source distribution for yaml2dot 2.1.1
File Size Uploaded
yaml2dot-2.1.1.tar.gz 18.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yaml2dot 2.1.1
File Interpreter ABI Platform
yaml2dot-2.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 43.4 kB

Release files / yaml2dot-2.1.1.tar.gz

Download URL yaml2dot-2.1.1.tar.gz
Size 18.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9196db483bdfba5df528d710b17a4031d68ab053b2ac835b0d1346668605e66b
BLAKE2b-256 checksum
How to use checksums
76b23930973a19ff8832803c5a00b90e93281f94a5bf08f946b29eda58ef7194
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Release files / yaml2dot-2.1.1-py3-none-any.whl

Download URL yaml2dot-2.1.1-py3-none-any.whl
Size 25.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1724fe2882ce1fbc096e046282e8359001c405340587681d1983379691a29096
BLAKE2b-256 checksum
How to use checksums
8a420c7ca54e06251da40f9a17ed03c14775eb068459f6c68a28895f31b80f49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Release history Release notifications | RSS feed

This release

2.1.1 This release

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.2.0

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