Create simple GraphViz DOT UML graphs with a python script
Project description
pyUML
Create simple Graphviz dot UML graphs with a python script.
For example, as you can see step by step in the usage notebook,
from pyUML import Graph, UMLClass
graph = Graph('pyUML')
graph_dot = UMLClass(
"pydot.Dot"
)
graph.add_class(graph_dot)
graph_class = UMLClass(
"GraphClass",
caption="Graph",
methods=["add_aggregation()", "add_class()", "add_classes()",
"add_composition()", "add_edge()", "add_implementation()"]
)
graph.add_class(graph_class)
graph.add_implementation(graph_class, graph_dot)
node = UMLClass(
"pydot.Node"
)
graph.add_classes(node)
uml_class = UMLClass(
"UMLClass",
attributes={
"public": {
"name": "string",
"caption": "string"},
"private": {
"_attributes": "dict[dict]",
"_methods": "dict[list]"
}
},
methods={
"public": ["add_attribute()", "add_attributes()", "add_method()",
"add_methods()", "update_content()"],
"private": ["_render_attributes()", "_render_methods()", "_get_source_sep()"]
})
graph.add_class(uml_class)
graph.add_implementation(uml_class, node)
uml_class_with_id = UMLClass(
"UMLClassWithPublicIntID")
graph.add_class(uml_class_with_id)
graph.add_implementation(uml_class_with_id, uml_class)
edge = UMLClass(
"pydot.Edge")
association = UMLClass(
"Association",
methods=["set_multiplicity()"])
implementation = UMLClass(
"Implementation")
aggregation = UMLClass(
"Aggregation")
composition = UMLClass(
"Composition")
graph.add_classes(edge, association, implementation, aggregation, composition)
graph.add_implementation(association, edge)
graph.add_implementation(implementation, association)
graph.add_implementation(aggregation, association)
graph.add_implementation(composition, aggregation)
graph.add_composition(node, graph_dot, multiplicity_parent=1, multiplicity_child="1..*")
graph.add_composition(edge, graph_dot, multiplicity_parent=1, multiplicity_child="0..*")
graph.add_composition(association, graph_class, multiplicity_parent=1, multiplicity_child="0..*")
will be compiled into
digraph pyUML {
"pydot.Dot" [label="{pydot.Dot||}", shape=record];
GraphClass [label="{Graph||+ add_aggregation()\l+ add_class()\l+ add_classes()\l+ add_composition()\l+ add_edge()\l+ add_implementation()\l}", shape=record];
"pydot.Dot" -> GraphClass [arrowtail=onormal, dir=back];
"pydot.Node" [label="{pydot.Node||}", shape=record];
UMLClass [label="{UMLClass|+ name : string\l+ caption : string\l- _attributes : dict[dict]\l- _methods : dict[list]\l|+ add_attribute()\l+ add_attributes()\l+ add_method()\l+ add_methods()\l+ update_content()\l- _render_attributes()\l- _render_methods()\l- _get_source_sep()\l}", shape=record];
"pydot.Node" -> UMLClass [arrowtail=onormal, dir=back];
UMLClassWithPublicIntID [label="{UMLClassWithPublicIntID||}", shape=record];
UMLClass -> UMLClassWithPublicIntID [arrowtail=onormal, dir=back];
"pydot.Edge" [label="{pydot.Edge||}", shape=record];
Association [label="{Association||+ set_multiplicity()\l}", shape=record];
Implementation [label="{Implementation||}", shape=record];
Aggregation [label="{Aggregation||}", shape=record];
Composition [label="{Composition||}", shape=record];
"pydot.Edge" -> Association [arrowtail=onormal, dir=back];
Association -> Implementation [arrowtail=onormal, dir=back];
Association -> Aggregation [arrowtail=onormal, dir=back];
Aggregation -> Composition [arrowtail=onormal, dir=back];
"pydot.Dot" -> "pydot.Node" [arrowtail=diamond, dir=back, headlabel="\n1..*", taillabel="\n1"];
"pydot.Dot" -> "pydot.Edge" [arrowtail=diamond, dir=back, headlabel="\n0..*", taillabel="\n1"];
GraphClass -> Association [arrowtail=diamond, dir=back, headlabel="\n0..*", taillabel="\n1"];
}
and give
Dependencies
- pydot
- GraphViz, to render the graph (must be installed separately).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pyUML-0.1.0a0.tar.gz
(16.2 kB
view details)
Built Distribution
pyUML-0.1.0a0-py3-none-any.whl
(17.0 kB
view details)
File details
Details for the file pyUML-0.1.0a0.tar.gz
.
File metadata
- Download URL: pyUML-0.1.0a0.tar.gz
- Upload date:
- Size: 16.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7cf29051e66b4f405e348ddb3942be410bcf4092d4e302042602857f29c29b7 |
|
MD5 | b86675cd96f073ad771910a6408e6b93 |
|
BLAKE2b-256 | 421fca7e39d0bd8f6ca02c8d7f27196ff9f1b83a68e304cf4971dd60d41a65b5 |
File details
Details for the file pyUML-0.1.0a0-py3-none-any.whl
.
File metadata
- Download URL: pyUML-0.1.0a0-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2cd802b35fef9abff4ee29404e9168b46a02c688d7e63ca4a8b690ea13180fbf |
|
MD5 | 8e48f519d691acafc2c247fc302418af |
|
BLAKE2b-256 | 7009a86dda763bbd9e9e666f3e03d143accce9d68d01f8112355f09bb8534c07 |