Skip to main content

Python Yaml to Dot Converter

Project description

Yaml2Dot

Python implementation of a yaml2dot converter. Now with JSON Support!

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]
  • 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.

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)

Examples

Sample YAML 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.

  • complex.yaml: Complex YAML structure with nested dictionaries and lists.
  • list.yaml: YAML data with a list of items.
  • mixed.yaml: YAML data with a mix of dictionaries, lists, and values.
  • nested.yaml: YAML data with nested dictionaries.
  • simple.yaml: Simple YAML data with key-value pairs.
  • small_graph.yaml: A small example YAML data.
  • large_graph.yaml: A larger example YAML data.

Sample JSON File

The examples directory contains an example json file for testing and experimentation.

  • sample_json.json: A naively "complex" JSON structure with nested objects and array.

Please feel free to add more or convert the existing yamls into jsons.

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

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.

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.

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

yaml2dot-2.0.0.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

yaml2dot-2.0.0-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file yaml2dot-2.0.0.tar.gz.

File metadata

  • Download URL: yaml2dot-2.0.0.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.13

File hashes

Hashes for yaml2dot-2.0.0.tar.gz
Algorithm Hash digest
SHA256 1efc6cedd3d9033a139e0b5d37ef1314cbb1fbac0bf601c83f2ceffb4fde7b28
MD5 0e6cb4453275cd9291cde13ae87143ed
BLAKE2b-256 ae2962ac54ce2b3aba152e6b81e0d637845d49adcce3a41cad934107357fc763

See more details on using hashes here.

File details

Details for the file yaml2dot-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: yaml2dot-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.13

File hashes

Hashes for yaml2dot-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 242cf980eaa84e826f8f84fb6f5b07ee9719aba4179089dd8c9c7470567c02df
MD5 1956207cf14ac3a7cbee3f17290e1a04
BLAKE2b-256 b3647b806dfc8aa331cdb427b65571df030a4226c2c204b5abe7521072c6c385

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page