Documentation and additional style attribute

pull/48/head
Andrew Selivanov 6 years ago
parent 0cb9436426
commit c38fe6a3f4

@ -402,7 +402,8 @@ class Edge:
forward: bool = False, forward: bool = False,
reverse: bool = False, reverse: bool = False,
label: str = "", label: str = "",
color: str = "" color: str = "",
style: str = ""
): ):
"""Edge represents an edge between two nodes. """Edge represents an edge between two nodes.
@ -411,15 +412,17 @@ class Edge:
:param reverse: Points backward. :param reverse: Points backward.
:param label: Edge label. :param label: Edge label.
:param color: Edge color. :param color: Edge color.
:param style: Edge style.
""" """
if node is not None: if node is not None:
assert type(node) is Node assert isinstance(node, Node)
self.node = node self.node = node
self.forward = forward self.forward = forward
self.reverse = reverse self.reverse = reverse
self.label = label self.label = label
self.color = color self.color = color
self.style = style
def __sub__(self, other: Union["Node", "Edge", List["Node"]]): def __sub__(self, other: Union["Node", "Edge", List["Node"]]):
"""Implement Self - Node or Edge and Self - [Nodes]""" """Implement Self - Node or Edge and Self - [Nodes]"""
@ -453,11 +456,13 @@ class Edge:
if isinstance(o, Edge): if isinstance(o, Edge):
o.color = self.color o.color = self.color
o.label = self.label o.label = self.label
o.style = self.style
o.forward = forward if forward is not None else o.forward o.forward = forward if forward is not None else o.forward
o.reverse = forward if forward is not None else o.reverse o.reverse = forward if forward is not None else o.reverse
result.append(o) result.append(o)
else: else:
result.append(Edge(o, forward=forward, reverse=reverse, color=self.color, label=self.label)) result.append(Edge(o, forward=forward, reverse=reverse,
color=self.color, label=self.label, style=self.style))
return result return result
def connect(self, other: Union["Node", "Edge", List["Node"]]): def connect(self, other: Union["Node", "Edge", List["Node"]]):
@ -468,6 +473,7 @@ class Edge:
elif isinstance(other, Edge): elif isinstance(other, Edge):
self.label = other.label self.label = other.label
self.color = other.color self.color = other.color
self.style = other.style
return self return self
else: else:
if self.node is not None: if self.node is not None:
@ -490,6 +496,8 @@ class Edge:
dot['label'] = self.label dot['label'] = self.label
if self.color: if self.color:
dot['color'] = self.color dot['color'] = self.color
if self.style:
dot['style'] = self.style
return dot return dot

@ -240,6 +240,29 @@ with Diagram("Broker Consumers", show=False):
queue = Custom("Message queue", rabbitmq_icon) queue = Custom("Message queue", rabbitmq_icon)
queue >> consumers >> Aurora("Database") queue >> consumers >> Aurora("Database")
```` ```
![rabbitmq consumers diagram](/img/rabbitmq_consumers_diagram.png) ![rabbitmq consumers diagram](/img/rabbitmq_consumers_diagram.png)
## Diagram with Custom Edges
```python
from diagrams import Edge
from diagrams.aws.compute import EC2
# line
[EC2("node3"), EC2("node4")] - Edge(color='red', label='label1', style='dotted') - EC2("node")
# list of nodes, one directional
[EC2("node3"), EC2("node4")] >> Edge(color='red', label='label1', style='dotted') >> EC2("node")
[EC2("node3"), EC2("node4")] << Edge(color='green', label='label2', style='dashed') << EC2("node")
# both directional
EC2("node") << Edge(color='blue', label='label3', style='bold') >> EC2("node")
# loop
node = EC2("node")
node >> Edge(color='pink', label='label4', style='solid') << node
```
![custom edges diagram](/img/custom_edges_diagram.png)

@ -0,0 +1,33 @@
---
id: edge
title: Edges
---
Edge is an object representing an edge between two Nodes.
## Basic
Node is an abstract concept that represents a single system component object.
An edge object contains three attributes: **label**, **color** and **style** which mirror corresponding graphviz edge attributes.
```python
from diagrams import Edge
from diagrams.aws.compute import EC2
# line
[EC2("node3"), EC2("node4")] - Edge(color='red', label='label1', style='dotted') - EC2("node")
# list of nodes, one directional
[EC2("node3"), EC2("node4")] >> Edge(color='red', label='label1', style='dotted') >> EC2("node")
[EC2("node3"), EC2("node4")] << Edge(color='green', label='label2', style='dashed') << EC2("node")
# both directional
EC2("node") << Edge(color='blue', label='label3', style='bold') >> EC2("node")
# loop
node = EC2("node")
node >> Edge(color='pink', label='label4', style='solid') << node
```
![custom edges diagram](/img/custom_edges_diagram.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Loading…
Cancel
Save