diff --git a/diagrams/__init__.py b/diagrams/__init__.py index 75487b53..f6d30d0b 100644 --- a/diagrams/__init__.py +++ b/diagrams/__init__.py @@ -402,7 +402,8 @@ class Edge: forward: bool = False, reverse: bool = False, label: str = "", - color: str = "" + color: str = "", + style: str = "" ): """Edge represents an edge between two nodes. @@ -411,15 +412,17 @@ class Edge: :param reverse: Points backward. :param label: Edge label. :param color: Edge color. + :param style: Edge style. """ if node is not None: - assert type(node) is Node + assert isinstance(node, Node) self.node = node self.forward = forward self.reverse = reverse self.label = label self.color = color + self.style = style def __sub__(self, other: Union["Node", "Edge", List["Node"]]): """Implement Self - Node or Edge and Self - [Nodes]""" @@ -453,11 +456,13 @@ class Edge: if isinstance(o, Edge): o.color = self.color o.label = self.label + o.style = self.style o.forward = forward if forward is not None else o.forward o.reverse = forward if forward is not None else o.reverse result.append(o) 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 def connect(self, other: Union["Node", "Edge", List["Node"]]): @@ -468,6 +473,7 @@ class Edge: elif isinstance(other, Edge): self.label = other.label self.color = other.color + self.style = other.style return self else: if self.node is not None: @@ -490,6 +496,8 @@ class Edge: dot['label'] = self.label if self.color: dot['color'] = self.color + if self.style: + dot['style'] = self.style return dot diff --git a/docs/getting-started/examples.md b/docs/getting-started/examples.md index 2d2ac0d6..bae6512b 100644 --- a/docs/getting-started/examples.md +++ b/docs/getting-started/examples.md @@ -240,6 +240,29 @@ with Diagram("Broker Consumers", show=False): queue = Custom("Message queue", rabbitmq_icon) queue >> consumers >> Aurora("Database") -```` +``` + +![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 +``` -![rabbitmq consumers diagram](/img/rabbitmq_consumers_diagram.png) \ No newline at end of file +![custom edges diagram](/img/custom_edges_diagram.png) diff --git a/docs/guides/edge.md b/docs/guides/edge.md new file mode 100644 index 00000000..c36457a4 --- /dev/null +++ b/docs/guides/edge.md @@ -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) diff --git a/website/static/img/custom_edges_diagram.png b/website/static/img/custom_edges_diagram.png new file mode 100644 index 00000000..69ae35cc Binary files /dev/null and b/website/static/img/custom_edges_diagram.png differ