diff --git a/diagrams/custom/__init__.py b/diagrams/custom/__init__.py new file mode 100644 index 00000000..48441a6e --- /dev/null +++ b/diagrams/custom/__init__.py @@ -0,0 +1,20 @@ +""" +Custom provides the possibility of load an image to be presented as a node. +""" + +from diagrams import Node + + +class Custom(Node): + _provider = "custom" + _type = "custom" + _icon_dir = None + + fontcolor = "#ffffff" + + def _load_icon(self): + return self._icon + + def __init__(self, label, icon_path): + self._icon = icon_path + super().__init__(label) diff --git a/docs/getting-started/examples.md b/docs/getting-started/examples.md index 0e7b3916..2027e259 100644 --- a/docs/getting-started/examples.md +++ b/docs/getting-started/examples.md @@ -169,3 +169,34 @@ with Diagram("Stateful Architecture", show=False): ``` ![stateful architecture diagram](/img/stateful_architecture_diagram.png) + +## RabbitMQ Consumers with custom nodes + +```python +from urllib.request import urlretrieve + +from diagrams import Cluster, Diagram +from diagrams.custom import Custom +from diagrams.aws.database import Aurora +from diagrams.k8s.compute import Pod + +# Download an image to be used into a Custom Node class +rabbitmq_url = "https://jpadilla.github.io/rabbitmqapp/assets/img/icon.png" +rabbitmq_icon = "rabbitmq.png" +urlretrieve(rabbitmq_url, rabbitmq_icon) + + +with Diagram("Broker Consumers", show=False): + with Cluster("Consumers"): + consumers = [ + Pod("worker"), + Pod("worker"), + Pod("worker") + ] + + queue = Custom("Message queue", rabbitmq_icon) + + queue >> consumers >> Aurora("Database") +```` + +![rabbitmq consumers diagram](/img/rabbitmq_consumers_diagram.png) diff --git a/website/static/img/rabbitmq_consumers_diagram.png b/website/static/img/rabbitmq_consumers_diagram.png new file mode 100644 index 00000000..8575d9c6 Binary files /dev/null and b/website/static/img/rabbitmq_consumers_diagram.png differ