Skip to main content

Python library extending yEd functionality through programmatic interface to graphs.

Project description

Extended Python Support for yEd

CI Test Coverage PyPI - Python Version GitHub commit activity

This Python library extends yEd functionality through programmatic interface to graphs (of the GraphML file format), including the following:

  • creating graphs
  • formatting graphs
  • reading graphs
  • bulk data addition or management (MS excel-based)
  • management of the yEd application (starting, killing, maximizing)
  • enforcing rules on graphs
  • addition of standard sorting methods
  • graph comparison tools

yEd Graph

Basic Usage

Below are some basic usages of yEdExtended in interfacing with yEd and GraphML files:

Installing yEdExtended

From GITHUB

$ python -m pip install git+https://github.com/cole-st-john/yEdExtended

or Coming soon, to PyPI!

$ pip install yedextended  

Importing yEdExtended for usage

import yedextended as yed

Programmatically creating GraphML files

# Instantiate graph instance
graph1 = yed.Graph()

# Add arbitrary graph detail - nodes and edges
graph1.add_node("a")
graph1.add_node("b")
graph1.add_edge("a", "b")

# Add arbitrary graph detail - group and group objects
group1 = graph1.add_group("group 1", shape="rectangle")
group1.add_node("c")
group1.add_node("d")
group1.add_edge("c", "d")
# Adding graph objects based on csv input
import csv
with open("examples/test.csv", encoding="utf-8-sig") as csv_file: 
	csv_reader = csv.reader(csv_file)
	for row in csv_reader:
	    graph1.add_node(row)

Reading existing GraphML files

# Read graph file into python graph objects
graph1 = yed.Graph().from_existing_graph("examples/yed_created_edges.graphml")

Using formatting

# Add graph nodes and edges with some examples of non-default formatting
graph1.add_node(
    "foo",
    font_family="Zapfino",
)

graph1.add_node(
    "foo2",
    shape="roundrectangle",
    font_style="bolditalic",
    underlined_text="true",
)

graph1.add_edge(
    "foo1",
    "foo2",
)
graph1.add_node(
    "abc",
    font_size="72",
    height="100",
)

graph1.add_node(
    "bar",
    label="Multi\nline\ntext",
)
graph1.add_node(
    "foobar",
    label="""Multi
Line
Text!""",
)

graph1.add_edge(
    "foo",
    "foo1",
    label="EDGE!",
    width="3.0",
    color="#0000FF",
    arrowhead="white_diamond",
    arrowfoot="standard",
    line_type="dotted",
)

Manipulating data in MS Excel

# Manage data in excel (add/remove/modify objects)
graph1.manage_graph_data_in_excel() # default is object and hierachy management

# Manage data in excel (add/remove/modify relations)
graph1.manage_graph_data_in_excel(type="relations")

Adding Objects / Groups per Excel:

Excel Object Entry

Result:

Graph result of excel data entry

Adding Relationships per Excel:

Excel Relation Entry

Result:

Graph result of excel relation entry

Possible outputs of Graph

# Demonstrate stringified GraphML version of structure
print(graph1.stringify_graph())
# Several methods of writing graph to file ==============================

with open("test_graph.graphml", "w") as fp:  # using standard python functionality
    fp.write(graph1.stringify_graph())

graph_file = graph1.persist_graph("test.graphml")   # using tool specific method

graph_file = graph1.persist_graph("pretty_example.graphml", pretty_print=True)  #  tool specific with formatting

Opening files in yEd Application (assumes yEd installed and on PATH)

First install yEd application from here.

# From existing handle
graph_file.open_with_yed(force=True)

# From file path
yed.open_yed_file("examples/test.graphml")

Visualizing in yEd Application (Layout)

Following programmatic creation or modification of a graph, consider using the following keystrokes in yEd to improve layout / positioning:

  • Tools -> Fit Node to Label (Win: Alt + T + N)
  • Layout -> Hierarchical (Win: Alt + Shift + H)

Options

Provides comprehensive support for node_shapes, line_types, font_styles, arrow_types, custom parameters, UML, complex and deeply nested relationship structures and more.

Development

Interested in contributing or co-managing further development? Just reach out!

Dev. Requirements:

$ pip install pytest

To run the tests:

$ PYTHONPATH=. pytest tests

References:

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

yedextended-1.0.6.tar.gz (109.8 kB view hashes)

Uploaded Source

Built Distribution

yedextended-1.0.6-py3-none-any.whl (19.8 kB view hashes)

Uploaded Python 3

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