File: config.py

# fmt: off

#########################
#      Application      #
#########################

APP_NAME = "diagrams"

DIR_DOC_ROOT = "docs/nodes"
DIR_APP_ROOT = "diagrams"
DIR_RESOURCE = "resources"
DIR_TEMPLATE = "templates"

PROVIDERS = (
    "base",
    "onprem",
    "aws",
    "azure",
    "digitalocean",
    "gcp",
    "ibm",
    "firebase",
    "k8s",
    "alibabacloud",
    "oci",
    "programming",
    "saas",
    "elastic",
    "generic",
    "openstack",
    "outscale",
)

#########################
#  Resource Processing  #
#########################

CMD_ROUND = "round"
CMD_ROUND_OPTS = ("-w",)
CMD_SVG2PNG = "inkscape"
CMD_SVG2PNG_OPTS = ("-w", "256", "-h", "256", "--export-type", "png")
CMD_SVG2PNG_IM = "convert"
CMD_SVG2PNG_IM_OPTS = ("-shave", "25%x25%", "-resize", "256x256!")

FILE_PREFIXES = {
    "onprem": (),
    "aws": ("Amazon-", "AWS-"),
    "azure": ("Azure-",),
    "digitalocean": (),
    "gcp": ("Cloud-",),
    "firebase": ("Cloud-",),
    "ibm": (),
    "k8s": (),
    "alibabacloud": (),
    "oci": ("OCI-icon-",),
    "programming": (),
    "saas": (),
    "elastic": (),
    "outscale": (),
    "generic": (),
    "openstack": (),
}

#########################
#  Doc Auto Generation  #
#########################

TMPL_APIDOC = "apidoc.tmpl"

#########################
# Class Auto Generation #
#########################

TMPL_MODULE = "module.tmpl"

UPPER_WORDS = {
    "aws": ("aws", "api", "ebs", "ec2", "efs", "emr", "rds", "ml", "mq", "nat", "vpc", "waf", "sdk"),
    "azure": ("ad", "b2c", "ai", "api", "cdn", "ddos", "dns", "fxt", "hana", "hd", "id", "sap", "sql", "vm", "vpn", "vpc"),
    "gcp": ("gcp", "ai", "api", "cdn", "dns", "gke", "gpu", "iap", "ml", "nat", "os", "sdk", "sql", "tpu", "vpn"),
    "firebase": ("ab", "fcm", "ml"),
    "k8s": (
        "api", "cm", "ccm", "crb", "crd", "ds", "etcd", "hpa", "k8s", "ns", "psp", "pv", "pvc", "rb", "rs",
        "sa", "sc", "sts", "svc",
    ),
    "oci": ("oci", "ocid", "oke", "ocir", "ddos", "waf", "bm", "vm", "cdn", "vpn", "dns", "nat", "dms", "api", "id"),
    "elastic": ("apm", "siem", "ece", "eck", "sql"),
    "generic": ("vpn", "ios", "xen", "sql", "lxc"),
    "outscale": ("osc",),
    "openstack": ("rpm", "loci", "nfv", "ec2api"),
    "pve": ("pve"),
    "ibm": ("ibm"),
}

TITLE_WORDS = {
    "onprem": {
        "onprem": "OnPrem",
    },
    "alibabacloud": {
        "alibabacloud": "AlibabaCloud"
    },
    "aws": {
        "cloudfront": "CloudFront"
    },
    "digitalocean": {
        "digitalocean": "DigitalOcean"
    },
    "openstack": {
        "openstack": "OpenStack"
    },
    "ibm": {
        "ibm": "IBMCloud"
    },
}

# TODO: check if the classname exists
ALIASES = {
    "onprem": {
        "analytics": {
            "Powerbi": "PowerBI"
        },
        "ci": {
            "Circleci": "CircleCI",
            "Concourseci": "ConcourseCI",
            "Droneci": "DroneCI",
            "Gitlabci": "GitlabCI",
            "Travisci": "TravisCI",
            "Teamcity": "TC",
            "Zuulci": "ZuulCI",
        },
        "container": {
            "Lxc": "LXC",
            "Rkt": "RKT",
        },
        "database": {
            "Clickhouse": "ClickHouse",
            "Cockroachdb": "CockroachDB",
            "Couchdb": "CouchDB",
            "Hbase": "HBase",
            "Influxdb": "InfluxDB",
            "Janusgraph": "JanusGraph",
            "Mariadb": "MariaDB",
            "Mongodb": "MongoDB",
            "Mssql": "MSSQL",
            "Mysql": "MySQL",
            "Postgresql": "PostgreSQL",
        },
        "gitops": {
            "Argocd": "ArgoCD",
        },
        "logging": {
            "Fluentbit": "FluentBit",
            "Rsyslog": "RSyslog",
        },
        "network": {
            "Etcd": "ETCD",
            "Haproxy": "HAProxy",
            "OpenServiceMesh": "OSM",
            "Opnsense": "OPNSense",
            "Pfsense": "PFSense",
            "Vyos": "VyOS"
        },
        "proxmox": {
            "Pve": "ProxmoxVE",
        },
        "queue": {
            "Activemq": "ActiveMQ",
            "Emqx": "EMQX",
            "Rabbitmq": "RabbitMQ",
            "Zeromq": "ZeroMQ",
        },
        "storage": {
            "Ceph": "CEPH",
            "CephOsd": "CEPH_OSD",
        },
        "workflow": {
            "Kubeflow": "KubeFlow",
            "Nifi": "NiFi",
        }
    },
    "aws": {
        "analytics": {
            "ElasticsearchService": "ES",
        },
        "business": {
            "AlexaForBusiness": "A4B"
        },
        "blockchain": {
            "QuantumLedgerDatabaseQldb": "QLDB"
        },
        "compute": {
            "ApplicationAutoScaling": "AutoScaling",
            "EC2Ami": "AMI",
            "EC2ContainerRegistry": "ECR",
            "ElasticBeanstalk": "EB",
            "ElasticContainerService": "ECS",
            "ElasticKubernetesService": "EKS",
            "ServerlessApplicationRepository": "SAR",
        },
        "database": {
            "DatabaseMigrationService": "DMS",
            "DocumentdbMongodbCompatibility": "DocumentDB",
            "DynamodbDax": "DAX",
            "DynamodbGlobalSecondaryIndex": "DynamodbGSI",
            "Database": "DB",
            "Dynamodb": "DDB",
            "Elasticache": "ElastiCache",
            "QuantumLedgerDatabaseQldb": "QLDB",
        },
        "devtools": {
            "CommandLineInterface": "CLI",
            "DeveloperTools": "DevTools",
        },
        "engagement": {
            "SimpleEmailServiceSes": "SES",
        },
        "general": {
            "GenericOfficeBuilding": "OfficeBuilding",
        },
        "integration": {
            "SimpleNotificationServiceSns": "SNS",
            "SimpleQueueServiceSqs": "SQS",
            "StepFunctions": "SF",
        },
        "iot": {
            "Freertos": "FreeRTOS",
            "IotHardwareBoard": "IotBoard",
        },
        "management": {
            "SystemsManager": "SSM",
            "SystemsManagerParameterStore": "ParameterStore",
        },
        "migration": {
            "ApplicationDiscoveryService": "ADS",
            "CloudendureMigration": "CEM",
            "DatabaseMigrationService": "DMS",
            "MigrationAndTransfer": "MAT",
            "ServerMigrationService": "SMS",
        },
        "ml": {
            "DeepLearningContainers": "DLC",
        },
        "network": {
            "CloudFront": "CF",
            "ElasticLoadBalancing": "ELB",
            "ElbApplicationLoadBalancer": "ALB",
            "ElbClassicLoadBalancer": "CLB",
            "ElbNetworkLoadBalancer": "NLB",
            "GlobalAccelerator": "GAX",
        },
        "security": {
            "CertificateManager": "ACM",
            "Cloudhsm": "CloudHSM",
            "DirectoryService": "DS",
            "FirewallManager": "FMS",
            "IdentityAndAccessManagementIamAccessAnalyzer": "IAMAccessAnalyzer",
            "IdentityAndAccessManagementIamAWSSts": "IAMAWSSts",
            "IdentityAndAccessManagementIamPermissions": "IAMPermissions",
            "IdentityAndAccessManagementIamRole": "IAMRole",
            "IdentityAndAccessManagementIam": "IAM",
            "KeyManagementService": "KMS",
            "ResourceAccessManager": "RAM",
        },
        "storage": {
            "CloudendureDisasterRecovery": "CDR",
            "ElasticBlockStoreEBS": "EBS",
            "ElasticFileSystemEFS": "EFS",
            "Fsx": "FSx",
            "SimpleStorageServiceS3": "S3",
        },
    },
    "azure": {
        "compute": {
            "ContainerRegistries": "ACR",
            "KubernetesServices": "AKS",
            "VMScaleSet": "VMSS"
        },
    },
    "gcp": {
        "analytics": {
            "Bigquery": "BigQuery",
            "Pubsub": "PubSub",
        },
        "compute": {
            "AppEngine": "GAE",
            "Functions": "GCF",
            "ComputeEngine": "GCE",
            "KubernetesEngine": "GKE",
        },
        "database": {
            "Bigtable": "BigTable",
        },
        "devtools": {
            "ContainerRegistry": "GCR",
        },
        "ml": {
            "Automl": "AutoML",
            "NaturalLanguageAPI": "NLAPI",
            "SpeechToText": "STT",
            "TextToSpeech": "TTS",
        },
        "network": {
            "VirtualPrivateCloud": "VPC"
        },
        "security": {
            "KeyManagementService": "KMS",
            "SecurityCommandCenter": "SCC",
        },
        "storage": {
            "Storage": "GCS",
        },
    },
    "firebase": {
        "grow": {
            "Messaging": "FCM"
        }
    },
    "k8s": {
        "clusterconfig": {
            "Limits": "LimitRange",
            "HPA": "HorizontalPodAutoscaler",
        },
        "compute": {
            "Deploy": "Deployment",
            "DS": "DaemonSet",
            "RS": "ReplicaSet",
            "STS": "StatefulSet"
        },
        "controlplane": {
            "API": "APIServer",
            "CM": "ControllerManager",
            "KProxy": "KubeProxy",
            "Sched": "Scheduler",
        },
        "group": {
            "NS": "Namespace",
        },
        "network": {
            "Ep": "Endpoint",
            "Ing": "Ingress",
            "Netpol": "NetworkPolicy",
            "SVC": "Service",
        },
        "podconfig": {
            "CM": "ConfigMap",
        },
        "rbac": {
            "CRole": "ClusterRole",
            "CRB": "ClusterRoleBinding",
            "RB": "RoleBinding",
            "SA": "ServiceAccount",
        },
        "storage": {
            "PV": "PersistentVolume",
            "PVC": "PersistentVolumeClaim",
            "SC": "StorageClass",
            "Vol": "Volume",
        },
    },
    "alibabacloud": {
        "application": {
            "LogService": "SLS",
            "MessageNotificationService": "MNS",
            "PerformanceTestingService": "PTS",
            "SmartConversationAnalysis": "SCA",
        },
        "compute": {
            "AutoScaling": "ESS",
            "ElasticComputeService": "ECS",
            "ElasticContainerInstance": "ECI",
            "ElasticHighPerformanceComputing": "EHPC",
            "FunctionCompute": "FC",
            "OperationOrchestrationService": "OOS",
            "ResourceOrchestrationService": "ROS",
            "ServerLoadBalancer": "SLB",
            "ServerlessAppEngine": "SAE",
            "SimpleApplicationServer": "SAS",
            "WebAppService": "WAS",
        },
        "database": {
            "DataManagementService": "DMS",
            "DataTransmissionService": "DTS",
            "DatabaseBackupService": "DBS",
            "DisributeRelationalDatabaseService": "DRDS",
            "GraphDatabaseService": "GDS",
            "RelationalDatabaseService": "RDS",
        },
        "network": {
            "CloudEnterpriseNetwork": "CEN",
            "ElasticIpAddress": "EIP",
            "ServerLoadBalancer": "SLB",
            "VirtualPrivateCloud": "VPC",
        },
        "security": {
            "AntiBotService": "ABS",
            "AntifraudService": "AS",
            "CloudFirewall": "CFW",
            "ContentModeration": "CM",
            "DataEncryptionService": "DES",
            "WebApplicationFirewall": "WAF",
        },
        "storage": {
            "FileStorageHdfs": "HDFS",
            "FileStorageNas": "NAS",
            "HybridBackupRecovery": "HBR",
            "HybridCloudDisasterRecovery": "HDR",
            "ObjectStorageService": "OSS",
            "ObjectTableStore": "OTS",
        }
    },
    "digitalocean": {},
    "oci": {
        "compute": {
            "VM": "VirtualMachine",
            "VMWhite": "VirtualMachineWhite",
            "BM": "BareMetal",
            "BMWhite": "BareMetalWhite",
            "OCIR": "OCIRegistry",
            "OCIRWhite": "OCIRegistryWhite",
            "OKE": "ContainerEngine",
            "OKEWhite": "ContainerEngineWhite",
        },
        "database": {
            "Autonomous": "ADB",
            "AutonomousWhite": "ADBWhite",
            "DatabaseService": "DBService",
            "DatabaseServiceWhite": "DBServiceWhite",
        }
    },
    "programming": {
        "framework": {
            "Fastapi": "FastAPI",
            "Graphql": "GraphQL"
        },
        "language": {
            "Javascript": "JavaScript",
            "Nodejs": "NodeJS",
            "Php": "PHP",
            "Typescript": "TypeScript"
        },
    },
    "saas": {
        "logging": {
            "Datadog": "DataDog",
            "Newrelic": "NewRelic"
        }
    },
    "elastic": {
        "elasticsearch": {
            "Elasticsearch": "ElasticSearch",
            "Logstash": "LogStash",
            "MachineLearning": "ML",
        }
    },
    "outscale": {
        "Osc": "OSC",
    },
    "ibm": {},
    "generic": {},
    "openstack": {
        "user": {
            "Openstackclient": "OpenStackClient",
        },
        "billing": {
            "Cloudkitty": "CloudKitty",
        },
        "deployment": {
            "Kolla": "KollaAnsible",
            "Tripleo": "TripleO",
        }
    },
}



File: diagrams/__init__.py

import contextvars
import os
import uuid
from pathlib import Path
from typing import Dict, List, Optional, Union

from graphviz import Digraph

# Global contexts for a diagrams and a cluster.
#
# These global contexts are for letting the clusters and nodes know
# where context they are belong to. So the all clusters and nodes does
# not need to specify the current diagrams or cluster via parameters.
__diagram = contextvars.ContextVar("diagrams")
__cluster = contextvars.ContextVar("cluster")


def getdiagram() -> "Diagram":
    try:
        return __diagram.get()
    except LookupError:
        return None


def setdiagram(diagram: "Diagram"):
    __diagram.set(diagram)


def getcluster() -> "Cluster":
    try:
        return __cluster.get()
    except LookupError:
        return None


def setcluster(cluster: "Cluster"):
    __cluster.set(cluster)


class Diagram:
    __directions = ("TB", "BT", "LR", "RL")
    __curvestyles = ("ortho", "curved")
    __outformats = ("png", "jpg", "svg", "pdf", "dot")

    # fmt: off
    _default_graph_attrs = {
        "pad": "2.0",
        "splines": "ortho",
        "nodesep": "0.60",
        "ranksep": "0.75",
        "fontname": "Sans-Serif",
        "fontsize": "15",
        "fontcolor": "#2D3436",
    }
    _default_node_attrs = {
        "shape": "box",
        "style": "rounded",
        "fixedsize": "true",
        "width": "1.4",
        "height": "1.4",
        "labelloc": "b",
        # imagepos attribute is not backward compatible
        # TODO: check graphviz version to see if "imagepos" is available >= 2.40
        # https://github.com/xflr6/graphviz/blob/master/graphviz/backend.py#L248
        # "imagepos": "tc",
        "imagescale": "true",
        "fontname": "Sans-Serif",
        "fontsize": "13",
        "fontcolor": "#2D3436",
    }
    _default_edge_attrs = {
        "color": "#7B8894",
    }

    # fmt: on

    # TODO: Label position option
    # TODO: Save directory option (filename + directory?)
    def __init__(
        self,
        name: str = "",
        filename: str = "",
        direction: str = "LR",
        curvestyle: str = "ortho",
        outformat: str = "png",
        autolabel: bool = False,
        show: bool = True,
        strict: bool = False,
        graph_attr: Optional[dict] = None,
        node_attr: Optional[dict] = None,
        edge_attr: Optional[dict] = None,
    ):
        """Diagram represents a global diagrams context.

        :param name: Diagram name. It will be used for output filename if the
            filename isn't given.
        :param filename: The output filename, without the extension (.png).
            If not given, it will be generated from the name.
        :param direction: Data flow direction. Default is 'left to right'.
        :param curvestyle: Curve bending style. One of "ortho" or "curved".
        :param outformat: Output file format. Default is 'png'.
        :param show: Open generated image after save if true, just only save otherwise.
        :param graph_attr: Provide graph_attr dot config attributes.
        :param node_attr: Provide node_attr dot config attributes.
        :param edge_attr: Provide edge_attr dot config attributes.
        :param strict: Rendering should merge multi-edges.
        """
        if graph_attr is None:
            graph_attr = {}
        if node_attr is None:
            node_attr = {}
        if edge_attr is None:
            edge_attr = {}
        self.name = name
        if not name and not filename:
            filename = "diagrams_image"
        elif not filename:
            filename = "_".join(self.name.split()).lower()
        self.filename = filename
        self.dot = Digraph(self.name, filename=self.filename, strict=strict)

        # Set attributes.
        for k, v in self._default_graph_attrs.items():
            self.dot.graph_attr[k] = v
        self.dot.graph_attr["label"] = self.name
        for k, v in self._default_node_attrs.items():
            self.dot.node_attr[k] = v
        for k, v in self._default_edge_attrs.items():
            self.dot.edge_attr[k] = v

        if not self._validate_direction(direction):
            raise ValueError(f'"{direction}" is not a valid direction')
        self.dot.graph_attr["rankdir"] = direction

        if not self._validate_curvestyle(curvestyle):
            raise ValueError(f'"{curvestyle}" is not a valid curvestyle')
        self.dot.graph_attr["splines"] = curvestyle

        if isinstance(outformat, list):
            for one_format in outformat:
                if not self._validate_outformat(one_format):
                    raise ValueError(f'"{one_format}" is not a valid output format')
        else:
            if not self._validate_outformat(outformat):
                raise ValueError(f'"{outformat}" is not a valid output format')
        self.outformat = outformat

        # Merge passed in attributes
        self.dot.graph_attr.update(graph_attr)
        self.dot.node_attr.update(node_attr)
        self.dot.edge_attr.update(edge_attr)

        self.show = show
        self.autolabel = autolabel

    def __str__(self) -> str:
        return str(self.dot)

    def __enter__(self):
        setdiagram(self)
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        self.render()
        # Remove the graphviz file leaving only the image.
        os.remove(self.filename)
        setdiagram(None)

    def _repr_png_(self):
        return self.dot.pipe(format="png")

    def _validate_direction(self, direction: str) -> bool:
        return direction.upper() in self.__directions

    def _validate_curvestyle(self, curvestyle: str) -> bool:
        return curvestyle.lower() in self.__curvestyles

    def _validate_outformat(self, outformat: str) -> bool:
        return outformat.lower() in self.__outformats

    def node(self, nodeid: str, label: str, **attrs) -> None:
        """Create a new node."""
        self.dot.node(nodeid, label=label, **attrs)

    def connect(self, node: "Node", node2: "Node", edge: "Edge") -> None:
        """Connect the two Nodes."""
        self.dot.edge(node.nodeid, node2.nodeid, **edge.attrs)

    def subgraph(self, dot: Digraph) -> None:
        """Create a subgraph for clustering"""
        self.dot.subgraph(dot)

    def render(self) -> None:
        if isinstance(self.outformat, list):
            for one_format in self.outformat:
                self.dot.render(format=one_format, view=self.show, quiet=True)
        else:
            self.dot.render(format=self.outformat, view=self.show, quiet=True)


class Cluster:
    __directions = ("TB", "BT", "LR", "RL")
    __bgcolors = ("#E5F5FD", "#EBF3E7", "#ECE8F6", "#FDF7E3")

    # fmt: off
    _default_graph_attrs = {
        "shape": "box",
        "style": "rounded",
        "labeljust": "l",
        "pencolor": "#AEB6BE",
        "fontname": "Sans-Serif",
        "fontsize": "12",
    }

    # fmt: on

    # FIXME:
    #  Cluster direction does not work now. Graphviz couldn't render
    #  correctly for a subgraph that has a different rank direction.
    def __init__(
        self,
        label: str = "cluster",
        direction: str = "LR",
        graph_attr: Optional[dict] = None,
    ):
        """Cluster represents a cluster context.

        :param label: Cluster label.
        :param direction: Data flow direction. Default is 'left to right'.
        :param graph_attr: Provide graph_attr dot config attributes.
        """
        if graph_attr is None:
            graph_attr = {}
        self.label = label
        self.name = "cluster_" + self.label

        self.dot = Digraph(self.name)

        # Set attributes.
        for k, v in self._default_graph_attrs.items():
            self.dot.graph_attr[k] = v
        self.dot.graph_attr["label"] = self.label

        if not self._validate_direction(direction):
            raise ValueError(f'"{direction}" is not a valid direction')
        self.dot.graph_attr["rankdir"] = direction

        # Node must be belong to a diagrams.
        self._diagram = getdiagram()
        if self._diagram is None:
            raise EnvironmentError("Global diagrams context not set up")
        self._parent = getcluster()

        # Set cluster depth for distinguishing the background color
        self.depth = self._parent.depth + 1 if self._parent else 0
        coloridx = self.depth % len(self.__bgcolors)
        self.dot.graph_attr["bgcolor"] = self.__bgcolors[coloridx]

        # Merge passed in attributes
        self.dot.graph_attr.update(graph_attr)

    def __enter__(self):
        setcluster(self)
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        if self._parent:
            self._parent.subgraph(self.dot)
        else:
            self._diagram.subgraph(self.dot)
        setcluster(self._parent)

    def _validate_direction(self, direction: str) -> bool:
        return direction.upper() in self.__directions

    def node(self, nodeid: str, label: str, **attrs) -> None:
        """Create a new node in the cluster."""
        self.dot.node(nodeid, label=label, **attrs)

    def subgraph(self, dot: Digraph) -> None:
        self.dot.subgraph(dot)


class Node:
    """Node represents a node for a specific backend service."""

    _provider = None
    _type = None

    _icon_dir = None
    _icon = None

    _height = 1.9

    def __init__(self, label: str = "", *, nodeid: str = None, **attrs: Dict):
        """Node represents a system component.

        :param label: Node label.
        """
        # Generates an ID for identifying a node, unless specified
        self._id = nodeid or self._rand_id()
        self.label = label

        # Node must be belong to a diagrams.
        self._diagram = getdiagram()
        if self._diagram is None:
            raise EnvironmentError("Global diagrams context not set up")

        if self._diagram.autolabel:
            prefix = self.__class__.__name__
            if self.label:
                self.label = prefix + "\n" + self.label
            else:
                self.label = prefix

        # fmt: off
        # If a node has an icon, increase the height slightly to avoid
        # that label being spanned between icon image and white space.
        # Increase the height by the number of new lines included in the label.
        padding = 0.4 * (self.label.count('\n'))
        self._attrs = {
            "shape": "none",
            "height": str(self._height + padding),
            "image": self._load_icon(),
        } if self._icon else {}

        # fmt: on
        self._attrs.update(attrs)

        self._cluster = getcluster()

        # If a node is in the cluster context, add it to cluster.
        if self._cluster:
            self._cluster.node(self._id, self.label, **self._attrs)
        else:
            self._diagram.node(self._id, self.label, **self._attrs)

    def __repr__(self):
        _name = self.__class__.__name__
        return f"<{self._provider}.{self._type}.{_name}>"

    def __sub__(self, other: Union["Node", List["Node"], "Edge"]):
        """Implement Self - Node, Self - [Nodes] and Self - Edge."""
        if isinstance(other, list):
            for node in other:
                self.connect(node, Edge(self))
            return other
        elif isinstance(other, Node):
            return self.connect(other, Edge(self))
        else:
            other.node = self
            return other

    def __rsub__(self, other: Union[List["Node"], List["Edge"]]):
        """Called for [Nodes] and [Edges] - Self because list don't have __sub__ operators."""
        for o in other:
            if isinstance(o, Edge):
                o.connect(self)
            else:
                o.connect(self, Edge(self))
        return self

    def __rshift__(self, other: Union["Node", List["Node"], "Edge"]):
        """Implements Self >> Node, Self >> [Nodes] and Self Edge."""
        if isinstance(other, list):
            for node in other:
                self.connect(node, Edge(self, forward=True))
            return other
        elif isinstance(other, Node):
            return self.connect(other, Edge(self, forward=True))
        else:
            other.forward = True
            other.node = self
            return other

    def __lshift__(self, other: Union["Node", List["Node"], "Edge"]):
        """Implements Self << Node, Self << [Nodes] and Self << Edge."""
        if isinstance(other, list):
            for node in other:
                self.connect(node, Edge(self, reverse=True))
            return other
        elif isinstance(other, Node):
            return self.connect(other, Edge(self, reverse=True))
        else:
            other.reverse = True
            return other.connect(self)

    def __rrshift__(self, other: Union[List["Node"], List["Edge"]]):
        """Called for [Nodes] and [Edges] >> Self because list don't have __rshift__ operators."""
        for o in other:
            if isinstance(o, Edge):
                o.forward = True
                o.connect(self)
            else:
                o.connect(self, Edge(self, forward=True))
        return self

    def __rlshift__(self, other: Union[List["Node"], List["Edge"]]):
        """Called for [Nodes] << Self because list of Nodes don't have __lshift__ operators."""
        for o in other:
            if isinstance(o, Edge):
                o.reverse = True
                o.connect(self)
            else:
                o.connect(self, Edge(self, reverse=True))
        return self

    @property
    def nodeid(self):
        return self._id

    # TODO: option for adding flow description to the connection edge
    def connect(self, node: "Node", edge: "Edge"):
        """Connect to other node.

        :param node: Other node instance.
        :param edge: Type of the edge.
        :return: Connected node.
        """
        if not isinstance(node, Node):
            ValueError(f"{node} is not a valid Node")
        if not isinstance(edge, Edge):
            ValueError(f"{edge} is not a valid Edge")
        # An edge must be added on the global diagrams, not a cluster.
        self._diagram.connect(self, node, edge)
        return node

    @staticmethod
    def _rand_id():
        return uuid.uuid4().hex

    def _load_icon(self):
        basedir = Path(os.path.abspath(os.path.dirname(__file__)))
        return os.path.join(basedir.parent, self._icon_dir, self._icon)


class Edge:
    """Edge represents an edge between two nodes."""

    _default_edge_attrs = {
        "fontcolor": "#2D3436",
        "fontname": "Sans-Serif",
        "fontsize": "13",
    }

    def __init__(
        self,
        node: "Node" = None,
        forward: bool = False,
        reverse: bool = False,
        label: str = "",
        color: str = "",
        style: str = "",
        **attrs: Dict,
    ):
        """Edge represents an edge between two nodes.

        :param node: Parent node.
        :param forward: Points forward.
        :param reverse: Points backward.
        :param label: Edge label.
        :param color: Edge color.
        :param style: Edge style.
        :param attrs: Other edge attributes
        """
        if node is not None:
            assert isinstance(node, Node)

        self.node = node
        self.forward = forward
        self.reverse = reverse

        self._attrs = {}

        # Set attributes.
        for k, v in self._default_edge_attrs.items():
            self._attrs[k] = v

        if label:
            # Graphviz complaining about using label for edges, so replace it with xlabel.
            # Update: xlabel option causes the misaligned label position: https://github.com/mingrammer/diagrams/issues/83
            self._attrs["label"] = label
        if color:
            self._attrs["color"] = color
        if style:
            self._attrs["style"] = style
        self._attrs.update(attrs)

    def __sub__(self, other: Union["Node", "Edge", List["Node"]]):
        """Implement Self - Node or Edge and Self - [Nodes]"""
        return self.connect(other)

    def __rsub__(self, other: Union[List["Node"], List["Edge"]]) -> List["Edge"]:
        """Called for [Nodes] or [Edges] - Self because list don't have __sub__ operators."""
        return self.append(other)

    def __rshift__(self, other: Union["Node", "Edge", List["Node"]]):
        """Implements Self >> Node or Edge and Self >> [Nodes]."""
        self.forward = True
        return self.connect(other)

    def __lshift__(self, other: Union["Node", "Edge", List["Node"]]):
        """Implements Self << Node or Edge and Self << [Nodes]."""
        self.reverse = True
        return self.connect(other)

    def __rrshift__(self, other: Union[List["Node"], List["Edge"]]) -> List["Edge"]:
        """Called for [Nodes] or [Edges] >> Self because list of Edges don't have __rshift__ operators."""
        return self.append(other, forward=True)

    def __rlshift__(self, other: Union[List["Node"], List["Edge"]]) -> List["Edge"]:
        """Called for [Nodes] or [Edges] << Self because list of Edges don't have __lshift__ operators."""
        return self.append(other, reverse=True)

    def append(self, other: Union[List["Node"], List["Edge"]], forward=None, reverse=None) -> List["Edge"]:
        result = []
        for o in other:
            if isinstance(o, Edge):
                o.forward = forward if forward else o.forward
                o.reverse = forward if forward else o.reverse
                self._attrs = o.attrs.copy()
                result.append(o)
            else:
                result.append(Edge(o, forward=forward, reverse=reverse, **self._attrs))
        return result

    def connect(self, other: Union["Node", "Edge", List["Node"]]):
        if isinstance(other, list):
            for node in other:
                self.node.connect(node, self)
            return other
        elif isinstance(other, Edge):
            self._attrs = other._attrs.copy()
            return self
        else:
            if self.node is not None:
                return self.node.connect(other, self)
            else:
                self.node = other
                return self

    @property
    def attrs(self) -> Dict:
        if self.forward and self.reverse:
            direction = "both"
        elif self.forward:
            direction = "forward"
        elif self.reverse:
            direction = "back"
        else:
            direction = "none"
        return {**self._attrs, "dir": direction}


Group = Cluster



File: diagrams/openstack/containerservices.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Containerservices(_OpenStack):
    _type = "containerservices"
    _icon_dir = "resources/openstack/containerservices"


class Kuryr(_Containerservices):
    _icon = "kuryr.png"


# Aliases



File: diagrams/openstack/user.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _User(_OpenStack):
    _type = "user"
    _icon_dir = "resources/openstack/user"


class Openstackclient(_User):
    _icon = "openstackclient.png"


# Aliases

OpenStackClient = Openstackclient



File: diagrams/openstack/billing.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Billing(_OpenStack):
    _type = "billing"
    _icon_dir = "resources/openstack/billing"


class Cloudkitty(_Billing):
    _icon = "cloudkitty.png"


# Aliases

CloudKitty = Cloudkitty



File: diagrams/openstack/sharedservices.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Sharedservices(_OpenStack):
    _type = "sharedservices"
    _icon_dir = "resources/openstack/sharedservices"


class Barbican(_Sharedservices):
    _icon = "barbican.png"


class Glance(_Sharedservices):
    _icon = "glance.png"


class Karbor(_Sharedservices):
    _icon = "karbor.png"


class Keystone(_Sharedservices):
    _icon = "keystone.png"


class Searchlight(_Sharedservices):
    _icon = "searchlight.png"


# Aliases



File: diagrams/openstack/deployment.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Deployment(_OpenStack):
    _type = "deployment"
    _icon_dir = "resources/openstack/deployment"


class Ansible(_Deployment):
    _icon = "ansible.png"


class Charms(_Deployment):
    _icon = "charms.png"


class Chef(_Deployment):
    _icon = "chef.png"


class Helm(_Deployment):
    _icon = "helm.png"


class Kolla(_Deployment):
    _icon = "kolla.png"


class Tripleo(_Deployment):
    _icon = "tripleo.png"


# Aliases

KollaAnsible = Kolla
TripleO = Tripleo



File: diagrams/openstack/workloadprovisioning.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Workloadprovisioning(_OpenStack):
    _type = "workloadprovisioning"
    _icon_dir = "resources/openstack/workloadprovisioning"


class Magnum(_Workloadprovisioning):
    _icon = "magnum.png"


class Sahara(_Workloadprovisioning):
    _icon = "sahara.png"


class Trove(_Workloadprovisioning):
    _icon = "trove.png"


# Aliases



File: diagrams/openstack/monitoring.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Monitoring(_OpenStack):
    _type = "monitoring"
    _icon_dir = "resources/openstack/monitoring"


class Monasca(_Monitoring):
    _icon = "monasca.png"


class Telemetry(_Monitoring):
    _icon = "telemetry.png"


# Aliases



File: diagrams/openstack/lifecyclemanagement.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Lifecyclemanagement(_OpenStack):
    _type = "lifecyclemanagement"
    _icon_dir = "resources/openstack/lifecyclemanagement"


# Aliases



File: diagrams/openstack/baremetal.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Baremetal(_OpenStack):
    _type = "baremetal"
    _icon_dir = "resources/openstack/baremetal"


class Cyborg(_Baremetal):
    _icon = "cyborg.png"


class Ironic(_Baremetal):
    _icon = "ironic.png"


# Aliases



File: diagrams/openstack/optimization.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Optimization(_OpenStack):
    _type = "optimization"
    _icon_dir = "resources/openstack/optimization"


class Congress(_Optimization):
    _icon = "congress.png"


class Rally(_Optimization):
    _icon = "rally.png"


class Vitrage(_Optimization):
    _icon = "vitrage.png"


class Watcher(_Optimization):
    _icon = "watcher.png"


# Aliases



File: diagrams/openstack/frontend.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Frontend(_OpenStack):
    _type = "frontend"
    _icon_dir = "resources/openstack/frontend"


class Horizon(_Frontend):
    _icon = "horizon.png"


# Aliases



File: diagrams/openstack/__init__.py

"""
Openstack provides a set of general OpenStack services.
"""

from diagrams import Node


class _OpenStack(Node):
    _provider = "openstack"
    _icon_dir = "resources/openstack"

    fontcolor = "#ffffff"



File: diagrams/openstack/orchestration.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Orchestration(_OpenStack):
    _type = "orchestration"
    _icon_dir = "resources/openstack/orchestration"


class Blazar(_Orchestration):
    _icon = "blazar.png"


class Heat(_Orchestration):
    _icon = "heat.png"


class Mistral(_Orchestration):
    _icon = "mistral.png"


class Senlin(_Orchestration):
    _icon = "senlin.png"


class Zaqar(_Orchestration):
    _icon = "zaqar.png"


# Aliases



File: diagrams/openstack/operations.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Operations(_OpenStack):
    _type = "operations"
    _icon_dir = "resources/openstack/operations"


# Aliases



File: diagrams/openstack/nfv.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _NFV(_OpenStack):
    _type = "nfv"
    _icon_dir = "resources/openstack/nfv"


class Tacker(_NFV):
    _icon = "tacker.png"


# Aliases



File: diagrams/openstack/networking.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Networking(_OpenStack):
    _type = "networking"
    _icon_dir = "resources/openstack/networking"


class Designate(_Networking):
    _icon = "designate.png"


class Neutron(_Networking):
    _icon = "neutron.png"


class Octavia(_Networking):
    _icon = "octavia.png"


# Aliases



File: diagrams/openstack/packaging.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Packaging(_OpenStack):
    _type = "packaging"
    _icon_dir = "resources/openstack/packaging"


class LOCI(_Packaging):
    _icon = "loci.png"


class Puppet(_Packaging):
    _icon = "puppet.png"


class RPM(_Packaging):
    _icon = "rpm.png"


# Aliases



File: diagrams/openstack/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Storage(_OpenStack):
    _type = "storage"
    _icon_dir = "resources/openstack/storage"


class Cinder(_Storage):
    _icon = "cinder.png"


class Manila(_Storage):
    _icon = "manila.png"


class Swift(_Storage):
    _icon = "swift.png"


# Aliases



File: diagrams/openstack/adjacentenablers.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Adjacentenablers(_OpenStack):
    _type = "adjacentenablers"
    _icon_dir = "resources/openstack/adjacentenablers"


# Aliases



File: diagrams/openstack/apiproxies.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Apiproxies(_OpenStack):
    _type = "apiproxies"
    _icon_dir = "resources/openstack/apiproxies"


class EC2API(_Apiproxies):
    _icon = "ec2api.png"


# Aliases



File: diagrams/openstack/applicationlifecycle.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Applicationlifecycle(_OpenStack):
    _type = "applicationlifecycle"
    _icon_dir = "resources/openstack/applicationlifecycle"


class Freezer(_Applicationlifecycle):
    _icon = "freezer.png"


class Masakari(_Applicationlifecycle):
    _icon = "masakari.png"


class Murano(_Applicationlifecycle):
    _icon = "murano.png"


class Solum(_Applicationlifecycle):
    _icon = "solum.png"


# Aliases



File: diagrams/openstack/multiregion.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Multiregion(_OpenStack):
    _type = "multiregion"
    _icon_dir = "resources/openstack/multiregion"


class Tricircle(_Multiregion):
    _icon = "tricircle.png"


# Aliases



File: diagrams/openstack/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OpenStack


class _Compute(_OpenStack):
    _type = "compute"
    _icon_dir = "resources/openstack/compute"


class Nova(_Compute):
    _icon = "nova.png"


class Qinling(_Compute):
    _icon = "qinling.png"


class Zun(_Compute):
    _icon = "zun.png"


# Aliases



File: diagrams/outscale/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Outscale


class _Security(_Outscale):
    _type = "security"
    _icon_dir = "resources/outscale/security"


class Firewall(_Security):
    _icon = "firewall.png"


class IdentityAndAccessManagement(_Security):
    _icon = "identity-and-access-management.png"


# Aliases



File: diagrams/outscale/__init__.py

from diagrams import Node


class _Outscale(Node):
    _provider = "outscale"
    _icon_dir = "resources/outscale"

    fontcolor = "#ffffff"



File: diagrams/outscale/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Outscale


class _Storage(_Outscale):
    _type = "storage"
    _icon_dir = "resources/outscale/storage"


class SimpleStorageService(_Storage):
    _icon = "simple-storage-service.png"


class Storage(_Storage):
    _icon = "storage.png"


# Aliases



File: diagrams/outscale/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Outscale


class _Network(_Outscale):
    _type = "network"
    _icon_dir = "resources/outscale/network"


class ClientVpn(_Network):
    _icon = "client-vpn.png"


class InternetService(_Network):
    _icon = "internet-service.png"


class LoadBalancer(_Network):
    _icon = "load-balancer.png"


class NatService(_Network):
    _icon = "nat-service.png"


class Net(_Network):
    _icon = "net.png"


class SiteToSiteVpng(_Network):
    _icon = "site-to-site-vpng.png"


# Aliases



File: diagrams/outscale/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Outscale


class _Compute(_Outscale):
    _type = "compute"
    _icon_dir = "resources/outscale/compute"


class Compute(_Compute):
    _icon = "compute.png"


class DirectConnect(_Compute):
    _icon = "direct-connect.png"


# Aliases



File: diagrams/elastic/elasticsearch.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Elastic


class _Elasticsearch(_Elastic):
    _type = "elasticsearch"
    _icon_dir = "resources/elastic/elasticsearch"


class Alerting(_Elasticsearch):
    _icon = "alerting.png"


class Beats(_Elasticsearch):
    _icon = "beats.png"


class Elasticsearch(_Elasticsearch):
    _icon = "elasticsearch.png"


class Kibana(_Elasticsearch):
    _icon = "kibana.png"


class LogstashPipeline(_Elasticsearch):
    _icon = "logstash-pipeline.png"


class Logstash(_Elasticsearch):
    _icon = "logstash.png"


class MachineLearning(_Elasticsearch):
    _icon = "machine-learning.png"


class MapServices(_Elasticsearch):
    _icon = "map-services.png"


class Maps(_Elasticsearch):
    _icon = "maps.png"


class Monitoring(_Elasticsearch):
    _icon = "monitoring.png"


class SearchableSnapshots(_Elasticsearch):
    _icon = "searchable-snapshots.png"


class SecuritySettings(_Elasticsearch):
    _icon = "security-settings.png"


class SQL(_Elasticsearch):
    _icon = "sql.png"


class Stack(_Elasticsearch):
    _icon = "stack.png"


# Aliases

ElasticSearch = Elasticsearch
LogStash = Logstash
ML = MachineLearning



File: diagrams/elastic/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Elastic


class _Security(_Elastic):
    _type = "security"
    _icon_dir = "resources/elastic/security"


class Endpoint(_Security):
    _icon = "endpoint.png"


class Security(_Security):
    _icon = "security.png"


class SIEM(_Security):
    _icon = "siem.png"


class Xdr(_Security):
    _icon = "xdr.png"


# Aliases



File: diagrams/elastic/saas.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Elastic


class _Saas(_Elastic):
    _type = "saas"
    _icon_dir = "resources/elastic/saas"


class Cloud(_Saas):
    _icon = "cloud.png"


class Elastic(_Saas):
    _icon = "elastic.png"


# Aliases



File: diagrams/elastic/__init__.py

"""
Elastic provides a set of general elastic services.
"""

from diagrams import Node


class _Elastic(Node):
    _provider = "elastic"
    _icon_dir = "resources/elastic"

    fontcolor = "#ffffff"



File: diagrams/elastic/observability.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Elastic


class _Observability(_Elastic):
    _type = "observability"
    _icon_dir = "resources/elastic/observability"


class APM(_Observability):
    _icon = "apm.png"


class Logs(_Observability):
    _icon = "logs.png"


class Metrics(_Observability):
    _icon = "metrics.png"


class Observability(_Observability):
    _icon = "observability.png"


class Uptime(_Observability):
    _icon = "uptime.png"


# Aliases



File: diagrams/elastic/orchestration.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Elastic


class _Orchestration(_Elastic):
    _type = "orchestration"
    _icon_dir = "resources/elastic/orchestration"


class ECE(_Orchestration):
    _icon = "ece.png"


class ECK(_Orchestration):
    _icon = "eck.png"


# Aliases



File: diagrams/elastic/beats.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Elastic


class _Beats(_Elastic):
    _type = "beats"
    _icon_dir = "resources/elastic/beats"


class APM(_Beats):
    _icon = "apm.png"


class Auditbeat(_Beats):
    _icon = "auditbeat.png"


class Filebeat(_Beats):
    _icon = "filebeat.png"


class Functionbeat(_Beats):
    _icon = "functionbeat.png"


class Heartbeat(_Beats):
    _icon = "heartbeat.png"


class Metricbeat(_Beats):
    _icon = "metricbeat.png"


class Packetbeat(_Beats):
    _icon = "packetbeat.png"


class Winlogbeat(_Beats):
    _icon = "winlogbeat.png"


# Aliases



File: diagrams/elastic/agent.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Elastic


class _Agent(_Elastic):
    _type = "agent"
    _icon_dir = "resources/elastic/agent"


class Agent(_Agent):
    _icon = "agent.png"


class Endpoint(_Agent):
    _icon = "endpoint.png"


class Fleet(_Agent):
    _icon = "fleet.png"


class Integrations(_Agent):
    _icon = "integrations.png"


# Aliases



File: diagrams/elastic/enterprisesearch.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Elastic


class _Enterprisesearch(_Elastic):
    _type = "enterprisesearch"
    _icon_dir = "resources/elastic/enterprisesearch"


class AppSearch(_Enterprisesearch):
    _icon = "app-search.png"


class Crawler(_Enterprisesearch):
    _icon = "crawler.png"


class EnterpriseSearch(_Enterprisesearch):
    _icon = "enterprise-search.png"


class SiteSearch(_Enterprisesearch):
    _icon = "site-search.png"


class WorkplaceSearch(_Enterprisesearch):
    _icon = "workplace-search.png"


# Aliases



File: diagrams/azure/web.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Web(_Azure):
    _type = "web"
    _icon_dir = "resources/azure/web"


class APIConnections(_Web):
    _icon = "api-connections.png"


class AppServiceCertificates(_Web):
    _icon = "app-service-certificates.png"


class AppServiceDomains(_Web):
    _icon = "app-service-domains.png"


class AppServiceEnvironments(_Web):
    _icon = "app-service-environments.png"


class AppServicePlans(_Web):
    _icon = "app-service-plans.png"


class AppServices(_Web):
    _icon = "app-services.png"


class MediaServices(_Web):
    _icon = "media-services.png"


class NotificationHubNamespaces(_Web):
    _icon = "notification-hub-namespaces.png"


class Search(_Web):
    _icon = "search.png"


class Signalr(_Web):
    _icon = "signalr.png"


# Aliases



File: diagrams/azure/database.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Database(_Azure):
    _type = "database"
    _icon_dir = "resources/azure/database"


class BlobStorage(_Database):
    _icon = "blob-storage.png"


class CacheForRedis(_Database):
    _icon = "cache-for-redis.png"


class CosmosDb(_Database):
    _icon = "cosmos-db.png"


class DataExplorerClusters(_Database):
    _icon = "data-explorer-clusters.png"


class DataFactory(_Database):
    _icon = "data-factory.png"


class DataLake(_Database):
    _icon = "data-lake.png"


class DatabaseForMariadbServers(_Database):
    _icon = "database-for-mariadb-servers.png"


class DatabaseForMysqlServers(_Database):
    _icon = "database-for-mysql-servers.png"


class DatabaseForPostgresqlServers(_Database):
    _icon = "database-for-postgresql-servers.png"


class ElasticDatabasePools(_Database):
    _icon = "elastic-database-pools.png"


class ElasticJobAgents(_Database):
    _icon = "elastic-job-agents.png"


class InstancePools(_Database):
    _icon = "instance-pools.png"


class ManagedDatabases(_Database):
    _icon = "managed-databases.png"


class SQLDatabases(_Database):
    _icon = "sql-databases.png"


class SQLDatawarehouse(_Database):
    _icon = "sql-datawarehouse.png"


class SQLManagedInstances(_Database):
    _icon = "sql-managed-instances.png"


class SQLServerStretchDatabases(_Database):
    _icon = "sql-server-stretch-databases.png"


class SQLServers(_Database):
    _icon = "sql-servers.png"


class SQLVM(_Database):
    _icon = "sql-vm.png"


class SQL(_Database):
    _icon = "sql.png"


class SsisLiftAndShiftIr(_Database):
    _icon = "ssis-lift-and-shift-ir.png"


class SynapseAnalytics(_Database):
    _icon = "synapse-analytics.png"


class VirtualClusters(_Database):
    _icon = "virtual-clusters.png"


class VirtualDatacenter(_Database):
    _icon = "virtual-datacenter.png"


# Aliases



File: diagrams/azure/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Security(_Azure):
    _type = "security"
    _icon_dir = "resources/azure/security"


class ApplicationSecurityGroups(_Security):
    _icon = "application-security-groups.png"


class ConditionalAccess(_Security):
    _icon = "conditional-access.png"


class Defender(_Security):
    _icon = "defender.png"


class ExtendedSecurityUpdates(_Security):
    _icon = "extended-security-updates.png"


class KeyVaults(_Security):
    _icon = "key-vaults.png"


class SecurityCenter(_Security):
    _icon = "security-center.png"


class Sentinel(_Security):
    _icon = "sentinel.png"


# Aliases



File: diagrams/azure/mobile.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Mobile(_Azure):
    _type = "mobile"
    _icon_dir = "resources/azure/mobile"


class AppServiceMobile(_Mobile):
    _icon = "app-service-mobile.png"


class MobileEngagement(_Mobile):
    _icon = "mobile-engagement.png"


class NotificationHubs(_Mobile):
    _icon = "notification-hubs.png"


# Aliases



File: diagrams/azure/__init__.py

"""
Azure provides a set of services for Microsoft Azure provider.
"""

from diagrams import Node


class _Azure(Node):
    _provider = "azure"
    _icon_dir = "resources/azure"

    fontcolor = "#ffffff"



File: diagrams/azure/devops.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Devops(_Azure):
    _type = "devops"
    _icon_dir = "resources/azure/devops"


class ApplicationInsights(_Devops):
    _icon = "application-insights.png"


class Artifacts(_Devops):
    _icon = "artifacts.png"


class Boards(_Devops):
    _icon = "boards.png"


class Devops(_Devops):
    _icon = "devops.png"


class DevtestLabs(_Devops):
    _icon = "devtest-labs.png"


class LabServices(_Devops):
    _icon = "lab-services.png"


class Pipelines(_Devops):
    _icon = "pipelines.png"


class Repos(_Devops):
    _icon = "repos.png"


class TestPlans(_Devops):
    _icon = "test-plans.png"


# Aliases



File: diagrams/azure/integration.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Integration(_Azure):
    _type = "integration"
    _icon_dir = "resources/azure/integration"


class APIForFhir(_Integration):
    _icon = "api-for-fhir.png"


class APIManagement(_Integration):
    _icon = "api-management.png"


class AppConfiguration(_Integration):
    _icon = "app-configuration.png"


class DataCatalog(_Integration):
    _icon = "data-catalog.png"


class EventGridDomains(_Integration):
    _icon = "event-grid-domains.png"


class EventGridSubscriptions(_Integration):
    _icon = "event-grid-subscriptions.png"


class EventGridTopics(_Integration):
    _icon = "event-grid-topics.png"


class IntegrationAccounts(_Integration):
    _icon = "integration-accounts.png"


class IntegrationServiceEnvironments(_Integration):
    _icon = "integration-service-environments.png"


class LogicAppsCustomConnector(_Integration):
    _icon = "logic-apps-custom-connector.png"


class LogicApps(_Integration):
    _icon = "logic-apps.png"


class PartnerTopic(_Integration):
    _icon = "partner-topic.png"


class SendgridAccounts(_Integration):
    _icon = "sendgrid-accounts.png"


class ServiceBusRelays(_Integration):
    _icon = "service-bus-relays.png"


class ServiceBus(_Integration):
    _icon = "service-bus.png"


class ServiceCatalogManagedApplicationDefinitions(_Integration):
    _icon = "service-catalog-managed-application-definitions.png"


class SoftwareAsAService(_Integration):
    _icon = "software-as-a-service.png"


class StorsimpleDeviceManagers(_Integration):
    _icon = "storsimple-device-managers.png"


class SystemTopic(_Integration):
    _icon = "system-topic.png"


# Aliases



File: diagrams/azure/ml.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Ml(_Azure):
    _type = "ml"
    _icon_dir = "resources/azure/ml"


class BatchAI(_Ml):
    _icon = "batch-ai.png"


class BotServices(_Ml):
    _icon = "bot-services.png"


class CognitiveServices(_Ml):
    _icon = "cognitive-services.png"


class GenomicsAccounts(_Ml):
    _icon = "genomics-accounts.png"


class MachineLearningServiceWorkspaces(_Ml):
    _icon = "machine-learning-service-workspaces.png"


class MachineLearningStudioWebServicePlans(_Ml):
    _icon = "machine-learning-studio-web-service-plans.png"


class MachineLearningStudioWebServices(_Ml):
    _icon = "machine-learning-studio-web-services.png"


class MachineLearningStudioWorkspaces(_Ml):
    _icon = "machine-learning-studio-workspaces.png"


# Aliases



File: diagrams/azure/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Storage(_Azure):
    _type = "storage"
    _icon_dir = "resources/azure/storage"


class ArchiveStorage(_Storage):
    _icon = "archive-storage.png"


class Azurefxtedgefiler(_Storage):
    _icon = "azurefxtedgefiler.png"


class BlobStorage(_Storage):
    _icon = "blob-storage.png"


class DataBoxEdgeDataBoxGateway(_Storage):
    _icon = "data-box-edge-data-box-gateway.png"


class DataBox(_Storage):
    _icon = "data-box.png"


class DataLakeStorage(_Storage):
    _icon = "data-lake-storage.png"


class GeneralStorage(_Storage):
    _icon = "general-storage.png"


class NetappFiles(_Storage):
    _icon = "netapp-files.png"


class QueuesStorage(_Storage):
    _icon = "queues-storage.png"


class StorageAccountsClassic(_Storage):
    _icon = "storage-accounts-classic.png"


class StorageAccounts(_Storage):
    _icon = "storage-accounts.png"


class StorageExplorer(_Storage):
    _icon = "storage-explorer.png"


class StorageSyncServices(_Storage):
    _icon = "storage-sync-services.png"


class StorsimpleDataManagers(_Storage):
    _icon = "storsimple-data-managers.png"


class StorsimpleDeviceManagers(_Storage):
    _icon = "storsimple-device-managers.png"


class TableStorage(_Storage):
    _icon = "table-storage.png"


# Aliases



File: diagrams/azure/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Network(_Azure):
    _type = "network"
    _icon_dir = "resources/azure/network"


class ApplicationGateway(_Network):
    _icon = "application-gateway.png"


class ApplicationSecurityGroups(_Network):
    _icon = "application-security-groups.png"


class CDNProfiles(_Network):
    _icon = "cdn-profiles.png"


class Connections(_Network):
    _icon = "connections.png"


class DDOSProtectionPlans(_Network):
    _icon = "ddos-protection-plans.png"


class DNSPrivateZones(_Network):
    _icon = "dns-private-zones.png"


class DNSZones(_Network):
    _icon = "dns-zones.png"


class ExpressrouteCircuits(_Network):
    _icon = "expressroute-circuits.png"


class Firewall(_Network):
    _icon = "firewall.png"


class FrontDoors(_Network):
    _icon = "front-doors.png"


class LoadBalancers(_Network):
    _icon = "load-balancers.png"


class LocalNetworkGateways(_Network):
    _icon = "local-network-gateways.png"


class NetworkInterfaces(_Network):
    _icon = "network-interfaces.png"


class NetworkSecurityGroupsClassic(_Network):
    _icon = "network-security-groups-classic.png"


class NetworkWatcher(_Network):
    _icon = "network-watcher.png"


class OnPremisesDataGateways(_Network):
    _icon = "on-premises-data-gateways.png"


class PrivateEndpoint(_Network):
    _icon = "private-endpoint.png"


class PublicIpAddresses(_Network):
    _icon = "public-ip-addresses.png"


class ReservedIpAddressesClassic(_Network):
    _icon = "reserved-ip-addresses-classic.png"


class RouteFilters(_Network):
    _icon = "route-filters.png"


class RouteTables(_Network):
    _icon = "route-tables.png"


class ServiceEndpointPolicies(_Network):
    _icon = "service-endpoint-policies.png"


class Subnets(_Network):
    _icon = "subnets.png"


class TrafficManagerProfiles(_Network):
    _icon = "traffic-manager-profiles.png"


class VirtualNetworkClassic(_Network):
    _icon = "virtual-network-classic.png"


class VirtualNetworkGateways(_Network):
    _icon = "virtual-network-gateways.png"


class VirtualNetworks(_Network):
    _icon = "virtual-networks.png"


class VirtualWans(_Network):
    _icon = "virtual-wans.png"


# Aliases



File: diagrams/azure/analytics.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Analytics(_Azure):
    _type = "analytics"
    _icon_dir = "resources/azure/analytics"


class AnalysisServices(_Analytics):
    _icon = "analysis-services.png"


class DataExplorerClusters(_Analytics):
    _icon = "data-explorer-clusters.png"


class DataFactories(_Analytics):
    _icon = "data-factories.png"


class DataLakeAnalytics(_Analytics):
    _icon = "data-lake-analytics.png"


class DataLakeStoreGen1(_Analytics):
    _icon = "data-lake-store-gen1.png"


class Databricks(_Analytics):
    _icon = "databricks.png"


class EventHubClusters(_Analytics):
    _icon = "event-hub-clusters.png"


class EventHubs(_Analytics):
    _icon = "event-hubs.png"


class Hdinsightclusters(_Analytics):
    _icon = "hdinsightclusters.png"


class LogAnalyticsWorkspaces(_Analytics):
    _icon = "log-analytics-workspaces.png"


class StreamAnalyticsJobs(_Analytics):
    _icon = "stream-analytics-jobs.png"


class SynapseAnalytics(_Analytics):
    _icon = "synapse-analytics.png"


# Aliases



File: diagrams/azure/migration.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Migration(_Azure):
    _type = "migration"
    _icon_dir = "resources/azure/migration"


class DataBoxEdge(_Migration):
    _icon = "data-box-edge.png"


class DataBox(_Migration):
    _icon = "data-box.png"


class DatabaseMigrationServices(_Migration):
    _icon = "database-migration-services.png"


class MigrationProjects(_Migration):
    _icon = "migration-projects.png"


class RecoveryServicesVaults(_Migration):
    _icon = "recovery-services-vaults.png"


# Aliases



File: diagrams/azure/identity.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Identity(_Azure):
    _type = "identity"
    _icon_dir = "resources/azure/identity"


class AccessReview(_Identity):
    _icon = "access-review.png"


class ActiveDirectoryConnectHealth(_Identity):
    _icon = "active-directory-connect-health.png"


class ActiveDirectory(_Identity):
    _icon = "active-directory.png"


class ADB2C(_Identity):
    _icon = "ad-b2c.png"


class ADDomainServices(_Identity):
    _icon = "ad-domain-services.png"


class ADIdentityProtection(_Identity):
    _icon = "ad-identity-protection.png"


class ADPrivilegedIdentityManagement(_Identity):
    _icon = "ad-privileged-identity-management.png"


class AppRegistrations(_Identity):
    _icon = "app-registrations.png"


class ConditionalAccess(_Identity):
    _icon = "conditional-access.png"


class EnterpriseApplications(_Identity):
    _icon = "enterprise-applications.png"


class Groups(_Identity):
    _icon = "groups.png"


class IdentityGovernance(_Identity):
    _icon = "identity-governance.png"


class InformationProtection(_Identity):
    _icon = "information-protection.png"


class ManagedIdentities(_Identity):
    _icon = "managed-identities.png"


class Users(_Identity):
    _icon = "users.png"


# Aliases



File: diagrams/azure/iot.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Iot(_Azure):
    _type = "iot"
    _icon_dir = "resources/azure/iot"


class DeviceProvisioningServices(_Iot):
    _icon = "device-provisioning-services.png"


class DigitalTwins(_Iot):
    _icon = "digital-twins.png"


class IotCentralApplications(_Iot):
    _icon = "iot-central-applications.png"


class IotHubSecurity(_Iot):
    _icon = "iot-hub-security.png"


class IotHub(_Iot):
    _icon = "iot-hub.png"


class Maps(_Iot):
    _icon = "maps.png"


class Sphere(_Iot):
    _icon = "sphere.png"


class TimeSeriesInsightsEnvironments(_Iot):
    _icon = "time-series-insights-environments.png"


class TimeSeriesInsightsEventsSources(_Iot):
    _icon = "time-series-insights-events-sources.png"


class Windows10IotCoreServices(_Iot):
    _icon = "windows-10-iot-core-services.png"


# Aliases



File: diagrams/azure/general.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _General(_Azure):
    _type = "general"
    _icon_dir = "resources/azure/general"


class Allresources(_General):
    _icon = "allresources.png"


class Azurehome(_General):
    _icon = "azurehome.png"


class Developertools(_General):
    _icon = "developertools.png"


class Helpsupport(_General):
    _icon = "helpsupport.png"


class Information(_General):
    _icon = "information.png"


class Managementgroups(_General):
    _icon = "managementgroups.png"


class Marketplace(_General):
    _icon = "marketplace.png"


class Quickstartcenter(_General):
    _icon = "quickstartcenter.png"


class Recent(_General):
    _icon = "recent.png"


class Reservations(_General):
    _icon = "reservations.png"


class Resource(_General):
    _icon = "resource.png"


class Resourcegroups(_General):
    _icon = "resourcegroups.png"


class Servicehealth(_General):
    _icon = "servicehealth.png"


class Shareddashboard(_General):
    _icon = "shareddashboard.png"


class Subscriptions(_General):
    _icon = "subscriptions.png"


class Support(_General):
    _icon = "support.png"


class Supportrequests(_General):
    _icon = "supportrequests.png"


class Tag(_General):
    _icon = "tag.png"


class Tags(_General):
    _icon = "tags.png"


class Templates(_General):
    _icon = "templates.png"


class Twousericon(_General):
    _icon = "twousericon.png"


class Userhealthicon(_General):
    _icon = "userhealthicon.png"


class Usericon(_General):
    _icon = "usericon.png"


class Userprivacy(_General):
    _icon = "userprivacy.png"


class Userresource(_General):
    _icon = "userresource.png"


class Whatsnew(_General):
    _icon = "whatsnew.png"


# Aliases



File: diagrams/azure/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Azure


class _Compute(_Azure):
    _type = "compute"
    _icon_dir = "resources/azure/compute"


class AppServices(_Compute):
    _icon = "app-services.png"


class AutomanagedVM(_Compute):
    _icon = "automanaged-vm.png"


class AvailabilitySets(_Compute):
    _icon = "availability-sets.png"


class BatchAccounts(_Compute):
    _icon = "batch-accounts.png"


class CitrixVirtualDesktopsEssentials(_Compute):
    _icon = "citrix-virtual-desktops-essentials.png"


class CloudServicesClassic(_Compute):
    _icon = "cloud-services-classic.png"


class CloudServices(_Compute):
    _icon = "cloud-services.png"


class CloudsimpleVirtualMachines(_Compute):
    _icon = "cloudsimple-virtual-machines.png"


class ContainerApps(_Compute):
    _icon = "container-apps.png"


class ContainerInstances(_Compute):
    _icon = "container-instances.png"


class ContainerRegistries(_Compute):
    _icon = "container-registries.png"


class DiskEncryptionSets(_Compute):
    _icon = "disk-encryption-sets.png"


class DiskSnapshots(_Compute):
    _icon = "disk-snapshots.png"


class Disks(_Compute):
    _icon = "disks.png"


class FunctionApps(_Compute):
    _icon = "function-apps.png"


class ImageDefinitions(_Compute):
    _icon = "image-definitions.png"


class ImageVersions(_Compute):
    _icon = "image-versions.png"


class KubernetesServices(_Compute):
    _icon = "kubernetes-services.png"


class MeshApplications(_Compute):
    _icon = "mesh-applications.png"


class OsImages(_Compute):
    _icon = "os-images.png"


class SAPHANAOnAzure(_Compute):
    _icon = "sap-hana-on-azure.png"


class ServiceFabricClusters(_Compute):
    _icon = "service-fabric-clusters.png"


class SharedImageGalleries(_Compute):
    _icon = "shared-image-galleries.png"


class SpringCloud(_Compute):
    _icon = "spring-cloud.png"


class VMClassic(_Compute):
    _icon = "vm-classic.png"


class VMImages(_Compute):
    _icon = "vm-images.png"


class VMLinux(_Compute):
    _icon = "vm-linux.png"


class VMScaleSet(_Compute):
    _icon = "vm-scale-set.png"


class VMWindows(_Compute):
    _icon = "vm-windows.png"


class VM(_Compute):
    _icon = "vm.png"


class Workspaces(_Compute):
    _icon = "workspaces.png"


# Aliases

ACR = ContainerRegistries
AKS = KubernetesServices
VMSS = VMScaleSet



File: diagrams/onprem/queue.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Queue(_OnPrem):
    _type = "queue"
    _icon_dir = "resources/onprem/queue"


class Activemq(_Queue):
    _icon = "activemq.png"


class Celery(_Queue):
    _icon = "celery.png"


class Emqx(_Queue):
    _icon = "emqx.png"


class Kafka(_Queue):
    _icon = "kafka.png"


class Nats(_Queue):
    _icon = "nats.png"


class Rabbitmq(_Queue):
    _icon = "rabbitmq.png"


class Zeromq(_Queue):
    _icon = "zeromq.png"


# Aliases

ActiveMQ = Activemq
EMQX = Emqx
RabbitMQ = Rabbitmq
ZeroMQ = Zeromq



File: diagrams/onprem/auth.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Auth(_OnPrem):
    _type = "auth"
    _icon_dir = "resources/onprem/auth"


class Boundary(_Auth):
    _icon = "boundary.png"


class BuzzfeedSso(_Auth):
    _icon = "buzzfeed-sso.png"


class Oauth2Proxy(_Auth):
    _icon = "oauth2-proxy.png"


# Aliases



File: diagrams/onprem/etl.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Etl(_OnPrem):
    _type = "etl"
    _icon_dir = "resources/onprem/etl"


class Embulk(_Etl):
    _icon = "embulk.png"


# Aliases



File: diagrams/onprem/logging.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Logging(_OnPrem):
    _type = "logging"
    _icon_dir = "resources/onprem/logging"


class Fluentbit(_Logging):
    _icon = "fluentbit.png"


class Graylog(_Logging):
    _icon = "graylog.png"


class Loki(_Logging):
    _icon = "loki.png"


class Rsyslog(_Logging):
    _icon = "rsyslog.png"


class SyslogNg(_Logging):
    _icon = "syslog-ng.png"


# Aliases

FluentBit = Fluentbit
RSyslog = Rsyslog



File: diagrams/onprem/tracing.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Tracing(_OnPrem):
    _type = "tracing"
    _icon_dir = "resources/onprem/tracing"


class Jaeger(_Tracing):
    _icon = "jaeger.png"


class Tempo(_Tracing):
    _icon = "tempo.png"


# Aliases



File: diagrams/onprem/dns.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Dns(_OnPrem):
    _type = "dns"
    _icon_dir = "resources/onprem/dns"


class Coredns(_Dns):
    _icon = "coredns.png"


class Powerdns(_Dns):
    _icon = "powerdns.png"


# Aliases



File: diagrams/onprem/gitops.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Gitops(_OnPrem):
    _type = "gitops"
    _icon_dir = "resources/onprem/gitops"


class Argocd(_Gitops):
    _icon = "argocd.png"


class Flagger(_Gitops):
    _icon = "flagger.png"


class Flux(_Gitops):
    _icon = "flux.png"


# Aliases

ArgoCD = Argocd



File: diagrams/onprem/aggregator.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Aggregator(_OnPrem):
    _type = "aggregator"
    _icon_dir = "resources/onprem/aggregator"


class Fluentd(_Aggregator):
    _icon = "fluentd.png"


class Vector(_Aggregator):
    _icon = "vector.png"


# Aliases



File: diagrams/onprem/registry.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Registry(_OnPrem):
    _type = "registry"
    _icon_dir = "resources/onprem/registry"


class Harbor(_Registry):
    _icon = "harbor.png"


class Jfrog(_Registry):
    _icon = "jfrog.png"


# Aliases



File: diagrams/onprem/ci.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Ci(_OnPrem):
    _type = "ci"
    _icon_dir = "resources/onprem/ci"


class Circleci(_Ci):
    _icon = "circleci.png"


class Concourseci(_Ci):
    _icon = "concourseci.png"


class Droneci(_Ci):
    _icon = "droneci.png"


class GithubActions(_Ci):
    _icon = "github-actions.png"


class Gitlabci(_Ci):
    _icon = "gitlabci.png"


class Jenkins(_Ci):
    _icon = "jenkins.png"


class Teamcity(_Ci):
    _icon = "teamcity.png"


class Travisci(_Ci):
    _icon = "travisci.png"


class Zuulci(_Ci):
    _icon = "zuulci.png"


# Aliases

CircleCI = Circleci
ConcourseCI = Concourseci
DroneCI = Droneci
GitlabCI = Gitlabci
TravisCI = Travisci
TC = Teamcity
ZuulCI = Zuulci



File: diagrams/onprem/monitoring.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Monitoring(_OnPrem):
    _type = "monitoring"
    _icon_dir = "resources/onprem/monitoring"


class Cortex(_Monitoring):
    _icon = "cortex.png"


class Datadog(_Monitoring):
    _icon = "datadog.png"


class Dynatrace(_Monitoring):
    _icon = "dynatrace.png"


class Grafana(_Monitoring):
    _icon = "grafana.png"


class Humio(_Monitoring):
    _icon = "humio.png"


class Mimir(_Monitoring):
    _icon = "mimir.png"


class Nagios(_Monitoring):
    _icon = "nagios.png"


class Newrelic(_Monitoring):
    _icon = "newrelic.png"


class PrometheusOperator(_Monitoring):
    _icon = "prometheus-operator.png"


class Prometheus(_Monitoring):
    _icon = "prometheus.png"


class Sentry(_Monitoring):
    _icon = "sentry.png"


class Splunk(_Monitoring):
    _icon = "splunk.png"


class Thanos(_Monitoring):
    _icon = "thanos.png"


class Zabbix(_Monitoring):
    _icon = "zabbix.png"


# Aliases



File: diagrams/onprem/database.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Database(_OnPrem):
    _type = "database"
    _icon_dir = "resources/onprem/database"


class Cassandra(_Database):
    _icon = "cassandra.png"


class Clickhouse(_Database):
    _icon = "clickhouse.png"


class Cockroachdb(_Database):
    _icon = "cockroachdb.png"


class Couchbase(_Database):
    _icon = "couchbase.png"


class Couchdb(_Database):
    _icon = "couchdb.png"


class Dgraph(_Database):
    _icon = "dgraph.png"


class Druid(_Database):
    _icon = "druid.png"


class Hbase(_Database):
    _icon = "hbase.png"


class Influxdb(_Database):
    _icon = "influxdb.png"


class Janusgraph(_Database):
    _icon = "janusgraph.png"


class Mariadb(_Database):
    _icon = "mariadb.png"


class Mongodb(_Database):
    _icon = "mongodb.png"


class Mssql(_Database):
    _icon = "mssql.png"


class Mysql(_Database):
    _icon = "mysql.png"


class Neo4J(_Database):
    _icon = "neo4j.png"


class Oracle(_Database):
    _icon = "oracle.png"


class Postgresql(_Database):
    _icon = "postgresql.png"


class Scylla(_Database):
    _icon = "scylla.png"


# Aliases

ClickHouse = Clickhouse
CockroachDB = Cockroachdb
CouchDB = Couchdb
HBase = Hbase
InfluxDB = Influxdb
JanusGraph = Janusgraph
MariaDB = Mariadb
MongoDB = Mongodb
MSSQL = Mssql
MySQL = Mysql
PostgreSQL = Postgresql



File: diagrams/onprem/client.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Client(_OnPrem):
    _type = "client"
    _icon_dir = "resources/onprem/client"


class Client(_Client):
    _icon = "client.png"


class User(_Client):
    _icon = "user.png"


class Users(_Client):
    _icon = "users.png"


# Aliases



File: diagrams/onprem/mlops.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Mlops(_OnPrem):
    _type = "mlops"
    _icon_dir = "resources/onprem/mlops"


class Mlflow(_Mlops):
    _icon = "mlflow.png"


class Polyaxon(_Mlops):
    _icon = "polyaxon.png"


# Aliases



File: diagrams/onprem/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Security(_OnPrem):
    _type = "security"
    _icon_dir = "resources/onprem/security"


class Bitwarden(_Security):
    _icon = "bitwarden.png"


class Trivy(_Security):
    _icon = "trivy.png"


class Vault(_Security):
    _icon = "vault.png"


# Aliases



File: diagrams/onprem/iac.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Iac(_OnPrem):
    _type = "iac"
    _icon_dir = "resources/onprem/iac"


class Ansible(_Iac):
    _icon = "ansible.png"


class Atlantis(_Iac):
    _icon = "atlantis.png"


class Awx(_Iac):
    _icon = "awx.png"


class Puppet(_Iac):
    _icon = "puppet.png"


class Terraform(_Iac):
    _icon = "terraform.png"


# Aliases



File: diagrams/onprem/__init__.py

"""
OnPrem provides a set of general on-premise services.
"""

from diagrams import Node


class _OnPrem(Node):
    _provider = "onprem"
    _icon_dir = "resources/onprem"

    fontcolor = "#ffffff"



File: diagrams/onprem/certificates.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Certificates(_OnPrem):
    _type = "certificates"
    _icon_dir = "resources/onprem/certificates"


class CertManager(_Certificates):
    _icon = "cert-manager.png"


class LetsEncrypt(_Certificates):
    _icon = "lets-encrypt.png"


# Aliases



File: diagrams/onprem/inmemory.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Inmemory(_OnPrem):
    _type = "inmemory"
    _icon_dir = "resources/onprem/inmemory"


class Aerospike(_Inmemory):
    _icon = "aerospike.png"


class Hazelcast(_Inmemory):
    _icon = "hazelcast.png"


class Memcached(_Inmemory):
    _icon = "memcached.png"


class Redis(_Inmemory):
    _icon = "redis.png"


# Aliases



File: diagrams/onprem/container.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Container(_OnPrem):
    _type = "container"
    _icon_dir = "resources/onprem/container"


class Containerd(_Container):
    _icon = "containerd.png"


class Crio(_Container):
    _icon = "crio.png"


class Docker(_Container):
    _icon = "docker.png"


class Firecracker(_Container):
    _icon = "firecracker.png"


class Gvisor(_Container):
    _icon = "gvisor.png"


class K3S(_Container):
    _icon = "k3s.png"


class Lxc(_Container):
    _icon = "lxc.png"


class Rkt(_Container):
    _icon = "rkt.png"


# Aliases

LXC = Lxc
RKT = Rkt



File: diagrams/onprem/proxmox.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Proxmox(_OnPrem):
    _type = "proxmox"
    _icon_dir = "resources/onprem/proxmox"


class Pve(_Proxmox):
    _icon = "pve.png"


# Aliases

ProxmoxVE = Pve



File: diagrams/onprem/vcs.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Vcs(_OnPrem):
    _type = "vcs"
    _icon_dir = "resources/onprem/vcs"


class Git(_Vcs):
    _icon = "git.png"


class Gitea(_Vcs):
    _icon = "gitea.png"


class Github(_Vcs):
    _icon = "github.png"


class Gitlab(_Vcs):
    _icon = "gitlab.png"


class Svn(_Vcs):
    _icon = "svn.png"


# Aliases



File: diagrams/onprem/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Storage(_OnPrem):
    _type = "storage"
    _icon_dir = "resources/onprem/storage"


class CephOsd(_Storage):
    _icon = "ceph-osd.png"


class Ceph(_Storage):
    _icon = "ceph.png"


class Glusterfs(_Storage):
    _icon = "glusterfs.png"


class Portworx(_Storage):
    _icon = "portworx.png"


# Aliases

CEPH = Ceph
CEPH_OSD = CephOsd



File: diagrams/onprem/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Network(_OnPrem):
    _type = "network"
    _icon_dir = "resources/onprem/network"


class Ambassador(_Network):
    _icon = "ambassador.png"


class Apache(_Network):
    _icon = "apache.png"


class Bind9(_Network):
    _icon = "bind-9.png"


class Caddy(_Network):
    _icon = "caddy.png"


class Consul(_Network):
    _icon = "consul.png"


class Envoy(_Network):
    _icon = "envoy.png"


class Etcd(_Network):
    _icon = "etcd.png"


class Glassfish(_Network):
    _icon = "glassfish.png"


class Gunicorn(_Network):
    _icon = "gunicorn.png"


class Haproxy(_Network):
    _icon = "haproxy.png"


class Internet(_Network):
    _icon = "internet.png"


class Istio(_Network):
    _icon = "istio.png"


class Jbossas(_Network):
    _icon = "jbossas.png"


class Jetty(_Network):
    _icon = "jetty.png"


class Kong(_Network):
    _icon = "kong.png"


class Linkerd(_Network):
    _icon = "linkerd.png"


class Nginx(_Network):
    _icon = "nginx.png"


class Ocelot(_Network):
    _icon = "ocelot.png"


class OpenServiceMesh(_Network):
    _icon = "open-service-mesh.png"


class Opnsense(_Network):
    _icon = "opnsense.png"


class Pfsense(_Network):
    _icon = "pfsense.png"


class Pomerium(_Network):
    _icon = "pomerium.png"


class Powerdns(_Network):
    _icon = "powerdns.png"


class Tomcat(_Network):
    _icon = "tomcat.png"


class Traefik(_Network):
    _icon = "traefik.png"


class Tyk(_Network):
    _icon = "tyk.png"


class Vyos(_Network):
    _icon = "vyos.png"


class Wildfly(_Network):
    _icon = "wildfly.png"


class Yarp(_Network):
    _icon = "yarp.png"


class Zookeeper(_Network):
    _icon = "zookeeper.png"


# Aliases

ETCD = Etcd
HAProxy = Haproxy
OSM = OpenServiceMesh
OPNSense = Opnsense
PFSense = Pfsense
VyOS = Vyos



File: diagrams/onprem/search.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Search(_OnPrem):
    _type = "search"
    _icon_dir = "resources/onprem/search"


class Solr(_Search):
    _icon = "solr.png"


# Aliases



File: diagrams/onprem/analytics.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Analytics(_OnPrem):
    _type = "analytics"
    _icon_dir = "resources/onprem/analytics"


class Beam(_Analytics):
    _icon = "beam.png"


class Databricks(_Analytics):
    _icon = "databricks.png"


class Dbt(_Analytics):
    _icon = "dbt.png"


class Dremio(_Analytics):
    _icon = "dremio.png"


class Flink(_Analytics):
    _icon = "flink.png"


class Hadoop(_Analytics):
    _icon = "hadoop.png"


class Hive(_Analytics):
    _icon = "hive.png"


class Metabase(_Analytics):
    _icon = "metabase.png"


class Norikra(_Analytics):
    _icon = "norikra.png"


class Powerbi(_Analytics):
    _icon = "powerbi.png"


class Presto(_Analytics):
    _icon = "presto.png"


class Singer(_Analytics):
    _icon = "singer.png"


class Spark(_Analytics):
    _icon = "spark.png"


class Storm(_Analytics):
    _icon = "storm.png"


class Superset(_Analytics):
    _icon = "superset.png"


class Tableau(_Analytics):
    _icon = "tableau.png"


class Trino(_Analytics):
    _icon = "trino.png"


# Aliases

PowerBI = Powerbi



File: diagrams/onprem/groupware.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Groupware(_OnPrem):
    _type = "groupware"
    _icon_dir = "resources/onprem/groupware"


class Nextcloud(_Groupware):
    _icon = "nextcloud.png"


# Aliases



File: diagrams/onprem/workflow.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Workflow(_OnPrem):
    _type = "workflow"
    _icon_dir = "resources/onprem/workflow"


class Airflow(_Workflow):
    _icon = "airflow.png"


class Digdag(_Workflow):
    _icon = "digdag.png"


class Kubeflow(_Workflow):
    _icon = "kubeflow.png"


class Nifi(_Workflow):
    _icon = "nifi.png"


# Aliases

KubeFlow = Kubeflow
NiFi = Nifi



File: diagrams/onprem/identity.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Identity(_OnPrem):
    _type = "identity"
    _icon_dir = "resources/onprem/identity"


class Dex(_Identity):
    _icon = "dex.png"


# Aliases



File: diagrams/onprem/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Compute(_OnPrem):
    _type = "compute"
    _icon_dir = "resources/onprem/compute"


class Nomad(_Compute):
    _icon = "nomad.png"


class Server(_Compute):
    _icon = "server.png"


# Aliases



File: diagrams/onprem/messaging.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Messaging(_OnPrem):
    _type = "messaging"
    _icon_dir = "resources/onprem/messaging"


class Centrifugo(_Messaging):
    _icon = "centrifugo.png"


# Aliases



File: diagrams/onprem/cd.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OnPrem


class _Cd(_OnPrem):
    _type = "cd"
    _icon_dir = "resources/onprem/cd"


class Spinnaker(_Cd):
    _icon = "spinnaker.png"


class TektonCli(_Cd):
    _icon = "tekton-cli.png"


class Tekton(_Cd):
    _icon = "tekton.png"


# Aliases



File: diagrams/k8s/controlplane.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Controlplane(_K8S):
    _type = "controlplane"
    _icon_dir = "resources/k8s/controlplane"


class API(_Controlplane):
    _icon = "api.png"


class CCM(_Controlplane):
    _icon = "c-c-m.png"


class CM(_Controlplane):
    _icon = "c-m.png"


class KProxy(_Controlplane):
    _icon = "k-proxy.png"


class Kubelet(_Controlplane):
    _icon = "kubelet.png"


class Sched(_Controlplane):
    _icon = "sched.png"


# Aliases

APIServer = API
ControllerManager = CM
KubeProxy = KProxy
Scheduler = Sched



File: diagrams/k8s/clusterconfig.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Clusterconfig(_K8S):
    _type = "clusterconfig"
    _icon_dir = "resources/k8s/clusterconfig"


class HPA(_Clusterconfig):
    _icon = "hpa.png"


class Limits(_Clusterconfig):
    _icon = "limits.png"


class Quota(_Clusterconfig):
    _icon = "quota.png"


# Aliases

LimitRange = Limits
HorizontalPodAutoscaler = HPA



File: diagrams/k8s/chaos.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Chaos(_K8S):
    _type = "chaos"
    _icon_dir = "resources/k8s/chaos"


class ChaosMesh(_Chaos):
    _icon = "chaos-mesh.png"


class LitmusChaos(_Chaos):
    _icon = "litmus-chaos.png"


# Aliases



File: diagrams/k8s/rbac.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Rbac(_K8S):
    _type = "rbac"
    _icon_dir = "resources/k8s/rbac"


class CRole(_Rbac):
    _icon = "c-role.png"


class CRB(_Rbac):
    _icon = "crb.png"


class Group(_Rbac):
    _icon = "group.png"


class RB(_Rbac):
    _icon = "rb.png"


class Role(_Rbac):
    _icon = "role.png"


class SA(_Rbac):
    _icon = "sa.png"


class User(_Rbac):
    _icon = "user.png"


# Aliases

ClusterRole = CRole
ClusterRoleBinding = CRB
RoleBinding = RB
ServiceAccount = SA



File: diagrams/k8s/__init__.py

"""
K8S provides a set of services for Kubernetes.
"""

from diagrams import Node


class _K8S(Node):
    _provider = "k8s"
    _icon_dir = "resources/k8s"

    fontcolor = "#2d3436"



File: diagrams/k8s/podconfig.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Podconfig(_K8S):
    _type = "podconfig"
    _icon_dir = "resources/k8s/podconfig"


class CM(_Podconfig):
    _icon = "cm.png"


class Secret(_Podconfig):
    _icon = "secret.png"


# Aliases

ConfigMap = CM



File: diagrams/k8s/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Storage(_K8S):
    _type = "storage"
    _icon_dir = "resources/k8s/storage"


class PV(_Storage):
    _icon = "pv.png"


class PVC(_Storage):
    _icon = "pvc.png"


class SC(_Storage):
    _icon = "sc.png"


class Vol(_Storage):
    _icon = "vol.png"


# Aliases

PersistentVolume = PV
PersistentVolumeClaim = PVC
StorageClass = SC
Volume = Vol



File: diagrams/k8s/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Network(_K8S):
    _type = "network"
    _icon_dir = "resources/k8s/network"


class Ep(_Network):
    _icon = "ep.png"


class Ing(_Network):
    _icon = "ing.png"


class Netpol(_Network):
    _icon = "netpol.png"


class SVC(_Network):
    _icon = "svc.png"


# Aliases

Endpoint = Ep
Ingress = Ing
NetworkPolicy = Netpol
Service = SVC



File: diagrams/k8s/group.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Group(_K8S):
    _type = "group"
    _icon_dir = "resources/k8s/group"


class NS(_Group):
    _icon = "ns.png"


# Aliases

Namespace = NS



File: diagrams/k8s/infra.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Infra(_K8S):
    _type = "infra"
    _icon_dir = "resources/k8s/infra"


class ETCD(_Infra):
    _icon = "etcd.png"


class Master(_Infra):
    _icon = "master.png"


class Node(_Infra):
    _icon = "node.png"


# Aliases



File: diagrams/k8s/others.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Others(_K8S):
    _type = "others"
    _icon_dir = "resources/k8s/others"


class CRD(_Others):
    _icon = "crd.png"


class PSP(_Others):
    _icon = "psp.png"


# Aliases



File: diagrams/k8s/ecosystem.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Ecosystem(_K8S):
    _type = "ecosystem"
    _icon_dir = "resources/k8s/ecosystem"


class ExternalDns(_Ecosystem):
    _icon = "external-dns.png"


class Helm(_Ecosystem):
    _icon = "helm.png"


class Krew(_Ecosystem):
    _icon = "krew.png"


class Kustomize(_Ecosystem):
    _icon = "kustomize.png"


# Aliases



File: diagrams/k8s/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _K8S


class _Compute(_K8S):
    _type = "compute"
    _icon_dir = "resources/k8s/compute"


class Cronjob(_Compute):
    _icon = "cronjob.png"


class Deploy(_Compute):
    _icon = "deploy.png"


class DS(_Compute):
    _icon = "ds.png"


class Job(_Compute):
    _icon = "job.png"


class Pod(_Compute):
    _icon = "pod.png"


class RS(_Compute):
    _icon = "rs.png"


class STS(_Compute):
    _icon = "sts.png"


# Aliases

Deployment = Deploy
DaemonSet = DS
ReplicaSet = RS
StatefulSet = STS



File: diagrams/digitalocean/database.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _DigitalOcean


class _Database(_DigitalOcean):
    _type = "database"
    _icon_dir = "resources/digitalocean/database"


class DbaasPrimaryStandbyMore(_Database):
    _icon = "dbaas-primary-standby-more.png"


class DbaasPrimary(_Database):
    _icon = "dbaas-primary.png"


class DbaasReadOnly(_Database):
    _icon = "dbaas-read-only.png"


class DbaasStandby(_Database):
    _icon = "dbaas-standby.png"


# Aliases



File: diagrams/digitalocean/__init__.py

"""
DigitalOcean provides a set of services for DigitalOcean provider.
"""

from diagrams import Node


class _DigitalOcean(Node):
    _provider = "digitalocean"
    _icon_dir = "resources/digitalocean"

    fontcolor = "#ffffff"



File: diagrams/digitalocean/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _DigitalOcean


class _Storage(_DigitalOcean):
    _type = "storage"
    _icon_dir = "resources/digitalocean/storage"


class Folder(_Storage):
    _icon = "folder.png"


class Space(_Storage):
    _icon = "space.png"


class VolumeSnapshot(_Storage):
    _icon = "volume-snapshot.png"


class Volume(_Storage):
    _icon = "volume.png"


# Aliases



File: diagrams/digitalocean/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _DigitalOcean


class _Network(_DigitalOcean):
    _type = "network"
    _icon_dir = "resources/digitalocean/network"


class Certificate(_Network):
    _icon = "certificate.png"


class DomainRegistration(_Network):
    _icon = "domain-registration.png"


class Domain(_Network):
    _icon = "domain.png"


class Firewall(_Network):
    _icon = "firewall.png"


class FloatingIp(_Network):
    _icon = "floating-ip.png"


class InternetGateway(_Network):
    _icon = "internet-gateway.png"


class LoadBalancer(_Network):
    _icon = "load-balancer.png"


class ManagedVpn(_Network):
    _icon = "managed-vpn.png"


class Vpc(_Network):
    _icon = "vpc.png"


# Aliases



File: diagrams/digitalocean/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _DigitalOcean


class _Compute(_DigitalOcean):
    _type = "compute"
    _icon_dir = "resources/digitalocean/compute"


class Containers(_Compute):
    _icon = "containers.png"


class Docker(_Compute):
    _icon = "docker.png"


class DropletConnect(_Compute):
    _icon = "droplet-connect.png"


class DropletSnapshot(_Compute):
    _icon = "droplet-snapshot.png"


class Droplet(_Compute):
    _icon = "droplet.png"


class K8SCluster(_Compute):
    _icon = "k8s-cluster.png"


class K8SNodePool(_Compute):
    _icon = "k8s-node-pool.png"


class K8SNode(_Compute):
    _icon = "k8s-node.png"


# Aliases



File: diagrams/oci/connectivity.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Connectivity(_OCI):
    _type = "connectivity"
    _icon_dir = "resources/oci/connectivity"


class BackboneWhite(_Connectivity):
    _icon = "backbone-white.png"


class Backbone(_Connectivity):
    _icon = "backbone.png"


class CDNWhite(_Connectivity):
    _icon = "cdn-white.png"


class CDN(_Connectivity):
    _icon = "cdn.png"


class CustomerDatacenter(_Connectivity):
    _icon = "customer-datacenter.png"


class CustomerDatacntrWhite(_Connectivity):
    _icon = "customer-datacntr-white.png"


class CustomerPremiseWhite(_Connectivity):
    _icon = "customer-premise-white.png"


class CustomerPremise(_Connectivity):
    _icon = "customer-premise.png"


class DisconnectedRegionsWhite(_Connectivity):
    _icon = "disconnected-regions-white.png"


class DisconnectedRegions(_Connectivity):
    _icon = "disconnected-regions.png"


class DNSWhite(_Connectivity):
    _icon = "dns-white.png"


class DNS(_Connectivity):
    _icon = "dns.png"


class FastConnectWhite(_Connectivity):
    _icon = "fast-connect-white.png"


class FastConnect(_Connectivity):
    _icon = "fast-connect.png"


class NATGatewayWhite(_Connectivity):
    _icon = "nat-gateway-white.png"


class NATGateway(_Connectivity):
    _icon = "nat-gateway.png"


class VPNWhite(_Connectivity):
    _icon = "vpn-white.png"


class VPN(_Connectivity):
    _icon = "vpn.png"


# Aliases



File: diagrams/oci/monitoring.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Monitoring(_OCI):
    _type = "monitoring"
    _icon_dir = "resources/oci/monitoring"


class AlarmWhite(_Monitoring):
    _icon = "alarm-white.png"


class Alarm(_Monitoring):
    _icon = "alarm.png"


class EmailWhite(_Monitoring):
    _icon = "email-white.png"


class Email(_Monitoring):
    _icon = "email.png"


class EventsWhite(_Monitoring):
    _icon = "events-white.png"


class Events(_Monitoring):
    _icon = "events.png"


class HealthCheckWhite(_Monitoring):
    _icon = "health-check-white.png"


class HealthCheck(_Monitoring):
    _icon = "health-check.png"


class NotificationsWhite(_Monitoring):
    _icon = "notifications-white.png"


class Notifications(_Monitoring):
    _icon = "notifications.png"


class QueueWhite(_Monitoring):
    _icon = "queue-white.png"


class Queue(_Monitoring):
    _icon = "queue.png"


class SearchWhite(_Monitoring):
    _icon = "search-white.png"


class Search(_Monitoring):
    _icon = "search.png"


class TelemetryWhite(_Monitoring):
    _icon = "telemetry-white.png"


class Telemetry(_Monitoring):
    _icon = "telemetry.png"


class WorkflowWhite(_Monitoring):
    _icon = "workflow-white.png"


class Workflow(_Monitoring):
    _icon = "workflow.png"


# Aliases



File: diagrams/oci/database.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Database(_OCI):
    _type = "database"
    _icon_dir = "resources/oci/database"


class AutonomousWhite(_Database):
    _icon = "autonomous-white.png"


class Autonomous(_Database):
    _icon = "autonomous.png"


class BigdataServiceWhite(_Database):
    _icon = "bigdata-service-white.png"


class BigdataService(_Database):
    _icon = "bigdata-service.png"


class DatabaseServiceWhite(_Database):
    _icon = "database-service-white.png"


class DatabaseService(_Database):
    _icon = "database-service.png"


class DataflowApacheWhite(_Database):
    _icon = "dataflow-apache-white.png"


class DataflowApache(_Database):
    _icon = "dataflow-apache.png"


class DcatWhite(_Database):
    _icon = "dcat-white.png"


class Dcat(_Database):
    _icon = "dcat.png"


class DisWhite(_Database):
    _icon = "dis-white.png"


class Dis(_Database):
    _icon = "dis.png"


class DMSWhite(_Database):
    _icon = "dms-white.png"


class DMS(_Database):
    _icon = "dms.png"


class ScienceWhite(_Database):
    _icon = "science-white.png"


class Science(_Database):
    _icon = "science.png"


class StreamWhite(_Database):
    _icon = "stream-white.png"


class Stream(_Database):
    _icon = "stream.png"


# Aliases

ADB = Autonomous
ADBWhite = AutonomousWhite
DBService = DatabaseService
DBServiceWhite = DatabaseServiceWhite



File: diagrams/oci/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Security(_OCI):
    _type = "security"
    _icon_dir = "resources/oci/security"


class CloudGuardWhite(_Security):
    _icon = "cloud-guard-white.png"


class CloudGuard(_Security):
    _icon = "cloud-guard.png"


class DDOSWhite(_Security):
    _icon = "ddos-white.png"


class DDOS(_Security):
    _icon = "ddos.png"


class EncryptionWhite(_Security):
    _icon = "encryption-white.png"


class Encryption(_Security):
    _icon = "encryption.png"


class IDAccessWhite(_Security):
    _icon = "id-access-white.png"


class IDAccess(_Security):
    _icon = "id-access.png"


class KeyManagementWhite(_Security):
    _icon = "key-management-white.png"


class KeyManagement(_Security):
    _icon = "key-management.png"


class MaxSecurityZoneWhite(_Security):
    _icon = "max-security-zone-white.png"


class MaxSecurityZone(_Security):
    _icon = "max-security-zone.png"


class VaultWhite(_Security):
    _icon = "vault-white.png"


class Vault(_Security):
    _icon = "vault.png"


class WAFWhite(_Security):
    _icon = "waf-white.png"


class WAF(_Security):
    _icon = "waf.png"


# Aliases



File: diagrams/oci/__init__.py

"""
OCI provides a set of services for Oracle Cloud Infrastructure provider.
"""

from diagrams import Node


class _OCI(Node):
    _provider = "oci"
    _icon_dir = "resources/oci"

    fontcolor = "#312D2A"



File: diagrams/oci/devops.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Devops(_OCI):
    _type = "devops"
    _icon_dir = "resources/oci/devops"


class APIGatewayWhite(_Devops):
    _icon = "api-gateway-white.png"


class APIGateway(_Devops):
    _icon = "api-gateway.png"


class APIServiceWhite(_Devops):
    _icon = "api-service-white.png"


class APIService(_Devops):
    _icon = "api-service.png"


class ResourceMgmtWhite(_Devops):
    _icon = "resource-mgmt-white.png"


class ResourceMgmt(_Devops):
    _icon = "resource-mgmt.png"


# Aliases



File: diagrams/oci/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Storage(_OCI):
    _type = "storage"
    _icon_dir = "resources/oci/storage"


class BackupRestoreWhite(_Storage):
    _icon = "backup-restore-white.png"


class BackupRestore(_Storage):
    _icon = "backup-restore.png"


class BlockStorageCloneWhite(_Storage):
    _icon = "block-storage-clone-white.png"


class BlockStorageClone(_Storage):
    _icon = "block-storage-clone.png"


class BlockStorageWhite(_Storage):
    _icon = "block-storage-white.png"


class BlockStorage(_Storage):
    _icon = "block-storage.png"


class BucketsWhite(_Storage):
    _icon = "buckets-white.png"


class Buckets(_Storage):
    _icon = "buckets.png"


class DataTransferWhite(_Storage):
    _icon = "data-transfer-white.png"


class DataTransfer(_Storage):
    _icon = "data-transfer.png"


class ElasticPerformanceWhite(_Storage):
    _icon = "elastic-performance-white.png"


class ElasticPerformance(_Storage):
    _icon = "elastic-performance.png"


class FileStorageWhite(_Storage):
    _icon = "file-storage-white.png"


class FileStorage(_Storage):
    _icon = "file-storage.png"


class ObjectStorageWhite(_Storage):
    _icon = "object-storage-white.png"


class ObjectStorage(_Storage):
    _icon = "object-storage.png"


class StorageGatewayWhite(_Storage):
    _icon = "storage-gateway-white.png"


class StorageGateway(_Storage):
    _icon = "storage-gateway.png"


# Aliases



File: diagrams/oci/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Network(_OCI):
    _type = "network"
    _icon_dir = "resources/oci/network"


class DrgWhite(_Network):
    _icon = "drg-white.png"


class Drg(_Network):
    _icon = "drg.png"


class FirewallWhite(_Network):
    _icon = "firewall-white.png"


class Firewall(_Network):
    _icon = "firewall.png"


class InternetGatewayWhite(_Network):
    _icon = "internet-gateway-white.png"


class InternetGateway(_Network):
    _icon = "internet-gateway.png"


class LoadBalancerWhite(_Network):
    _icon = "load-balancer-white.png"


class LoadBalancer(_Network):
    _icon = "load-balancer.png"


class RouteTableWhite(_Network):
    _icon = "route-table-white.png"


class RouteTable(_Network):
    _icon = "route-table.png"


class SecurityListsWhite(_Network):
    _icon = "security-lists-white.png"


class SecurityLists(_Network):
    _icon = "security-lists.png"


class ServiceGatewayWhite(_Network):
    _icon = "service-gateway-white.png"


class ServiceGateway(_Network):
    _icon = "service-gateway.png"


class VcnWhite(_Network):
    _icon = "vcn-white.png"


class Vcn(_Network):
    _icon = "vcn.png"


# Aliases



File: diagrams/oci/governance.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Governance(_OCI):
    _type = "governance"
    _icon_dir = "resources/oci/governance"


class AuditWhite(_Governance):
    _icon = "audit-white.png"


class Audit(_Governance):
    _icon = "audit.png"


class CompartmentsWhite(_Governance):
    _icon = "compartments-white.png"


class Compartments(_Governance):
    _icon = "compartments.png"


class GroupsWhite(_Governance):
    _icon = "groups-white.png"


class Groups(_Governance):
    _icon = "groups.png"


class LoggingWhite(_Governance):
    _icon = "logging-white.png"


class Logging(_Governance):
    _icon = "logging.png"


class OCIDWhite(_Governance):
    _icon = "ocid-white.png"


class OCID(_Governance):
    _icon = "ocid.png"


class PoliciesWhite(_Governance):
    _icon = "policies-white.png"


class Policies(_Governance):
    _icon = "policies.png"


class TaggingWhite(_Governance):
    _icon = "tagging-white.png"


class Tagging(_Governance):
    _icon = "tagging.png"


# Aliases



File: diagrams/oci/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _OCI


class _Compute(_OCI):
    _type = "compute"
    _icon_dir = "resources/oci/compute"


class AutoscaleWhite(_Compute):
    _icon = "autoscale-white.png"


class Autoscale(_Compute):
    _icon = "autoscale.png"


class BMWhite(_Compute):
    _icon = "bm-white.png"


class BM(_Compute):
    _icon = "bm.png"


class ContainerWhite(_Compute):
    _icon = "container-white.png"


class Container(_Compute):
    _icon = "container.png"


class FunctionsWhite(_Compute):
    _icon = "functions-white.png"


class Functions(_Compute):
    _icon = "functions.png"


class InstancePoolsWhite(_Compute):
    _icon = "instance-pools-white.png"


class InstancePools(_Compute):
    _icon = "instance-pools.png"


class OCIRWhite(_Compute):
    _icon = "ocir-white.png"


class OCIR(_Compute):
    _icon = "ocir.png"


class OKEWhite(_Compute):
    _icon = "oke-white.png"


class OKE(_Compute):
    _icon = "oke.png"


class VMWhite(_Compute):
    _icon = "vm-white.png"


class VM(_Compute):
    _icon = "vm.png"


# Aliases

VirtualMachine = VM
VirtualMachineWhite = VMWhite
BareMetal = BM
BareMetalWhite = BMWhite
OCIRegistry = OCIR
OCIRegistryWhite = OCIRWhite
ContainerEngine = OKE
ContainerEngineWhite = OKEWhite



File: diagrams/gcp/database.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Database(_GCP):
    _type = "database"
    _icon_dir = "resources/gcp/database"


class Bigtable(_Database):
    _icon = "bigtable.png"


class Datastore(_Database):
    _icon = "datastore.png"


class Firestore(_Database):
    _icon = "firestore.png"


class Memorystore(_Database):
    _icon = "memorystore.png"


class Spanner(_Database):
    _icon = "spanner.png"


class SQL(_Database):
    _icon = "sql.png"


# Aliases

BigTable = Bigtable



File: diagrams/gcp/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Security(_GCP):
    _type = "security"
    _icon_dir = "resources/gcp/security"


class Iam(_Security):
    _icon = "iam.png"


class IAP(_Security):
    _icon = "iap.png"


class KeyManagementService(_Security):
    _icon = "key-management-service.png"


class ResourceManager(_Security):
    _icon = "resource-manager.png"


class SecurityCommandCenter(_Security):
    _icon = "security-command-center.png"


class SecurityScanner(_Security):
    _icon = "security-scanner.png"


# Aliases

KMS = KeyManagementService
SCC = SecurityCommandCenter



File: diagrams/gcp/__init__.py

"""
GCP provides a set of services for Google Cloud Platform provider.
"""

from diagrams import Node


class _GCP(Node):
    _provider = "gcp"
    _icon_dir = "resources/gcp"

    fontcolor = "#2d3436"



File: diagrams/gcp/ml.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _ML(_GCP):
    _type = "ml"
    _icon_dir = "resources/gcp/ml"


class AdvancedSolutionsLab(_ML):
    _icon = "advanced-solutions-lab.png"


class AIHub(_ML):
    _icon = "ai-hub.png"


class AIPlatformDataLabelingService(_ML):
    _icon = "ai-platform-data-labeling-service.png"


class AIPlatform(_ML):
    _icon = "ai-platform.png"


class AutomlNaturalLanguage(_ML):
    _icon = "automl-natural-language.png"


class AutomlTables(_ML):
    _icon = "automl-tables.png"


class AutomlTranslation(_ML):
    _icon = "automl-translation.png"


class AutomlVideoIntelligence(_ML):
    _icon = "automl-video-intelligence.png"


class AutomlVision(_ML):
    _icon = "automl-vision.png"


class Automl(_ML):
    _icon = "automl.png"


class DialogFlowEnterpriseEdition(_ML):
    _icon = "dialog-flow-enterprise-edition.png"


class InferenceAPI(_ML):
    _icon = "inference-api.png"


class JobsAPI(_ML):
    _icon = "jobs-api.png"


class NaturalLanguageAPI(_ML):
    _icon = "natural-language-api.png"


class RecommendationsAI(_ML):
    _icon = "recommendations-ai.png"


class SpeechToText(_ML):
    _icon = "speech-to-text.png"


class TextToSpeech(_ML):
    _icon = "text-to-speech.png"


class TPU(_ML):
    _icon = "tpu.png"


class TranslationAPI(_ML):
    _icon = "translation-api.png"


class VideoIntelligenceAPI(_ML):
    _icon = "video-intelligence-api.png"


class VisionAPI(_ML):
    _icon = "vision-api.png"


# Aliases

AutoML = Automl
NLAPI = NaturalLanguageAPI
STT = SpeechToText
TTS = TextToSpeech



File: diagrams/gcp/api.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _API(_GCP):
    _type = "api"
    _icon_dir = "resources/gcp/api"


class APIGateway(_API):
    _icon = "api-gateway.png"


class Apigee(_API):
    _icon = "apigee.png"


class Endpoints(_API):
    _icon = "endpoints.png"


# Aliases



File: diagrams/gcp/operations.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Operations(_GCP):
    _type = "operations"
    _icon_dir = "resources/gcp/operations"


class Logging(_Operations):
    _icon = "logging.png"


class Monitoring(_Operations):
    _icon = "monitoring.png"


# Aliases



File: diagrams/gcp/devtools.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Devtools(_GCP):
    _type = "devtools"
    _icon_dir = "resources/gcp/devtools"


class Build(_Devtools):
    _icon = "build.png"


class CodeForIntellij(_Devtools):
    _icon = "code-for-intellij.png"


class Code(_Devtools):
    _icon = "code.png"


class ContainerRegistry(_Devtools):
    _icon = "container-registry.png"


class GradleAppEnginePlugin(_Devtools):
    _icon = "gradle-app-engine-plugin.png"


class IdePlugins(_Devtools):
    _icon = "ide-plugins.png"


class MavenAppEnginePlugin(_Devtools):
    _icon = "maven-app-engine-plugin.png"


class Scheduler(_Devtools):
    _icon = "scheduler.png"


class SDK(_Devtools):
    _icon = "sdk.png"


class SourceRepositories(_Devtools):
    _icon = "source-repositories.png"


class Tasks(_Devtools):
    _icon = "tasks.png"


class TestLab(_Devtools):
    _icon = "test-lab.png"


class ToolsForEclipse(_Devtools):
    _icon = "tools-for-eclipse.png"


class ToolsForPowershell(_Devtools):
    _icon = "tools-for-powershell.png"


class ToolsForVisualStudio(_Devtools):
    _icon = "tools-for-visual-studio.png"


# Aliases

GCR = ContainerRegistry



File: diagrams/gcp/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Storage(_GCP):
    _type = "storage"
    _icon_dir = "resources/gcp/storage"


class Filestore(_Storage):
    _icon = "filestore.png"


class PersistentDisk(_Storage):
    _icon = "persistent-disk.png"


class Storage(_Storage):
    _icon = "storage.png"


# Aliases

GCS = Storage



File: diagrams/gcp/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Network(_GCP):
    _type = "network"
    _icon_dir = "resources/gcp/network"


class Armor(_Network):
    _icon = "armor.png"


class CDN(_Network):
    _icon = "cdn.png"


class DedicatedInterconnect(_Network):
    _icon = "dedicated-interconnect.png"


class DNS(_Network):
    _icon = "dns.png"


class ExternalIpAddresses(_Network):
    _icon = "external-ip-addresses.png"


class FirewallRules(_Network):
    _icon = "firewall-rules.png"


class LoadBalancing(_Network):
    _icon = "load-balancing.png"


class NAT(_Network):
    _icon = "nat.png"


class Network(_Network):
    _icon = "network.png"


class PartnerInterconnect(_Network):
    _icon = "partner-interconnect.png"


class PremiumNetworkTier(_Network):
    _icon = "premium-network-tier.png"


class Router(_Network):
    _icon = "router.png"


class Routes(_Network):
    _icon = "routes.png"


class StandardNetworkTier(_Network):
    _icon = "standard-network-tier.png"


class TrafficDirector(_Network):
    _icon = "traffic-director.png"


class VirtualPrivateCloud(_Network):
    _icon = "virtual-private-cloud.png"


class VPN(_Network):
    _icon = "vpn.png"


# Aliases

VPC = VirtualPrivateCloud



File: diagrams/gcp/analytics.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Analytics(_GCP):
    _type = "analytics"
    _icon_dir = "resources/gcp/analytics"


class Bigquery(_Analytics):
    _icon = "bigquery.png"


class Composer(_Analytics):
    _icon = "composer.png"


class DataCatalog(_Analytics):
    _icon = "data-catalog.png"


class DataFusion(_Analytics):
    _icon = "data-fusion.png"


class Dataflow(_Analytics):
    _icon = "dataflow.png"


class Datalab(_Analytics):
    _icon = "datalab.png"


class Dataprep(_Analytics):
    _icon = "dataprep.png"


class Dataproc(_Analytics):
    _icon = "dataproc.png"


class Genomics(_Analytics):
    _icon = "genomics.png"


class Pubsub(_Analytics):
    _icon = "pubsub.png"


# Aliases

BigQuery = Bigquery
PubSub = Pubsub



File: diagrams/gcp/migration.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Migration(_GCP):
    _type = "migration"
    _icon_dir = "resources/gcp/migration"


class TransferAppliance(_Migration):
    _icon = "transfer-appliance.png"


# Aliases



File: diagrams/gcp/iot.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Iot(_GCP):
    _type = "iot"
    _icon_dir = "resources/gcp/iot"


class IotCore(_Iot):
    _icon = "iot-core.png"


# Aliases



File: diagrams/gcp/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _GCP


class _Compute(_GCP):
    _type = "compute"
    _icon_dir = "resources/gcp/compute"


class AppEngine(_Compute):
    _icon = "app-engine.png"


class ComputeEngine(_Compute):
    _icon = "compute-engine.png"


class ContainerOptimizedOS(_Compute):
    _icon = "container-optimized-os.png"


class Functions(_Compute):
    _icon = "functions.png"


class GKEOnPrem(_Compute):
    _icon = "gke-on-prem.png"


class GPU(_Compute):
    _icon = "gpu.png"


class KubernetesEngine(_Compute):
    _icon = "kubernetes-engine.png"


class Run(_Compute):
    _icon = "run.png"


# Aliases

GAE = AppEngine
GCF = Functions
GCE = ComputeEngine
GKE = KubernetesEngine



File: diagrams/alibabacloud/web.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Web(_AlibabaCloud):
    _type = "web"
    _icon_dir = "resources/alibabacloud/web"


class Dns(_Web):
    _icon = "dns.png"


class Domain(_Web):
    _icon = "domain.png"


# Aliases



File: diagrams/alibabacloud/database.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Database(_AlibabaCloud):
    _type = "database"
    _icon_dir = "resources/alibabacloud/database"


class ApsaradbCassandra(_Database):
    _icon = "apsaradb-cassandra.png"


class ApsaradbHbase(_Database):
    _icon = "apsaradb-hbase.png"


class ApsaradbMemcache(_Database):
    _icon = "apsaradb-memcache.png"


class ApsaradbMongodb(_Database):
    _icon = "apsaradb-mongodb.png"


class ApsaradbOceanbase(_Database):
    _icon = "apsaradb-oceanbase.png"


class ApsaradbPolardb(_Database):
    _icon = "apsaradb-polardb.png"


class ApsaradbPostgresql(_Database):
    _icon = "apsaradb-postgresql.png"


class ApsaradbPpas(_Database):
    _icon = "apsaradb-ppas.png"


class ApsaradbRedis(_Database):
    _icon = "apsaradb-redis.png"


class ApsaradbSqlserver(_Database):
    _icon = "apsaradb-sqlserver.png"


class DataManagementService(_Database):
    _icon = "data-management-service.png"


class DataTransmissionService(_Database):
    _icon = "data-transmission-service.png"


class DatabaseBackupService(_Database):
    _icon = "database-backup-service.png"


class DisributeRelationalDatabaseService(_Database):
    _icon = "disribute-relational-database-service.png"


class GraphDatabaseService(_Database):
    _icon = "graph-database-service.png"


class HybriddbForMysql(_Database):
    _icon = "hybriddb-for-mysql.png"


class RelationalDatabaseService(_Database):
    _icon = "relational-database-service.png"


# Aliases

DMS = DataManagementService
DTS = DataTransmissionService
DBS = DatabaseBackupService
DRDS = DisributeRelationalDatabaseService
GDS = GraphDatabaseService
RDS = RelationalDatabaseService



File: diagrams/alibabacloud/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Security(_AlibabaCloud):
    _type = "security"
    _icon_dir = "resources/alibabacloud/security"


class AntiBotService(_Security):
    _icon = "anti-bot-service.png"


class AntiDdosBasic(_Security):
    _icon = "anti-ddos-basic.png"


class AntiDdosPro(_Security):
    _icon = "anti-ddos-pro.png"


class AntifraudService(_Security):
    _icon = "antifraud-service.png"


class BastionHost(_Security):
    _icon = "bastion-host.png"


class CloudFirewall(_Security):
    _icon = "cloud-firewall.png"


class CloudSecurityScanner(_Security):
    _icon = "cloud-security-scanner.png"


class ContentModeration(_Security):
    _icon = "content-moderation.png"


class CrowdsourcedSecurityTesting(_Security):
    _icon = "crowdsourced-security-testing.png"


class DataEncryptionService(_Security):
    _icon = "data-encryption-service.png"


class DbAudit(_Security):
    _icon = "db-audit.png"


class GameShield(_Security):
    _icon = "game-shield.png"


class IdVerification(_Security):
    _icon = "id-verification.png"


class ManagedSecurityService(_Security):
    _icon = "managed-security-service.png"


class SecurityCenter(_Security):
    _icon = "security-center.png"


class ServerGuard(_Security):
    _icon = "server-guard.png"


class SslCertificates(_Security):
    _icon = "ssl-certificates.png"


class WebApplicationFirewall(_Security):
    _icon = "web-application-firewall.png"


# Aliases

ABS = AntiBotService
AS = AntifraudService
CFW = CloudFirewall
CM = ContentModeration
DES = DataEncryptionService
WAF = WebApplicationFirewall



File: diagrams/alibabacloud/__init__.py

"""
AlibabaCloud provides a set of services for Alibaba Cloud provider.
"""

from diagrams import Node


class _AlibabaCloud(Node):
    _provider = "alibabacloud"
    _icon_dir = "resources/alibabacloud"

    fontcolor = "#ffffff"



File: diagrams/alibabacloud/application.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Application(_AlibabaCloud):
    _type = "application"
    _icon_dir = "resources/alibabacloud/application"


class ApiGateway(_Application):
    _icon = "api-gateway.png"


class BeeBot(_Application):
    _icon = "bee-bot.png"


class BlockchainAsAService(_Application):
    _icon = "blockchain-as-a-service.png"


class CloudCallCenter(_Application):
    _icon = "cloud-call-center.png"


class CodePipeline(_Application):
    _icon = "code-pipeline.png"


class DirectMail(_Application):
    _icon = "direct-mail.png"


class LogService(_Application):
    _icon = "log-service.png"


class MessageNotificationService(_Application):
    _icon = "message-notification-service.png"


class NodeJsPerformancePlatform(_Application):
    _icon = "node-js-performance-platform.png"


class OpenSearch(_Application):
    _icon = "open-search.png"


class PerformanceTestingService(_Application):
    _icon = "performance-testing-service.png"


class RdCloud(_Application):
    _icon = "rd-cloud.png"


class SmartConversationAnalysis(_Application):
    _icon = "smart-conversation-analysis.png"


class Yida(_Application):
    _icon = "yida.png"


# Aliases

SLS = LogService
MNS = MessageNotificationService
PTS = PerformanceTestingService
SCA = SmartConversationAnalysis



File: diagrams/alibabacloud/communication.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Communication(_AlibabaCloud):
    _type = "communication"
    _icon_dir = "resources/alibabacloud/communication"


class DirectMail(_Communication):
    _icon = "direct-mail.png"


class MobilePush(_Communication):
    _icon = "mobile-push.png"


# Aliases



File: diagrams/alibabacloud/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Storage(_AlibabaCloud):
    _type = "storage"
    _icon_dir = "resources/alibabacloud/storage"


class CloudStorageGateway(_Storage):
    _icon = "cloud-storage-gateway.png"


class FileStorageHdfs(_Storage):
    _icon = "file-storage-hdfs.png"


class FileStorageNas(_Storage):
    _icon = "file-storage-nas.png"


class HybridBackupRecovery(_Storage):
    _icon = "hybrid-backup-recovery.png"


class HybridCloudDisasterRecovery(_Storage):
    _icon = "hybrid-cloud-disaster-recovery.png"


class Imm(_Storage):
    _icon = "imm.png"


class ObjectStorageService(_Storage):
    _icon = "object-storage-service.png"


class ObjectTableStore(_Storage):
    _icon = "object-table-store.png"


# Aliases

HDFS = FileStorageHdfs
NAS = FileStorageNas
HBR = HybridBackupRecovery
HDR = HybridCloudDisasterRecovery
OSS = ObjectStorageService
OTS = ObjectTableStore



File: diagrams/alibabacloud/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Network(_AlibabaCloud):
    _type = "network"
    _icon_dir = "resources/alibabacloud/network"


class Cdn(_Network):
    _icon = "cdn.png"


class CloudEnterpriseNetwork(_Network):
    _icon = "cloud-enterprise-network.png"


class ElasticIpAddress(_Network):
    _icon = "elastic-ip-address.png"


class ExpressConnect(_Network):
    _icon = "express-connect.png"


class NatGateway(_Network):
    _icon = "nat-gateway.png"


class ServerLoadBalancer(_Network):
    _icon = "server-load-balancer.png"


class SmartAccessGateway(_Network):
    _icon = "smart-access-gateway.png"


class VirtualPrivateCloud(_Network):
    _icon = "virtual-private-cloud.png"


class VpnGateway(_Network):
    _icon = "vpn-gateway.png"


# Aliases

CEN = CloudEnterpriseNetwork
EIP = ElasticIpAddress
SLB = ServerLoadBalancer
VPC = VirtualPrivateCloud



File: diagrams/alibabacloud/analytics.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Analytics(_AlibabaCloud):
    _type = "analytics"
    _icon_dir = "resources/alibabacloud/analytics"


class AnalyticDb(_Analytics):
    _icon = "analytic-db.png"


class ClickHouse(_Analytics):
    _icon = "click-house.png"


class DataLakeAnalytics(_Analytics):
    _icon = "data-lake-analytics.png"


class ElaticMapReduce(_Analytics):
    _icon = "elatic-map-reduce.png"


class OpenSearch(_Analytics):
    _icon = "open-search.png"


# Aliases



File: diagrams/alibabacloud/iot.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Iot(_AlibabaCloud):
    _type = "iot"
    _icon_dir = "resources/alibabacloud/iot"


class IotInternetDeviceId(_Iot):
    _icon = "iot-internet-device-id.png"


class IotLinkWan(_Iot):
    _icon = "iot-link-wan.png"


class IotMobileConnectionPackage(_Iot):
    _icon = "iot-mobile-connection-package.png"


class IotPlatform(_Iot):
    _icon = "iot-platform.png"


# Aliases



File: diagrams/alibabacloud/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AlibabaCloud


class _Compute(_AlibabaCloud):
    _type = "compute"
    _icon_dir = "resources/alibabacloud/compute"


class AutoScaling(_Compute):
    _icon = "auto-scaling.png"


class BatchCompute(_Compute):
    _icon = "batch-compute.png"


class ContainerRegistry(_Compute):
    _icon = "container-registry.png"


class ContainerService(_Compute):
    _icon = "container-service.png"


class ElasticComputeService(_Compute):
    _icon = "elastic-compute-service.png"


class ElasticContainerInstance(_Compute):
    _icon = "elastic-container-instance.png"


class ElasticHighPerformanceComputing(_Compute):
    _icon = "elastic-high-performance-computing.png"


class ElasticSearch(_Compute):
    _icon = "elastic-search.png"


class FunctionCompute(_Compute):
    _icon = "function-compute.png"


class OperationOrchestrationService(_Compute):
    _icon = "operation-orchestration-service.png"


class ResourceOrchestrationService(_Compute):
    _icon = "resource-orchestration-service.png"


class ServerLoadBalancer(_Compute):
    _icon = "server-load-balancer.png"


class ServerlessAppEngine(_Compute):
    _icon = "serverless-app-engine.png"


class SimpleApplicationServer(_Compute):
    _icon = "simple-application-server.png"


class WebAppService(_Compute):
    _icon = "web-app-service.png"


# Aliases

ESS = AutoScaling
ECS = ElasticComputeService
ECI = ElasticContainerInstance
EHPC = ElasticHighPerformanceComputing
FC = FunctionCompute
OOS = OperationOrchestrationService
ROS = ResourceOrchestrationService
SLB = ServerLoadBalancer
SAE = ServerlessAppEngine
SAS = SimpleApplicationServer
WAS = WebAppService



File: diagrams/ibm/user.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _User(_IBM):
    _type = "user"
    _icon_dir = "resources/ibm/user"


class Browser(_User):
    _icon = "browser.png"


class Device(_User):
    _icon = "device.png"


class IntegratedDigitalExperiences(_User):
    _icon = "integrated-digital-experiences.png"


class PhysicalEntity(_User):
    _icon = "physical-entity.png"


class Sensor(_User):
    _icon = "sensor.png"


class User(_User):
    _icon = "user.png"


# Aliases



File: diagrams/ibm/social.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Social(_IBM):
    _type = "social"
    _icon_dir = "resources/ibm/social"


class Communities(_Social):
    _icon = "communities.png"


class FileSync(_Social):
    _icon = "file-sync.png"


class LiveCollaboration(_Social):
    _icon = "live-collaboration.png"


class Messaging(_Social):
    _icon = "messaging.png"


class Networking(_Social):
    _icon = "networking.png"


# Aliases



File: diagrams/ibm/infrastructure.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Infrastructure(_IBM):
    _type = "infrastructure"
    _icon_dir = "resources/ibm/infrastructure"


class Channels(_Infrastructure):
    _icon = "channels.png"


class CloudMessaging(_Infrastructure):
    _icon = "cloud-messaging.png"


class Dashboard(_Infrastructure):
    _icon = "dashboard.png"


class Diagnostics(_Infrastructure):
    _icon = "diagnostics.png"


class EdgeServices(_Infrastructure):
    _icon = "edge-services.png"


class EnterpriseMessaging(_Infrastructure):
    _icon = "enterprise-messaging.png"


class EventFeed(_Infrastructure):
    _icon = "event-feed.png"


class InfrastructureServices(_Infrastructure):
    _icon = "infrastructure-services.png"


class InterserviceCommunication(_Infrastructure):
    _icon = "interservice-communication.png"


class LoadBalancingRouting(_Infrastructure):
    _icon = "load-balancing-routing.png"


class MicroservicesMesh(_Infrastructure):
    _icon = "microservices-mesh.png"


class MobileBackend(_Infrastructure):
    _icon = "mobile-backend.png"


class MobileProviderNetwork(_Infrastructure):
    _icon = "mobile-provider-network.png"


class MonitoringLogging(_Infrastructure):
    _icon = "monitoring-logging.png"


class Monitoring(_Infrastructure):
    _icon = "monitoring.png"


class PeerServices(_Infrastructure):
    _icon = "peer-services.png"


class ServiceDiscoveryConfiguration(_Infrastructure):
    _icon = "service-discovery-configuration.png"


class TransformationConnectivity(_Infrastructure):
    _icon = "transformation-connectivity.png"


# Aliases



File: diagrams/ibm/applications.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Applications(_IBM):
    _type = "applications"
    _icon_dir = "resources/ibm/applications"


class ActionableInsight(_Applications):
    _icon = "actionable-insight.png"


class Annotate(_Applications):
    _icon = "annotate.png"


class ApiDeveloperPortal(_Applications):
    _icon = "api-developer-portal.png"


class ApiPolyglotRuntimes(_Applications):
    _icon = "api-polyglot-runtimes.png"


class AppServer(_Applications):
    _icon = "app-server.png"


class ApplicationLogic(_Applications):
    _icon = "application-logic.png"


class EnterpriseApplications(_Applications):
    _icon = "enterprise-applications.png"


class Index(_Applications):
    _icon = "index.png"


class IotApplication(_Applications):
    _icon = "iot-application.png"


class Microservice(_Applications):
    _icon = "microservice.png"


class MobileApp(_Applications):
    _icon = "mobile-app.png"


class Ontology(_Applications):
    _icon = "ontology.png"


class OpenSourceTools(_Applications):
    _icon = "open-source-tools.png"


class RuntimeServices(_Applications):
    _icon = "runtime-services.png"


class SaasApplications(_Applications):
    _icon = "saas-applications.png"


class ServiceBroker(_Applications):
    _icon = "service-broker.png"


class SpeechToText(_Applications):
    _icon = "speech-to-text.png"


class VisualRecognition(_Applications):
    _icon = "visual-recognition.png"


class Visualization(_Applications):
    _icon = "visualization.png"


# Aliases



File: diagrams/ibm/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Security(_IBM):
    _type = "security"
    _icon_dir = "resources/ibm/security"


class ApiSecurity(_Security):
    _icon = "api-security.png"


class BlockchainSecurityService(_Security):
    _icon = "blockchain-security-service.png"


class DataSecurity(_Security):
    _icon = "data-security.png"


class Firewall(_Security):
    _icon = "firewall.png"


class Gateway(_Security):
    _icon = "gateway.png"


class GovernanceRiskCompliance(_Security):
    _icon = "governance-risk-compliance.png"


class IdentityAccessManagement(_Security):
    _icon = "identity-access-management.png"


class IdentityProvider(_Security):
    _icon = "identity-provider.png"


class InfrastructureSecurity(_Security):
    _icon = "infrastructure-security.png"


class PhysicalSecurity(_Security):
    _icon = "physical-security.png"


class SecurityMonitoringIntelligence(_Security):
    _icon = "security-monitoring-intelligence.png"


class SecurityServices(_Security):
    _icon = "security-services.png"


class TrustendComputing(_Security):
    _icon = "trustend-computing.png"


class Vpn(_Security):
    _icon = "vpn.png"


# Aliases



File: diagrams/ibm/__init__.py

"""
IBM provides a set of services for IBM Cloud provider.
"""

from diagrams import Node


class _IBM(Node):
    _provider = "ibm"
    _icon_dir = "resources/ibm"

    fontcolor = "#ffffff"



File: diagrams/ibm/devops.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Devops(_IBM):
    _type = "devops"
    _icon_dir = "resources/ibm/devops"


class ArtifactManagement(_Devops):
    _icon = "artifact-management.png"


class BuildTest(_Devops):
    _icon = "build-test.png"


class CodeEditor(_Devops):
    _icon = "code-editor.png"


class CollaborativeDevelopment(_Devops):
    _icon = "collaborative-development.png"


class ConfigurationManagement(_Devops):
    _icon = "configuration-management.png"


class ContinuousDeploy(_Devops):
    _icon = "continuous-deploy.png"


class ContinuousTesting(_Devops):
    _icon = "continuous-testing.png"


class Devops(_Devops):
    _icon = "devops.png"


class Provision(_Devops):
    _icon = "provision.png"


class ReleaseManagement(_Devops):
    _icon = "release-management.png"


# Aliases



File: diagrams/ibm/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Storage(_IBM):
    _type = "storage"
    _icon_dir = "resources/ibm/storage"


class BlockStorage(_Storage):
    _icon = "block-storage.png"


class ObjectStorage(_Storage):
    _icon = "object-storage.png"


# Aliases



File: diagrams/ibm/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Network(_IBM):
    _type = "network"
    _icon_dir = "resources/ibm/network"


class Bridge(_Network):
    _icon = "bridge.png"


class DirectLink(_Network):
    _icon = "direct-link.png"


class Enterprise(_Network):
    _icon = "enterprise.png"


class Firewall(_Network):
    _icon = "firewall.png"


class FloatingIp(_Network):
    _icon = "floating-ip.png"


class Gateway(_Network):
    _icon = "gateway.png"


class InternetServices(_Network):
    _icon = "internet-services.png"


class LoadBalancerListener(_Network):
    _icon = "load-balancer-listener.png"


class LoadBalancerPool(_Network):
    _icon = "load-balancer-pool.png"


class LoadBalancer(_Network):
    _icon = "load-balancer.png"


class LoadBalancingRouting(_Network):
    _icon = "load-balancing-routing.png"


class PublicGateway(_Network):
    _icon = "public-gateway.png"


class Region(_Network):
    _icon = "region.png"


class Router(_Network):
    _icon = "router.png"


class Rules(_Network):
    _icon = "rules.png"


class Subnet(_Network):
    _icon = "subnet.png"


class TransitGateway(_Network):
    _icon = "transit-gateway.png"


class Vpc(_Network):
    _icon = "vpc.png"


class VpnConnection(_Network):
    _icon = "vpn-connection.png"


class VpnGateway(_Network):
    _icon = "vpn-gateway.png"


class VpnPolicy(_Network):
    _icon = "vpn-policy.png"


# Aliases



File: diagrams/ibm/management.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Management(_IBM):
    _type = "management"
    _icon_dir = "resources/ibm/management"


class AlertNotification(_Management):
    _icon = "alert-notification.png"


class ApiManagement(_Management):
    _icon = "api-management.png"


class CloudManagement(_Management):
    _icon = "cloud-management.png"


class ClusterManagement(_Management):
    _icon = "cluster-management.png"


class ContentManagement(_Management):
    _icon = "content-management.png"


class DataServices(_Management):
    _icon = "data-services.png"


class DeviceManagement(_Management):
    _icon = "device-management.png"


class InformationGovernance(_Management):
    _icon = "information-governance.png"


class ItServiceManagement(_Management):
    _icon = "it-service-management.png"


class Management(_Management):
    _icon = "management.png"


class MonitoringMetrics(_Management):
    _icon = "monitoring-metrics.png"


class ProcessManagement(_Management):
    _icon = "process-management.png"


class ProviderCloudPortalService(_Management):
    _icon = "provider-cloud-portal-service.png"


class PushNotifications(_Management):
    _icon = "push-notifications.png"


class ServiceManagementTools(_Management):
    _icon = "service-management-tools.png"


# Aliases



File: diagrams/ibm/blockchain.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Blockchain(_IBM):
    _type = "blockchain"
    _icon_dir = "resources/ibm/blockchain"


class BlockchainDeveloper(_Blockchain):
    _icon = "blockchain-developer.png"


class Blockchain(_Blockchain):
    _icon = "blockchain.png"


class CertificateAuthority(_Blockchain):
    _icon = "certificate-authority.png"


class ClientApplication(_Blockchain):
    _icon = "client-application.png"


class Communication(_Blockchain):
    _icon = "communication.png"


class Consensus(_Blockchain):
    _icon = "consensus.png"


class EventListener(_Blockchain):
    _icon = "event-listener.png"


class Event(_Blockchain):
    _icon = "event.png"


class ExistingEnterpriseSystems(_Blockchain):
    _icon = "existing-enterprise-systems.png"


class HyperledgerFabric(_Blockchain):
    _icon = "hyperledger-fabric.png"


class KeyManagement(_Blockchain):
    _icon = "key-management.png"


class Ledger(_Blockchain):
    _icon = "ledger.png"


class MembershipServicesProviderApi(_Blockchain):
    _icon = "membership-services-provider-api.png"


class Membership(_Blockchain):
    _icon = "membership.png"


class MessageBus(_Blockchain):
    _icon = "message-bus.png"


class Node(_Blockchain):
    _icon = "node.png"


class Services(_Blockchain):
    _icon = "services.png"


class SmartContract(_Blockchain):
    _icon = "smart-contract.png"


class TransactionManager(_Blockchain):
    _icon = "transaction-manager.png"


class Wallet(_Blockchain):
    _icon = "wallet.png"


# Aliases



File: diagrams/ibm/analytics.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Analytics(_IBM):
    _type = "analytics"
    _icon_dir = "resources/ibm/analytics"


class Analytics(_Analytics):
    _icon = "analytics.png"


class DataIntegration(_Analytics):
    _icon = "data-integration.png"


class DataRepositories(_Analytics):
    _icon = "data-repositories.png"


class DeviceAnalytics(_Analytics):
    _icon = "device-analytics.png"


class StreamingComputing(_Analytics):
    _icon = "streaming-computing.png"


# Aliases



File: diagrams/ibm/data.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Data(_IBM):
    _type = "data"
    _icon_dir = "resources/ibm/data"


class Caches(_Data):
    _icon = "caches.png"


class Cloud(_Data):
    _icon = "cloud.png"


class ConversationTrainedDeployed(_Data):
    _icon = "conversation-trained-deployed.png"


class DataServices(_Data):
    _icon = "data-services.png"


class DataSources(_Data):
    _icon = "data-sources.png"


class DeviceIdentityService(_Data):
    _icon = "device-identity-service.png"


class DeviceRegistry(_Data):
    _icon = "device-registry.png"


class EnterpriseData(_Data):
    _icon = "enterprise-data.png"


class EnterpriseUserDirectory(_Data):
    _icon = "enterprise-user-directory.png"


class FileRepository(_Data):
    _icon = "file-repository.png"


class GroundTruth(_Data):
    _icon = "ground-truth.png"


class Model(_Data):
    _icon = "model.png"


class TmsDataInterface(_Data):
    _icon = "tms-data-interface.png"


# Aliases



File: diagrams/ibm/general.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _General(_IBM):
    _type = "general"
    _icon_dir = "resources/ibm/general"


class CloudMessaging(_General):
    _icon = "cloud-messaging.png"


class CloudServices(_General):
    _icon = "cloud-services.png"


class Cloudant(_General):
    _icon = "cloudant.png"


class CognitiveServices(_General):
    _icon = "cognitive-services.png"


class DataSecurity(_General):
    _icon = "data-security.png"


class Enterprise(_General):
    _icon = "enterprise.png"


class GovernanceRiskCompliance(_General):
    _icon = "governance-risk-compliance.png"


class IBMContainers(_General):
    _icon = "ibm-containers.png"


class IBMPublicCloud(_General):
    _icon = "ibm-public-cloud.png"


class IdentityAccessManagement(_General):
    _icon = "identity-access-management.png"


class IdentityProvider(_General):
    _icon = "identity-provider.png"


class InfrastructureSecurity(_General):
    _icon = "infrastructure-security.png"


class Internet(_General):
    _icon = "internet.png"


class IotCloud(_General):
    _icon = "iot-cloud.png"


class MicroservicesApplication(_General):
    _icon = "microservices-application.png"


class MicroservicesMesh(_General):
    _icon = "microservices-mesh.png"


class MonitoringLogging(_General):
    _icon = "monitoring-logging.png"


class Monitoring(_General):
    _icon = "monitoring.png"


class ObjectStorage(_General):
    _icon = "object-storage.png"


class OfflineCapabilities(_General):
    _icon = "offline-capabilities.png"


class Openwhisk(_General):
    _icon = "openwhisk.png"


class PeerCloud(_General):
    _icon = "peer-cloud.png"


class RetrieveRank(_General):
    _icon = "retrieve-rank.png"


class Scalable(_General):
    _icon = "scalable.png"


class ServiceDiscoveryConfiguration(_General):
    _icon = "service-discovery-configuration.png"


class TextToSpeech(_General):
    _icon = "text-to-speech.png"


class TransformationConnectivity(_General):
    _icon = "transformation-connectivity.png"


# Aliases



File: diagrams/ibm/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _IBM


class _Compute(_IBM):
    _type = "compute"
    _icon_dir = "resources/ibm/compute"


class BareMetalServer(_Compute):
    _icon = "bare-metal-server.png"


class ImageService(_Compute):
    _icon = "image-service.png"


class Instance(_Compute):
    _icon = "instance.png"


class Key(_Compute):
    _icon = "key.png"


class PowerInstance(_Compute):
    _icon = "power-instance.png"


# Aliases



File: diagrams/firebase/extentions.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Firebase


class _Extentions(_Firebase):
    _type = "extentions"
    _icon_dir = "resources/firebase/extentions"


class Extensions(_Extentions):
    _icon = "extensions.png"


# Aliases



File: diagrams/firebase/grow.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Firebase


class _Grow(_Firebase):
    _type = "grow"
    _icon_dir = "resources/firebase/grow"


class ABTesting(_Grow):
    _icon = "ab-testing.png"


class AppIndexing(_Grow):
    _icon = "app-indexing.png"


class DynamicLinks(_Grow):
    _icon = "dynamic-links.png"


class InAppMessaging(_Grow):
    _icon = "in-app-messaging.png"


class Invites(_Grow):
    _icon = "invites.png"


class Messaging(_Grow):
    _icon = "messaging.png"


class Predictions(_Grow):
    _icon = "predictions.png"


class RemoteConfig(_Grow):
    _icon = "remote-config.png"


# Aliases

FCM = Messaging



File: diagrams/firebase/__init__.py

"""
Firebase provides a set of services for Firebase provider.
"""

from diagrams import Node


class _Firebase(Node):
    _provider = "firebase"
    _icon_dir = "resources/firebase"

    fontcolor = "#ffffff"



File: diagrams/firebase/develop.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Firebase


class _Develop(_Firebase):
    _type = "develop"
    _icon_dir = "resources/firebase/develop"


class Authentication(_Develop):
    _icon = "authentication.png"


class Firestore(_Develop):
    _icon = "firestore.png"


class Functions(_Develop):
    _icon = "functions.png"


class Hosting(_Develop):
    _icon = "hosting.png"


class MLKit(_Develop):
    _icon = "ml-kit.png"


class RealtimeDatabase(_Develop):
    _icon = "realtime-database.png"


class Storage(_Develop):
    _icon = "storage.png"


# Aliases



File: diagrams/firebase/quality.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Firebase


class _Quality(_Firebase):
    _type = "quality"
    _icon_dir = "resources/firebase/quality"


class AppDistribution(_Quality):
    _icon = "app-distribution.png"


class CrashReporting(_Quality):
    _icon = "crash-reporting.png"


class Crashlytics(_Quality):
    _icon = "crashlytics.png"


class PerformanceMonitoring(_Quality):
    _icon = "performance-monitoring.png"


class TestLab(_Quality):
    _icon = "test-lab.png"


# Aliases



File: diagrams/firebase/base.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Firebase


class _Base(_Firebase):
    _type = "base"
    _icon_dir = "resources/firebase/base"


class Firebase(_Base):
    _icon = "firebase.png"


# Aliases



File: diagrams/programming/framework.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Programming


class _Framework(_Programming):
    _type = "framework"
    _icon_dir = "resources/programming/framework"


class Angular(_Framework):
    _icon = "angular.png"


class Backbone(_Framework):
    _icon = "backbone.png"


class Django(_Framework):
    _icon = "django.png"


class Ember(_Framework):
    _icon = "ember.png"


class Fastapi(_Framework):
    _icon = "fastapi.png"


class Flask(_Framework):
    _icon = "flask.png"


class Flutter(_Framework):
    _icon = "flutter.png"


class Graphql(_Framework):
    _icon = "graphql.png"


class Laravel(_Framework):
    _icon = "laravel.png"


class Micronaut(_Framework):
    _icon = "micronaut.png"


class Quarkus(_Framework):
    _icon = "quarkus.png"


class Rails(_Framework):
    _icon = "rails.png"


class React(_Framework):
    _icon = "react.png"


class Spring(_Framework):
    _icon = "spring.png"


class Starlette(_Framework):
    _icon = "starlette.png"


class Svelte(_Framework):
    _icon = "svelte.png"


class Vue(_Framework):
    _icon = "vue.png"


# Aliases

FastAPI = Fastapi
GraphQL = Graphql



File: diagrams/programming/__init__.py

"""
Programming provides a set of programming languages and frameworks.
"""

from diagrams import Node


class _Programming(Node):
    _provider = "programming"
    _icon_dir = "resources/programming"

    fontcolor = "#ffffff"



File: diagrams/programming/flowchart.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Programming


class _Flowchart(_Programming):
    _type = "flowchart"
    _icon_dir = "resources/programming/flowchart"


class Action(_Flowchart):
    _icon = "action.png"


class Collate(_Flowchart):
    _icon = "collate.png"


class Database(_Flowchart):
    _icon = "database.png"


class Decision(_Flowchart):
    _icon = "decision.png"


class Delay(_Flowchart):
    _icon = "delay.png"


class Display(_Flowchart):
    _icon = "display.png"


class Document(_Flowchart):
    _icon = "document.png"


class InputOutput(_Flowchart):
    _icon = "input-output.png"


class Inspection(_Flowchart):
    _icon = "inspection.png"


class InternalStorage(_Flowchart):
    _icon = "internal-storage.png"


class LoopLimit(_Flowchart):
    _icon = "loop-limit.png"


class ManualInput(_Flowchart):
    _icon = "manual-input.png"


class ManualLoop(_Flowchart):
    _icon = "manual-loop.png"


class Merge(_Flowchart):
    _icon = "merge.png"


class MultipleDocuments(_Flowchart):
    _icon = "multiple-documents.png"


class OffPageConnectorLeft(_Flowchart):
    _icon = "off-page-connector-left.png"


class OffPageConnectorRight(_Flowchart):
    _icon = "off-page-connector-right.png"


class Or(_Flowchart):
    _icon = "or.png"


class PredefinedProcess(_Flowchart):
    _icon = "predefined-process.png"


class Preparation(_Flowchart):
    _icon = "preparation.png"


class Sort(_Flowchart):
    _icon = "sort.png"


class StartEnd(_Flowchart):
    _icon = "start-end.png"


class StoredData(_Flowchart):
    _icon = "stored-data.png"


class SummingJunction(_Flowchart):
    _icon = "summing-junction.png"


# Aliases



File: diagrams/programming/runtime.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Programming


class _Runtime(_Programming):
    _type = "runtime"
    _icon_dir = "resources/programming/runtime"


class Dapr(_Runtime):
    _icon = "dapr.png"


# Aliases



File: diagrams/programming/language.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Programming


class _Language(_Programming):
    _type = "language"
    _icon_dir = "resources/programming/language"


class Bash(_Language):
    _icon = "bash.png"


class C(_Language):
    _icon = "c.png"


class Cpp(_Language):
    _icon = "cpp.png"


class Csharp(_Language):
    _icon = "csharp.png"


class Dart(_Language):
    _icon = "dart.png"


class Elixir(_Language):
    _icon = "elixir.png"


class Erlang(_Language):
    _icon = "erlang.png"


class Go(_Language):
    _icon = "go.png"


class Java(_Language):
    _icon = "java.png"


class Javascript(_Language):
    _icon = "javascript.png"


class Kotlin(_Language):
    _icon = "kotlin.png"


class Latex(_Language):
    _icon = "latex.png"


class Matlab(_Language):
    _icon = "matlab.png"


class Nodejs(_Language):
    _icon = "nodejs.png"


class Php(_Language):
    _icon = "php.png"


class Python(_Language):
    _icon = "python.png"


class R(_Language):
    _icon = "r.png"


class Ruby(_Language):
    _icon = "ruby.png"


class Rust(_Language):
    _icon = "rust.png"


class Scala(_Language):
    _icon = "scala.png"


class Swift(_Language):
    _icon = "swift.png"


class Typescript(_Language):
    _icon = "typescript.png"


# Aliases

JavaScript = Javascript
NodeJS = Nodejs
PHP = Php
TypeScript = Typescript



File: diagrams/generic/place.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Place(_Generic):
    _type = "place"
    _icon_dir = "resources/generic/place"


class Datacenter(_Place):
    _icon = "datacenter.png"


# Aliases



File: diagrams/generic/device.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Device(_Generic):
    _type = "device"
    _icon_dir = "resources/generic/device"


class Mobile(_Device):
    _icon = "mobile.png"


class Tablet(_Device):
    _icon = "tablet.png"


# Aliases



File: diagrams/generic/database.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Database(_Generic):
    _type = "database"
    _icon_dir = "resources/generic/database"


class SQL(_Database):
    _icon = "sql.png"


# Aliases



File: diagrams/generic/os.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Os(_Generic):
    _type = "os"
    _icon_dir = "resources/generic/os"


class Android(_Os):
    _icon = "android.png"


class Centos(_Os):
    _icon = "centos.png"


class Debian(_Os):
    _icon = "debian.png"


class IOS(_Os):
    _icon = "ios.png"


class LinuxGeneral(_Os):
    _icon = "linux-general.png"


class Raspbian(_Os):
    _icon = "raspbian.png"


class RedHat(_Os):
    _icon = "red-hat.png"


class Suse(_Os):
    _icon = "suse.png"


class Ubuntu(_Os):
    _icon = "ubuntu.png"


class Windows(_Os):
    _icon = "windows.png"


# Aliases



File: diagrams/generic/virtualization.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Virtualization(_Generic):
    _type = "virtualization"
    _icon_dir = "resources/generic/virtualization"


class Qemu(_Virtualization):
    _icon = "qemu.png"


class Virtualbox(_Virtualization):
    _icon = "virtualbox.png"


class Vmware(_Virtualization):
    _icon = "vmware.png"


class XEN(_Virtualization):
    _icon = "xen.png"


# Aliases



File: diagrams/generic/__init__.py

"""
Generic provides the possibility of load an image to be presented as a node.
"""

from diagrams import Node


class _Generic(Node):
    provider = "generic"
    _icon_dir = "resources/generic"

    fontcolor = "#ffffff"



File: diagrams/generic/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Storage(_Generic):
    _type = "storage"
    _icon_dir = "resources/generic/storage"


class Storage(_Storage):
    _icon = "storage.png"


# Aliases



File: diagrams/generic/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Network(_Generic):
    _type = "network"
    _icon_dir = "resources/generic/network"


class Firewall(_Network):
    _icon = "firewall.png"


class Router(_Network):
    _icon = "router.png"


class Subnet(_Network):
    _icon = "subnet.png"


class Switch(_Network):
    _icon = "switch.png"


class VPN(_Network):
    _icon = "vpn.png"


# Aliases



File: diagrams/generic/blank.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Blank(_Generic):
    _type = "blank"
    _icon_dir = "resources/generic/blank"


class Blank(_Blank):
    _icon = "blank.png"


# Aliases



File: diagrams/generic/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Generic


class _Compute(_Generic):
    _type = "compute"
    _icon_dir = "resources/generic/compute"


class Rack(_Compute):
    _icon = "rack.png"


# Aliases



File: diagrams/aws/enablement.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Enablement(_AWS):
    _type = "enablement"
    _icon_dir = "resources/aws/enablement"


class CustomerEnablement(_Enablement):
    _icon = "customer-enablement.png"


class Iq(_Enablement):
    _icon = "iq.png"


class ManagedServices(_Enablement):
    _icon = "managed-services.png"


class ProfessionalServices(_Enablement):
    _icon = "professional-services.png"


class Support(_Enablement):
    _icon = "support.png"


# Aliases



File: diagrams/aws/media.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Media(_AWS):
    _type = "media"
    _icon_dir = "resources/aws/media"


class ElasticTranscoder(_Media):
    _icon = "elastic-transcoder.png"


class ElementalConductor(_Media):
    _icon = "elemental-conductor.png"


class ElementalDelta(_Media):
    _icon = "elemental-delta.png"


class ElementalLive(_Media):
    _icon = "elemental-live.png"


class ElementalMediaconnect(_Media):
    _icon = "elemental-mediaconnect.png"


class ElementalMediaconvert(_Media):
    _icon = "elemental-mediaconvert.png"


class ElementalMedialive(_Media):
    _icon = "elemental-medialive.png"


class ElementalMediapackage(_Media):
    _icon = "elemental-mediapackage.png"


class ElementalMediastore(_Media):
    _icon = "elemental-mediastore.png"


class ElementalMediatailor(_Media):
    _icon = "elemental-mediatailor.png"


class ElementalServer(_Media):
    _icon = "elemental-server.png"


class KinesisVideoStreams(_Media):
    _icon = "kinesis-video-streams.png"


class MediaServices(_Media):
    _icon = "media-services.png"


# Aliases



File: diagrams/aws/enduser.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Enduser(_AWS):
    _type = "enduser"
    _icon_dir = "resources/aws/enduser"


class Appstream20(_Enduser):
    _icon = "appstream-2-0.png"


class DesktopAndAppStreaming(_Enduser):
    _icon = "desktop-and-app-streaming.png"


class Workdocs(_Enduser):
    _icon = "workdocs.png"


class Worklink(_Enduser):
    _icon = "worklink.png"


class Workspaces(_Enduser):
    _icon = "workspaces.png"


# Aliases



File: diagrams/aws/game.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Game(_AWS):
    _type = "game"
    _icon_dir = "resources/aws/game"


class GameTech(_Game):
    _icon = "game-tech.png"


class Gamelift(_Game):
    _icon = "gamelift.png"


# Aliases



File: diagrams/aws/database.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Database(_AWS):
    _type = "database"
    _icon_dir = "resources/aws/database"


class AuroraInstance(_Database):
    _icon = "aurora-instance.png"


class Aurora(_Database):
    _icon = "aurora.png"


class DatabaseMigrationServiceDatabaseMigrationWorkflow(_Database):
    _icon = "database-migration-service-database-migration-workflow.png"


class DatabaseMigrationService(_Database):
    _icon = "database-migration-service.png"


class Database(_Database):
    _icon = "database.png"


class DocumentdbMongodbCompatibility(_Database):
    _icon = "documentdb-mongodb-compatibility.png"


class DynamodbAttribute(_Database):
    _icon = "dynamodb-attribute.png"


class DynamodbAttributes(_Database):
    _icon = "dynamodb-attributes.png"


class DynamodbDax(_Database):
    _icon = "dynamodb-dax.png"


class DynamodbGlobalSecondaryIndex(_Database):
    _icon = "dynamodb-global-secondary-index.png"


class DynamodbItem(_Database):
    _icon = "dynamodb-item.png"


class DynamodbItems(_Database):
    _icon = "dynamodb-items.png"


class DynamodbTable(_Database):
    _icon = "dynamodb-table.png"


class Dynamodb(_Database):
    _icon = "dynamodb.png"


class ElasticacheCacheNode(_Database):
    _icon = "elasticache-cache-node.png"


class ElasticacheForMemcached(_Database):
    _icon = "elasticache-for-memcached.png"


class ElasticacheForRedis(_Database):
    _icon = "elasticache-for-redis.png"


class Elasticache(_Database):
    _icon = "elasticache.png"


class KeyspacesManagedApacheCassandraService(_Database):
    _icon = "keyspaces-managed-apache-cassandra-service.png"


class Neptune(_Database):
    _icon = "neptune.png"


class QuantumLedgerDatabaseQldb(_Database):
    _icon = "quantum-ledger-database-qldb.png"


class RDSInstance(_Database):
    _icon = "rds-instance.png"


class RDSMariadbInstance(_Database):
    _icon = "rds-mariadb-instance.png"


class RDSMysqlInstance(_Database):
    _icon = "rds-mysql-instance.png"


class RDSOnVmware(_Database):
    _icon = "rds-on-vmware.png"


class RDSOracleInstance(_Database):
    _icon = "rds-oracle-instance.png"


class RDSPostgresqlInstance(_Database):
    _icon = "rds-postgresql-instance.png"


class RDSSqlServerInstance(_Database):
    _icon = "rds-sql-server-instance.png"


class RDS(_Database):
    _icon = "rds.png"


class RedshiftDenseComputeNode(_Database):
    _icon = "redshift-dense-compute-node.png"


class RedshiftDenseStorageNode(_Database):
    _icon = "redshift-dense-storage-node.png"


class Redshift(_Database):
    _icon = "redshift.png"


class Timestream(_Database):
    _icon = "timestream.png"


# Aliases

DMS = DatabaseMigrationService
DocumentDB = DocumentdbMongodbCompatibility
DAX = DynamodbDax
DynamodbGSI = DynamodbGlobalSecondaryIndex
DB = Database
DDB = Dynamodb
ElastiCache = Elasticache
QLDB = QuantumLedgerDatabaseQldb



File: diagrams/aws/security.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Security(_AWS):
    _type = "security"
    _icon_dir = "resources/aws/security"


class AdConnector(_Security):
    _icon = "ad-connector.png"


class Artifact(_Security):
    _icon = "artifact.png"


class CertificateAuthority(_Security):
    _icon = "certificate-authority.png"


class CertificateManager(_Security):
    _icon = "certificate-manager.png"


class CloudDirectory(_Security):
    _icon = "cloud-directory.png"


class Cloudhsm(_Security):
    _icon = "cloudhsm.png"


class Cognito(_Security):
    _icon = "cognito.png"


class Detective(_Security):
    _icon = "detective.png"


class DirectoryService(_Security):
    _icon = "directory-service.png"


class FirewallManager(_Security):
    _icon = "firewall-manager.png"


class Guardduty(_Security):
    _icon = "guardduty.png"


class IdentityAndAccessManagementIamAccessAnalyzer(_Security):
    _icon = "identity-and-access-management-iam-access-analyzer.png"


class IdentityAndAccessManagementIamAddOn(_Security):
    _icon = "identity-and-access-management-iam-add-on.png"


class IdentityAndAccessManagementIamAWSStsAlternate(_Security):
    _icon = "identity-and-access-management-iam-aws-sts-alternate.png"


class IdentityAndAccessManagementIamAWSSts(_Security):
    _icon = "identity-and-access-management-iam-aws-sts.png"


class IdentityAndAccessManagementIamDataEncryptionKey(_Security):
    _icon = "identity-and-access-management-iam-data-encryption-key.png"


class IdentityAndAccessManagementIamEncryptedData(_Security):
    _icon = "identity-and-access-management-iam-encrypted-data.png"


class IdentityAndAccessManagementIamLongTermSecurityCredential(_Security):
    _icon = "identity-and-access-management-iam-long-term-security-credential.png"


class IdentityAndAccessManagementIamMfaToken(_Security):
    _icon = "identity-and-access-management-iam-mfa-token.png"


class IdentityAndAccessManagementIamPermissions(_Security):
    _icon = "identity-and-access-management-iam-permissions.png"


class IdentityAndAccessManagementIamRole(_Security):
    _icon = "identity-and-access-management-iam-role.png"


class IdentityAndAccessManagementIamTemporarySecurityCredential(_Security):
    _icon = "identity-and-access-management-iam-temporary-security-credential.png"


class IdentityAndAccessManagementIam(_Security):
    _icon = "identity-and-access-management-iam.png"


class InspectorAgent(_Security):
    _icon = "inspector-agent.png"


class Inspector(_Security):
    _icon = "inspector.png"


class KeyManagementService(_Security):
    _icon = "key-management-service.png"


class Macie(_Security):
    _icon = "macie.png"


class ManagedMicrosoftAd(_Security):
    _icon = "managed-microsoft-ad.png"


class ResourceAccessManager(_Security):
    _icon = "resource-access-manager.png"


class SecretsManager(_Security):
    _icon = "secrets-manager.png"


class SecurityHubFinding(_Security):
    _icon = "security-hub-finding.png"


class SecurityHub(_Security):
    _icon = "security-hub.png"


class SecurityIdentityAndCompliance(_Security):
    _icon = "security-identity-and-compliance.png"


class ShieldAdvanced(_Security):
    _icon = "shield-advanced.png"


class Shield(_Security):
    _icon = "shield.png"


class SimpleAd(_Security):
    _icon = "simple-ad.png"


class SingleSignOn(_Security):
    _icon = "single-sign-on.png"


class WAFFilteringRule(_Security):
    _icon = "waf-filtering-rule.png"


class WAF(_Security):
    _icon = "waf.png"


# Aliases

ACM = CertificateManager
CloudHSM = Cloudhsm
DS = DirectoryService
FMS = FirewallManager
IAMAccessAnalyzer = IdentityAndAccessManagementIamAccessAnalyzer
IAMAWSSts = IdentityAndAccessManagementIamAWSSts
IAMPermissions = IdentityAndAccessManagementIamPermissions
IAMRole = IdentityAndAccessManagementIamRole
IAM = IdentityAndAccessManagementIam
KMS = KeyManagementService
RAM = ResourceAccessManager



File: diagrams/aws/satellite.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Satellite(_AWS):
    _type = "satellite"
    _icon_dir = "resources/aws/satellite"


class GroundStation(_Satellite):
    _icon = "ground-station.png"


class Satellite(_Satellite):
    _icon = "satellite.png"


# Aliases



File: diagrams/aws/mobile.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Mobile(_AWS):
    _type = "mobile"
    _icon_dir = "resources/aws/mobile"


class Amplify(_Mobile):
    _icon = "amplify.png"


class APIGatewayEndpoint(_Mobile):
    _icon = "api-gateway-endpoint.png"


class APIGateway(_Mobile):
    _icon = "api-gateway.png"


class Appsync(_Mobile):
    _icon = "appsync.png"


class DeviceFarm(_Mobile):
    _icon = "device-farm.png"


class Mobile(_Mobile):
    _icon = "mobile.png"


class Pinpoint(_Mobile):
    _icon = "pinpoint.png"


# Aliases



File: diagrams/aws/robotics.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Robotics(_AWS):
    _type = "robotics"
    _icon_dir = "resources/aws/robotics"


class RobomakerCloudExtensionRos(_Robotics):
    _icon = "robomaker-cloud-extension-ros.png"


class RobomakerDevelopmentEnvironment(_Robotics):
    _icon = "robomaker-development-environment.png"


class RobomakerFleetManagement(_Robotics):
    _icon = "robomaker-fleet-management.png"


class RobomakerSimulator(_Robotics):
    _icon = "robomaker-simulator.png"


class Robomaker(_Robotics):
    _icon = "robomaker.png"


class Robotics(_Robotics):
    _icon = "robotics.png"


# Aliases



File: diagrams/aws/__init__.py

"""
AWS provides a set of services for Amazon Web Service provider.
"""

from diagrams import Node


class _AWS(Node):
    _provider = "aws"
    _icon_dir = "resources/aws"

    fontcolor = "#ffffff"



File: diagrams/aws/integration.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Integration(_AWS):
    _type = "integration"
    _icon_dir = "resources/aws/integration"


class ApplicationIntegration(_Integration):
    _icon = "application-integration.png"


class Appsync(_Integration):
    _icon = "appsync.png"


class ConsoleMobileApplication(_Integration):
    _icon = "console-mobile-application.png"


class EventResource(_Integration):
    _icon = "event-resource.png"


class EventbridgeCustomEventBusResource(_Integration):
    _icon = "eventbridge-custom-event-bus-resource.png"


class EventbridgeDefaultEventBusResource(_Integration):
    _icon = "eventbridge-default-event-bus-resource.png"


class EventbridgeSaasPartnerEventBusResource(_Integration):
    _icon = "eventbridge-saas-partner-event-bus-resource.png"


class Eventbridge(_Integration):
    _icon = "eventbridge.png"


class ExpressWorkflows(_Integration):
    _icon = "express-workflows.png"


class MQ(_Integration):
    _icon = "mq.png"


class SimpleNotificationServiceSnsEmailNotification(_Integration):
    _icon = "simple-notification-service-sns-email-notification.png"


class SimpleNotificationServiceSnsHttpNotification(_Integration):
    _icon = "simple-notification-service-sns-http-notification.png"


class SimpleNotificationServiceSnsTopic(_Integration):
    _icon = "simple-notification-service-sns-topic.png"


class SimpleNotificationServiceSns(_Integration):
    _icon = "simple-notification-service-sns.png"


class SimpleQueueServiceSqsMessage(_Integration):
    _icon = "simple-queue-service-sqs-message.png"


class SimpleQueueServiceSqsQueue(_Integration):
    _icon = "simple-queue-service-sqs-queue.png"


class SimpleQueueServiceSqs(_Integration):
    _icon = "simple-queue-service-sqs.png"


class StepFunctions(_Integration):
    _icon = "step-functions.png"


# Aliases

SNS = SimpleNotificationServiceSns
SQS = SimpleQueueServiceSqs
SF = StepFunctions



File: diagrams/aws/ml.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _ML(_AWS):
    _type = "ml"
    _icon_dir = "resources/aws/ml"


class ApacheMxnetOnAWS(_ML):
    _icon = "apache-mxnet-on-aws.png"


class AugmentedAi(_ML):
    _icon = "augmented-ai.png"


class Comprehend(_ML):
    _icon = "comprehend.png"


class DeepLearningAmis(_ML):
    _icon = "deep-learning-amis.png"


class DeepLearningContainers(_ML):
    _icon = "deep-learning-containers.png"


class Deepcomposer(_ML):
    _icon = "deepcomposer.png"


class Deeplens(_ML):
    _icon = "deeplens.png"


class Deepracer(_ML):
    _icon = "deepracer.png"


class ElasticInference(_ML):
    _icon = "elastic-inference.png"


class Forecast(_ML):
    _icon = "forecast.png"


class FraudDetector(_ML):
    _icon = "fraud-detector.png"


class Kendra(_ML):
    _icon = "kendra.png"


class Lex(_ML):
    _icon = "lex.png"


class MachineLearning(_ML):
    _icon = "machine-learning.png"


class Personalize(_ML):
    _icon = "personalize.png"


class Polly(_ML):
    _icon = "polly.png"


class RekognitionImage(_ML):
    _icon = "rekognition-image.png"


class RekognitionVideo(_ML):
    _icon = "rekognition-video.png"


class Rekognition(_ML):
    _icon = "rekognition.png"


class SagemakerGroundTruth(_ML):
    _icon = "sagemaker-ground-truth.png"


class SagemakerModel(_ML):
    _icon = "sagemaker-model.png"


class SagemakerNotebook(_ML):
    _icon = "sagemaker-notebook.png"


class SagemakerTrainingJob(_ML):
    _icon = "sagemaker-training-job.png"


class Sagemaker(_ML):
    _icon = "sagemaker.png"


class TensorflowOnAWS(_ML):
    _icon = "tensorflow-on-aws.png"


class Textract(_ML):
    _icon = "textract.png"


class Transcribe(_ML):
    _icon = "transcribe.png"


class Translate(_ML):
    _icon = "translate.png"


# Aliases

DLC = DeepLearningContainers



File: diagrams/aws/devtools.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Devtools(_AWS):
    _type = "devtools"
    _icon_dir = "resources/aws/devtools"


class CloudDevelopmentKit(_Devtools):
    _icon = "cloud-development-kit.png"


class Cloud9Resource(_Devtools):
    _icon = "cloud9-resource.png"


class Cloud9(_Devtools):
    _icon = "cloud9.png"


class Codebuild(_Devtools):
    _icon = "codebuild.png"


class Codecommit(_Devtools):
    _icon = "codecommit.png"


class Codedeploy(_Devtools):
    _icon = "codedeploy.png"


class Codepipeline(_Devtools):
    _icon = "codepipeline.png"


class Codestar(_Devtools):
    _icon = "codestar.png"


class CommandLineInterface(_Devtools):
    _icon = "command-line-interface.png"


class DeveloperTools(_Devtools):
    _icon = "developer-tools.png"


class ToolsAndSdks(_Devtools):
    _icon = "tools-and-sdks.png"


class XRay(_Devtools):
    _icon = "x-ray.png"


# Aliases

CLI = CommandLineInterface
DevTools = DeveloperTools



File: diagrams/aws/business.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Business(_AWS):
    _type = "business"
    _icon_dir = "resources/aws/business"


class AlexaForBusiness(_Business):
    _icon = "alexa-for-business.png"


class BusinessApplications(_Business):
    _icon = "business-applications.png"


class Chime(_Business):
    _icon = "chime.png"


class Workmail(_Business):
    _icon = "workmail.png"


# Aliases

A4B = AlexaForBusiness



File: diagrams/aws/storage.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Storage(_AWS):
    _type = "storage"
    _icon_dir = "resources/aws/storage"


class Backup(_Storage):
    _icon = "backup.png"


class CloudendureDisasterRecovery(_Storage):
    _icon = "cloudendure-disaster-recovery.png"


class EFSInfrequentaccessPrimaryBg(_Storage):
    _icon = "efs-infrequentaccess-primary-bg.png"


class EFSStandardPrimaryBg(_Storage):
    _icon = "efs-standard-primary-bg.png"


class ElasticBlockStoreEBSSnapshot(_Storage):
    _icon = "elastic-block-store-ebs-snapshot.png"


class ElasticBlockStoreEBSVolume(_Storage):
    _icon = "elastic-block-store-ebs-volume.png"


class ElasticBlockStoreEBS(_Storage):
    _icon = "elastic-block-store-ebs.png"


class ElasticFileSystemEFSFileSystem(_Storage):
    _icon = "elastic-file-system-efs-file-system.png"


class ElasticFileSystemEFS(_Storage):
    _icon = "elastic-file-system-efs.png"


class FsxForLustre(_Storage):
    _icon = "fsx-for-lustre.png"


class FsxForWindowsFileServer(_Storage):
    _icon = "fsx-for-windows-file-server.png"


class Fsx(_Storage):
    _icon = "fsx.png"


class MultipleVolumesResource(_Storage):
    _icon = "multiple-volumes-resource.png"


class S3GlacierArchive(_Storage):
    _icon = "s3-glacier-archive.png"


class S3GlacierVault(_Storage):
    _icon = "s3-glacier-vault.png"


class S3Glacier(_Storage):
    _icon = "s3-glacier.png"


class SimpleStorageServiceS3BucketWithObjects(_Storage):
    _icon = "simple-storage-service-s3-bucket-with-objects.png"


class SimpleStorageServiceS3Bucket(_Storage):
    _icon = "simple-storage-service-s3-bucket.png"


class SimpleStorageServiceS3Object(_Storage):
    _icon = "simple-storage-service-s3-object.png"


class SimpleStorageServiceS3(_Storage):
    _icon = "simple-storage-service-s3.png"


class SnowFamilySnowballImportExport(_Storage):
    _icon = "snow-family-snowball-import-export.png"


class SnowballEdge(_Storage):
    _icon = "snowball-edge.png"


class Snowball(_Storage):
    _icon = "snowball.png"


class Snowmobile(_Storage):
    _icon = "snowmobile.png"


class StorageGatewayCachedVolume(_Storage):
    _icon = "storage-gateway-cached-volume.png"


class StorageGatewayNonCachedVolume(_Storage):
    _icon = "storage-gateway-non-cached-volume.png"


class StorageGatewayVirtualTapeLibrary(_Storage):
    _icon = "storage-gateway-virtual-tape-library.png"


class StorageGateway(_Storage):
    _icon = "storage-gateway.png"


class Storage(_Storage):
    _icon = "storage.png"


# Aliases

CDR = CloudendureDisasterRecovery
EBS = ElasticBlockStoreEBS
EFS = ElasticFileSystemEFS
FSx = Fsx
S3 = SimpleStorageServiceS3



File: diagrams/aws/network.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Network(_AWS):
    _type = "network"
    _icon_dir = "resources/aws/network"


class APIGatewayEndpoint(_Network):
    _icon = "api-gateway-endpoint.png"


class APIGateway(_Network):
    _icon = "api-gateway.png"


class AppMesh(_Network):
    _icon = "app-mesh.png"


class ClientVpn(_Network):
    _icon = "client-vpn.png"


class CloudMap(_Network):
    _icon = "cloud-map.png"


class CloudFrontDownloadDistribution(_Network):
    _icon = "cloudfront-download-distribution.png"


class CloudFrontEdgeLocation(_Network):
    _icon = "cloudfront-edge-location.png"


class CloudFrontStreamingDistribution(_Network):
    _icon = "cloudfront-streaming-distribution.png"


class CloudFront(_Network):
    _icon = "cloudfront.png"


class DirectConnect(_Network):
    _icon = "direct-connect.png"


class ElasticLoadBalancing(_Network):
    _icon = "elastic-load-balancing.png"


class ElbApplicationLoadBalancer(_Network):
    _icon = "elb-application-load-balancer.png"


class ElbClassicLoadBalancer(_Network):
    _icon = "elb-classic-load-balancer.png"


class ElbNetworkLoadBalancer(_Network):
    _icon = "elb-network-load-balancer.png"


class Endpoint(_Network):
    _icon = "endpoint.png"


class GlobalAccelerator(_Network):
    _icon = "global-accelerator.png"


class InternetGateway(_Network):
    _icon = "internet-gateway.png"


class Nacl(_Network):
    _icon = "nacl.png"


class NATGateway(_Network):
    _icon = "nat-gateway.png"


class NetworkingAndContentDelivery(_Network):
    _icon = "networking-and-content-delivery.png"


class PrivateSubnet(_Network):
    _icon = "private-subnet.png"


class Privatelink(_Network):
    _icon = "privatelink.png"


class PublicSubnet(_Network):
    _icon = "public-subnet.png"


class Route53HostedZone(_Network):
    _icon = "route-53-hosted-zone.png"


class Route53(_Network):
    _icon = "route-53.png"


class RouteTable(_Network):
    _icon = "route-table.png"


class SiteToSiteVpn(_Network):
    _icon = "site-to-site-vpn.png"


class TransitGateway(_Network):
    _icon = "transit-gateway.png"


class VPCCustomerGateway(_Network):
    _icon = "vpc-customer-gateway.png"


class VPCElasticNetworkAdapter(_Network):
    _icon = "vpc-elastic-network-adapter.png"


class VPCElasticNetworkInterface(_Network):
    _icon = "vpc-elastic-network-interface.png"


class VPCFlowLogs(_Network):
    _icon = "vpc-flow-logs.png"


class VPCPeering(_Network):
    _icon = "vpc-peering.png"


class VPCRouter(_Network):
    _icon = "vpc-router.png"


class VPCTrafficMirroring(_Network):
    _icon = "vpc-traffic-mirroring.png"


class VPC(_Network):
    _icon = "vpc.png"


class VpnConnection(_Network):
    _icon = "vpn-connection.png"


class VpnGateway(_Network):
    _icon = "vpn-gateway.png"


# Aliases

CF = CloudFront
ELB = ElasticLoadBalancing
ALB = ElbApplicationLoadBalancer
CLB = ElbClassicLoadBalancer
NLB = ElbNetworkLoadBalancer
GAX = GlobalAccelerator



File: diagrams/aws/management.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Management(_AWS):
    _type = "management"
    _icon_dir = "resources/aws/management"


class AutoScaling(_Management):
    _icon = "auto-scaling.png"


class Chatbot(_Management):
    _icon = "chatbot.png"


class CloudformationChangeSet(_Management):
    _icon = "cloudformation-change-set.png"


class CloudformationStack(_Management):
    _icon = "cloudformation-stack.png"


class CloudformationTemplate(_Management):
    _icon = "cloudformation-template.png"


class Cloudformation(_Management):
    _icon = "cloudformation.png"


class Cloudtrail(_Management):
    _icon = "cloudtrail.png"


class CloudwatchAlarm(_Management):
    _icon = "cloudwatch-alarm.png"


class CloudwatchEventEventBased(_Management):
    _icon = "cloudwatch-event-event-based.png"


class CloudwatchEventTimeBased(_Management):
    _icon = "cloudwatch-event-time-based.png"


class CloudwatchRule(_Management):
    _icon = "cloudwatch-rule.png"


class Cloudwatch(_Management):
    _icon = "cloudwatch.png"


class Codeguru(_Management):
    _icon = "codeguru.png"


class CommandLineInterface(_Management):
    _icon = "command-line-interface.png"


class Config(_Management):
    _icon = "config.png"


class ControlTower(_Management):
    _icon = "control-tower.png"


class LicenseManager(_Management):
    _icon = "license-manager.png"


class ManagedServices(_Management):
    _icon = "managed-services.png"


class ManagementAndGovernance(_Management):
    _icon = "management-and-governance.png"


class ManagementConsole(_Management):
    _icon = "management-console.png"


class OpsworksApps(_Management):
    _icon = "opsworks-apps.png"


class OpsworksDeployments(_Management):
    _icon = "opsworks-deployments.png"


class OpsworksInstances(_Management):
    _icon = "opsworks-instances.png"


class OpsworksLayers(_Management):
    _icon = "opsworks-layers.png"


class OpsworksMonitoring(_Management):
    _icon = "opsworks-monitoring.png"


class OpsworksPermissions(_Management):
    _icon = "opsworks-permissions.png"


class OpsworksResources(_Management):
    _icon = "opsworks-resources.png"


class OpsworksStack(_Management):
    _icon = "opsworks-stack.png"


class Opsworks(_Management):
    _icon = "opsworks.png"


class OrganizationsAccount(_Management):
    _icon = "organizations-account.png"


class OrganizationsOrganizationalUnit(_Management):
    _icon = "organizations-organizational-unit.png"


class Organizations(_Management):
    _icon = "organizations.png"


class PersonalHealthDashboard(_Management):
    _icon = "personal-health-dashboard.png"


class ServiceCatalog(_Management):
    _icon = "service-catalog.png"


class SystemsManagerAutomation(_Management):
    _icon = "systems-manager-automation.png"


class SystemsManagerDocuments(_Management):
    _icon = "systems-manager-documents.png"


class SystemsManagerInventory(_Management):
    _icon = "systems-manager-inventory.png"


class SystemsManagerMaintenanceWindows(_Management):
    _icon = "systems-manager-maintenance-windows.png"


class SystemsManagerOpscenter(_Management):
    _icon = "systems-manager-opscenter.png"


class SystemsManagerParameterStore(_Management):
    _icon = "systems-manager-parameter-store.png"


class SystemsManagerPatchManager(_Management):
    _icon = "systems-manager-patch-manager.png"


class SystemsManagerRunCommand(_Management):
    _icon = "systems-manager-run-command.png"


class SystemsManagerStateManager(_Management):
    _icon = "systems-manager-state-manager.png"


class SystemsManager(_Management):
    _icon = "systems-manager.png"


class TrustedAdvisorChecklistCost(_Management):
    _icon = "trusted-advisor-checklist-cost.png"


class TrustedAdvisorChecklistFaultTolerant(_Management):
    _icon = "trusted-advisor-checklist-fault-tolerant.png"


class TrustedAdvisorChecklistPerformance(_Management):
    _icon = "trusted-advisor-checklist-performance.png"


class TrustedAdvisorChecklistSecurity(_Management):
    _icon = "trusted-advisor-checklist-security.png"


class TrustedAdvisorChecklist(_Management):
    _icon = "trusted-advisor-checklist.png"


class TrustedAdvisor(_Management):
    _icon = "trusted-advisor.png"


class WellArchitectedTool(_Management):
    _icon = "well-architected-tool.png"


# Aliases

SSM = SystemsManager
ParameterStore = SystemsManagerParameterStore



File: diagrams/aws/ar.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Ar(_AWS):
    _type = "ar"
    _icon_dir = "resources/aws/ar"


class ArVr(_Ar):
    _icon = "ar-vr.png"


class Sumerian(_Ar):
    _icon = "sumerian.png"


# Aliases



File: diagrams/aws/blockchain.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Blockchain(_AWS):
    _type = "blockchain"
    _icon_dir = "resources/aws/blockchain"


class BlockchainResource(_Blockchain):
    _icon = "blockchain-resource.png"


class Blockchain(_Blockchain):
    _icon = "blockchain.png"


class ManagedBlockchain(_Blockchain):
    _icon = "managed-blockchain.png"


class QuantumLedgerDatabaseQldb(_Blockchain):
    _icon = "quantum-ledger-database-qldb.png"


# Aliases

QLDB = QuantumLedgerDatabaseQldb



File: diagrams/aws/analytics.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Analytics(_AWS):
    _type = "analytics"
    _icon_dir = "resources/aws/analytics"


class Analytics(_Analytics):
    _icon = "analytics.png"


class Athena(_Analytics):
    _icon = "athena.png"


class CloudsearchSearchDocuments(_Analytics):
    _icon = "cloudsearch-search-documents.png"


class Cloudsearch(_Analytics):
    _icon = "cloudsearch.png"


class DataLakeResource(_Analytics):
    _icon = "data-lake-resource.png"


class DataPipeline(_Analytics):
    _icon = "data-pipeline.png"


class ElasticsearchService(_Analytics):
    _icon = "elasticsearch-service.png"


class EMRCluster(_Analytics):
    _icon = "emr-cluster.png"


class EMREngineMaprM3(_Analytics):
    _icon = "emr-engine-mapr-m3.png"


class EMREngineMaprM5(_Analytics):
    _icon = "emr-engine-mapr-m5.png"


class EMREngineMaprM7(_Analytics):
    _icon = "emr-engine-mapr-m7.png"


class EMREngine(_Analytics):
    _icon = "emr-engine.png"


class EMRHdfsCluster(_Analytics):
    _icon = "emr-hdfs-cluster.png"


class EMR(_Analytics):
    _icon = "emr.png"


class GlueCrawlers(_Analytics):
    _icon = "glue-crawlers.png"


class GlueDataCatalog(_Analytics):
    _icon = "glue-data-catalog.png"


class Glue(_Analytics):
    _icon = "glue.png"


class KinesisDataAnalytics(_Analytics):
    _icon = "kinesis-data-analytics.png"


class KinesisDataFirehose(_Analytics):
    _icon = "kinesis-data-firehose.png"


class KinesisDataStreams(_Analytics):
    _icon = "kinesis-data-streams.png"


class KinesisVideoStreams(_Analytics):
    _icon = "kinesis-video-streams.png"


class Kinesis(_Analytics):
    _icon = "kinesis.png"


class LakeFormation(_Analytics):
    _icon = "lake-formation.png"


class ManagedStreamingForKafka(_Analytics):
    _icon = "managed-streaming-for-kafka.png"


class Quicksight(_Analytics):
    _icon = "quicksight.png"


class RedshiftDenseComputeNode(_Analytics):
    _icon = "redshift-dense-compute-node.png"


class RedshiftDenseStorageNode(_Analytics):
    _icon = "redshift-dense-storage-node.png"


class Redshift(_Analytics):
    _icon = "redshift.png"


# Aliases

ES = ElasticsearchService



File: diagrams/aws/quantum.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Quantum(_AWS):
    _type = "quantum"
    _icon_dir = "resources/aws/quantum"


class Braket(_Quantum):
    _icon = "braket.png"


class QuantumTechnologies(_Quantum):
    _icon = "quantum-technologies.png"


# Aliases



File: diagrams/aws/cost.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Cost(_AWS):
    _type = "cost"
    _icon_dir = "resources/aws/cost"


class Budgets(_Cost):
    _icon = "budgets.png"


class CostAndUsageReport(_Cost):
    _icon = "cost-and-usage-report.png"


class CostExplorer(_Cost):
    _icon = "cost-explorer.png"


class CostManagement(_Cost):
    _icon = "cost-management.png"


class ReservedInstanceReporting(_Cost):
    _icon = "reserved-instance-reporting.png"


class SavingsPlans(_Cost):
    _icon = "savings-plans.png"


# Aliases



File: diagrams/aws/migration.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Migration(_AWS):
    _type = "migration"
    _icon_dir = "resources/aws/migration"


class ApplicationDiscoveryService(_Migration):
    _icon = "application-discovery-service.png"


class CloudendureMigration(_Migration):
    _icon = "cloudendure-migration.png"


class DatabaseMigrationService(_Migration):
    _icon = "database-migration-service.png"


class DatasyncAgent(_Migration):
    _icon = "datasync-agent.png"


class Datasync(_Migration):
    _icon = "datasync.png"


class MigrationAndTransfer(_Migration):
    _icon = "migration-and-transfer.png"


class MigrationHub(_Migration):
    _icon = "migration-hub.png"


class ServerMigrationService(_Migration):
    _icon = "server-migration-service.png"


class SnowballEdge(_Migration):
    _icon = "snowball-edge.png"


class Snowball(_Migration):
    _icon = "snowball.png"


class Snowmobile(_Migration):
    _icon = "snowmobile.png"


class TransferForSftp(_Migration):
    _icon = "transfer-for-sftp.png"


# Aliases

ADS = ApplicationDiscoveryService
CEM = CloudendureMigration
DMS = DatabaseMigrationService
MAT = MigrationAndTransfer
SMS = ServerMigrationService



File: diagrams/aws/iot.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Iot(_AWS):
    _type = "iot"
    _icon_dir = "resources/aws/iot"


class Freertos(_Iot):
    _icon = "freertos.png"


class InternetOfThings(_Iot):
    _icon = "internet-of-things.png"


class Iot1Click(_Iot):
    _icon = "iot-1-click.png"


class IotAction(_Iot):
    _icon = "iot-action.png"


class IotActuator(_Iot):
    _icon = "iot-actuator.png"


class IotAlexaEcho(_Iot):
    _icon = "iot-alexa-echo.png"


class IotAlexaEnabledDevice(_Iot):
    _icon = "iot-alexa-enabled-device.png"


class IotAlexaSkill(_Iot):
    _icon = "iot-alexa-skill.png"


class IotAlexaVoiceService(_Iot):
    _icon = "iot-alexa-voice-service.png"


class IotAnalyticsChannel(_Iot):
    _icon = "iot-analytics-channel.png"


class IotAnalyticsDataSet(_Iot):
    _icon = "iot-analytics-data-set.png"


class IotAnalyticsDataStore(_Iot):
    _icon = "iot-analytics-data-store.png"


class IotAnalyticsNotebook(_Iot):
    _icon = "iot-analytics-notebook.png"


class IotAnalyticsPipeline(_Iot):
    _icon = "iot-analytics-pipeline.png"


class IotAnalytics(_Iot):
    _icon = "iot-analytics.png"


class IotBank(_Iot):
    _icon = "iot-bank.png"


class IotBicycle(_Iot):
    _icon = "iot-bicycle.png"


class IotButton(_Iot):
    _icon = "iot-button.png"


class IotCamera(_Iot):
    _icon = "iot-camera.png"


class IotCar(_Iot):
    _icon = "iot-car.png"


class IotCart(_Iot):
    _icon = "iot-cart.png"


class IotCertificate(_Iot):
    _icon = "iot-certificate.png"


class IotCoffeePot(_Iot):
    _icon = "iot-coffee-pot.png"


class IotCore(_Iot):
    _icon = "iot-core.png"


class IotDesiredState(_Iot):
    _icon = "iot-desired-state.png"


class IotDeviceDefender(_Iot):
    _icon = "iot-device-defender.png"


class IotDeviceGateway(_Iot):
    _icon = "iot-device-gateway.png"


class IotDeviceManagement(_Iot):
    _icon = "iot-device-management.png"


class IotDoorLock(_Iot):
    _icon = "iot-door-lock.png"


class IotEvents(_Iot):
    _icon = "iot-events.png"


class IotFactory(_Iot):
    _icon = "iot-factory.png"


class IotFireTvStick(_Iot):
    _icon = "iot-fire-tv-stick.png"


class IotFireTv(_Iot):
    _icon = "iot-fire-tv.png"


class IotGeneric(_Iot):
    _icon = "iot-generic.png"


class IotGreengrassConnector(_Iot):
    _icon = "iot-greengrass-connector.png"


class IotGreengrass(_Iot):
    _icon = "iot-greengrass.png"


class IotHardwareBoard(_Iot):
    _icon = "iot-hardware-board.png"


class IotHouse(_Iot):
    _icon = "iot-house.png"


class IotHttp(_Iot):
    _icon = "iot-http.png"


class IotHttp2(_Iot):
    _icon = "iot-http2.png"


class IotJobs(_Iot):
    _icon = "iot-jobs.png"


class IotLambda(_Iot):
    _icon = "iot-lambda.png"


class IotLightbulb(_Iot):
    _icon = "iot-lightbulb.png"


class IotMedicalEmergency(_Iot):
    _icon = "iot-medical-emergency.png"


class IotMqtt(_Iot):
    _icon = "iot-mqtt.png"


class IotOverTheAirUpdate(_Iot):
    _icon = "iot-over-the-air-update.png"


class IotPolicyEmergency(_Iot):
    _icon = "iot-policy-emergency.png"


class IotPolicy(_Iot):
    _icon = "iot-policy.png"


class IotReportedState(_Iot):
    _icon = "iot-reported-state.png"


class IotRule(_Iot):
    _icon = "iot-rule.png"


class IotSensor(_Iot):
    _icon = "iot-sensor.png"


class IotServo(_Iot):
    _icon = "iot-servo.png"


class IotShadow(_Iot):
    _icon = "iot-shadow.png"


class IotSimulator(_Iot):
    _icon = "iot-simulator.png"


class IotSitewise(_Iot):
    _icon = "iot-sitewise.png"


class IotThermostat(_Iot):
    _icon = "iot-thermostat.png"


class IotThingsGraph(_Iot):
    _icon = "iot-things-graph.png"


class IotTopic(_Iot):
    _icon = "iot-topic.png"


class IotTravel(_Iot):
    _icon = "iot-travel.png"


class IotUtility(_Iot):
    _icon = "iot-utility.png"


class IotWindfarm(_Iot):
    _icon = "iot-windfarm.png"


# Aliases

FreeRTOS = Freertos
IotBoard = IotHardwareBoard



File: diagrams/aws/general.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _General(_AWS):
    _type = "general"
    _icon_dir = "resources/aws/general"


class Client(_General):
    _icon = "client.png"


class Disk(_General):
    _icon = "disk.png"


class Forums(_General):
    _icon = "forums.png"


class General(_General):
    _icon = "general.png"


class GenericDatabase(_General):
    _icon = "generic-database.png"


class GenericFirewall(_General):
    _icon = "generic-firewall.png"


class GenericOfficeBuilding(_General):
    _icon = "generic-office-building.png"


class GenericSamlToken(_General):
    _icon = "generic-saml-token.png"


class GenericSDK(_General):
    _icon = "generic-sdk.png"


class InternetAlt1(_General):
    _icon = "internet-alt1.png"


class InternetAlt2(_General):
    _icon = "internet-alt2.png"


class InternetGateway(_General):
    _icon = "internet-gateway.png"


class Marketplace(_General):
    _icon = "marketplace.png"


class MobileClient(_General):
    _icon = "mobile-client.png"


class Multimedia(_General):
    _icon = "multimedia.png"


class OfficeBuilding(_General):
    _icon = "office-building.png"


class SamlToken(_General):
    _icon = "saml-token.png"


class SDK(_General):
    _icon = "sdk.png"


class SslPadlock(_General):
    _icon = "ssl-padlock.png"


class TapeStorage(_General):
    _icon = "tape-storage.png"


class Toolkit(_General):
    _icon = "toolkit.png"


class TraditionalServer(_General):
    _icon = "traditional-server.png"


class User(_General):
    _icon = "user.png"


class Users(_General):
    _icon = "users.png"


# Aliases

OfficeBuilding = GenericOfficeBuilding



File: diagrams/aws/engagement.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Engagement(_AWS):
    _type = "engagement"
    _icon_dir = "resources/aws/engagement"


class Connect(_Engagement):
    _icon = "connect.png"


class CustomerEngagement(_Engagement):
    _icon = "customer-engagement.png"


class Pinpoint(_Engagement):
    _icon = "pinpoint.png"


class SimpleEmailServiceSesEmail(_Engagement):
    _icon = "simple-email-service-ses-email.png"


class SimpleEmailServiceSes(_Engagement):
    _icon = "simple-email-service-ses.png"


# Aliases

SES = SimpleEmailServiceSes



File: diagrams/aws/compute.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _AWS


class _Compute(_AWS):
    _type = "compute"
    _icon_dir = "resources/aws/compute"


class AppRunner(_Compute):
    _icon = "app-runner.png"


class ApplicationAutoScaling(_Compute):
    _icon = "application-auto-scaling.png"


class Batch(_Compute):
    _icon = "batch.png"


class ComputeOptimizer(_Compute):
    _icon = "compute-optimizer.png"


class Compute(_Compute):
    _icon = "compute.png"


class EC2Ami(_Compute):
    _icon = "ec2-ami.png"


class EC2AutoScaling(_Compute):
    _icon = "ec2-auto-scaling.png"


class EC2ContainerRegistryImage(_Compute):
    _icon = "ec2-container-registry-image.png"


class EC2ContainerRegistryRegistry(_Compute):
    _icon = "ec2-container-registry-registry.png"


class EC2ContainerRegistry(_Compute):
    _icon = "ec2-container-registry.png"


class EC2ElasticIpAddress(_Compute):
    _icon = "ec2-elastic-ip-address.png"


class EC2ImageBuilder(_Compute):
    _icon = "ec2-image-builder.png"


class EC2Instance(_Compute):
    _icon = "ec2-instance.png"


class EC2Instances(_Compute):
    _icon = "ec2-instances.png"


class EC2Rescue(_Compute):
    _icon = "ec2-rescue.png"


class EC2SpotInstance(_Compute):
    _icon = "ec2-spot-instance.png"


class EC2(_Compute):
    _icon = "ec2.png"


class ElasticBeanstalkApplication(_Compute):
    _icon = "elastic-beanstalk-application.png"


class ElasticBeanstalkDeployment(_Compute):
    _icon = "elastic-beanstalk-deployment.png"


class ElasticBeanstalk(_Compute):
    _icon = "elastic-beanstalk.png"


class ElasticContainerServiceContainer(_Compute):
    _icon = "elastic-container-service-container.png"


class ElasticContainerServiceService(_Compute):
    _icon = "elastic-container-service-service.png"


class ElasticContainerService(_Compute):
    _icon = "elastic-container-service.png"


class ElasticKubernetesService(_Compute):
    _icon = "elastic-kubernetes-service.png"


class Fargate(_Compute):
    _icon = "fargate.png"


class LambdaFunction(_Compute):
    _icon = "lambda-function.png"


class Lambda(_Compute):
    _icon = "lambda.png"


class Lightsail(_Compute):
    _icon = "lightsail.png"


class LocalZones(_Compute):
    _icon = "local-zones.png"


class Outposts(_Compute):
    _icon = "outposts.png"


class ServerlessApplicationRepository(_Compute):
    _icon = "serverless-application-repository.png"


class ThinkboxDeadline(_Compute):
    _icon = "thinkbox-deadline.png"


class ThinkboxDraft(_Compute):
    _icon = "thinkbox-draft.png"


class ThinkboxFrost(_Compute):
    _icon = "thinkbox-frost.png"


class ThinkboxKrakatoa(_Compute):
    _icon = "thinkbox-krakatoa.png"


class ThinkboxSequoia(_Compute):
    _icon = "thinkbox-sequoia.png"


class ThinkboxStoke(_Compute):
    _icon = "thinkbox-stoke.png"


class ThinkboxXmesh(_Compute):
    _icon = "thinkbox-xmesh.png"


class VmwareCloudOnAWS(_Compute):
    _icon = "vmware-cloud-on-aws.png"


class Wavelength(_Compute):
    _icon = "wavelength.png"


# Aliases

AutoScaling = ApplicationAutoScaling
AMI = EC2Ami
ECR = EC2ContainerRegistry
EB = ElasticBeanstalk
ECS = ElasticContainerService
EKS = ElasticKubernetesService
SAR = ServerlessApplicationRepository



File: diagrams/c4/__init__.py

"""
A set of nodes and edges to visualize software architecture using the C4 model.
"""
import html
import textwrap
from diagrams import Cluster, Node, Edge


def _format_node_label(name, key, description):
    """Create a graphviz label string for a C4 node"""
    title = f'<font point-size="12"><b>{html.escape(name)}</b></font><br/>'
    subtitle = f'<font point-size="9">[{html.escape(key)}]<br/></font>' if key else ""
    text = f'<br/><font point-size="10">{_format_description(description)}</font>' if description else ""
    return f"<{title}{subtitle}{text}>"


def _format_description(description):
    """
    Formats the description string so it fits into the C4 nodes.

    It line-breaks the description so it fits onto exactly three lines. If there are more
    than three lines, all further lines are discarded and "..." inserted on the last line to
    indicate that it was shortened. This will also html-escape the description so it can
    safely be included in a HTML label.
    """
    wrapper = textwrap.TextWrapper(width=40, max_lines=3)
    lines = [html.escape(line) for line in wrapper.wrap(description)]
    lines += [""] * (3 - len(lines))  # fill up with empty lines so it is always three
    return "<br/>".join(lines)


def _format_edge_label(description):
    """Create a graphviz label string for a C4 edge"""
    wrapper = textwrap.TextWrapper(width=24, max_lines=3)
    lines = [html.escape(line) for line in wrapper.wrap(description)]
    text = "<br/>".join(lines)
    return f'<<font point-size="10">{text}</font>>'


def C4Node(name, technology="", description="", type="Container", **kwargs):
    key = f"{type}: {technology}" if technology else type
    node_attributes = {
        "label": _format_node_label(name, key, description),
        "labelloc": "c",
        "shape": "rect",
        "width": "2.6",
        "height": "1.6",
        "fixedsize": "true",
        "style": "filled",
        "fillcolor": "dodgerblue3",
        "fontcolor": "white",
    }
    # collapse boxes to a smaller form if they don't have a description
    if not description:
        node_attributes.update({"width": "2", "height": "1"})
    node_attributes.update(kwargs)
    return Node(**node_attributes)


def Container(name, technology="", description="", **kwargs):
    container_attributes = {
        "name": name,
        "technology": technology,
        "description": description,
        "type": "Container",
    }
    container_attributes.update(kwargs)
    return C4Node(**container_attributes)


def Database(name, technology="", description="", **kwargs):
    database_attributes = {
        "name": name,
        "technology": technology,
        "description": description,
        "type": "Database",
        "shape": "cylinder",
        "labelloc": "b",
    }
    database_attributes.update(kwargs)
    return C4Node(**database_attributes)


def System(name, description="", external=False, **kwargs):
    system_attributes = {
        "name": name,
        "description": description,
        "type": "External System" if external else "System",
        "fillcolor": "gray60" if external else "dodgerblue4",
    }
    system_attributes.update(kwargs)
    return C4Node(**system_attributes)


def Person(name, description="", external=False, **kwargs):
    person_attributes = {
        "name": name,
        "description": description,
        "type": "External Person" if external else "Person",
        "fillcolor": "gray60" if external else "dodgerblue4",
        "style": "rounded,filled",
    }
    person_attributes.update(kwargs)
    return C4Node(**person_attributes)


def SystemBoundary(name, **kwargs):
    graph_attributes = {
        "label": html.escape(name),
        "bgcolor": "white",
        "margin": "16",
        "style": "dashed",
    }
    graph_attributes.update(kwargs)
    return Cluster(name, graph_attr=graph_attributes)


def Relationship(label="", **kwargs):
    edge_attributes = {
        "style": "dashed",
        "color": "gray60",
        "label": _format_edge_label(label) if label else "",
    }
    edge_attributes.update(kwargs)
    return Edge(**edge_attributes)



File: diagrams/custom/__init__.py

"""
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, *args, **kwargs):
        self._icon = icon_path
        super().__init__(label, *args, **kwargs)



File: diagrams/saas/logging.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Logging(_Saas):
    _type = "logging"
    _icon_dir = "resources/saas/logging"


class Datadog(_Logging):
    _icon = "datadog.png"


class Newrelic(_Logging):
    _icon = "newrelic.png"


class Papertrail(_Logging):
    _icon = "papertrail.png"


# Aliases

DataDog = Datadog
NewRelic = Newrelic



File: diagrams/saas/media.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Media(_Saas):
    _type = "media"
    _icon_dir = "resources/saas/media"


class Cloudinary(_Media):
    _icon = "cloudinary.png"


# Aliases



File: diagrams/saas/social.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Social(_Saas):
    _type = "social"
    _icon_dir = "resources/saas/social"


class Facebook(_Social):
    _icon = "facebook.png"


class Twitter(_Social):
    _icon = "twitter.png"


# Aliases



File: diagrams/saas/filesharing.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Filesharing(_Saas):
    _type = "filesharing"
    _icon_dir = "resources/saas/filesharing"


class Nextcloud(_Filesharing):
    _icon = "nextcloud.png"


# Aliases



File: diagrams/saas/__init__.py

"""
Saas provides a set of general saas services.
"""

from diagrams import Node


class _Saas(Node):
    _provider = "saas"
    _icon_dir = "resources/saas"

    fontcolor = "#ffffff"



File: diagrams/saas/recommendation.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Recommendation(_Saas):
    _type = "recommendation"
    _icon_dir = "resources/saas/recommendation"


class Recombee(_Recommendation):
    _icon = "recombee.png"


# Aliases



File: diagrams/saas/chat.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Chat(_Saas):
    _type = "chat"
    _icon_dir = "resources/saas/chat"


class Discord(_Chat):
    _icon = "discord.png"


class Line(_Chat):
    _icon = "line.png"


class Mattermost(_Chat):
    _icon = "mattermost.png"


class Messenger(_Chat):
    _icon = "messenger.png"


class RocketChat(_Chat):
    _icon = "rocket-chat.png"


class Slack(_Chat):
    _icon = "slack.png"


class Teams(_Chat):
    _icon = "teams.png"


class Telegram(_Chat):
    _icon = "telegram.png"


# Aliases



File: diagrams/saas/cdn.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Cdn(_Saas):
    _type = "cdn"
    _icon_dir = "resources/saas/cdn"


class Akamai(_Cdn):
    _icon = "akamai.png"


class Cloudflare(_Cdn):
    _icon = "cloudflare.png"


class Fastly(_Cdn):
    _icon = "fastly.png"


# Aliases



File: diagrams/saas/communication.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Communication(_Saas):
    _type = "communication"
    _icon_dir = "resources/saas/communication"


class Twilio(_Communication):
    _icon = "twilio.png"


# Aliases



File: diagrams/saas/analytics.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Analytics(_Saas):
    _type = "analytics"
    _icon_dir = "resources/saas/analytics"


class Dataform(_Analytics):
    _icon = "dataform.png"


class Snowflake(_Analytics):
    _icon = "snowflake.png"


class Stitch(_Analytics):
    _icon = "stitch.png"


# Aliases



File: diagrams/saas/identity.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Identity(_Saas):
    _type = "identity"
    _icon_dir = "resources/saas/identity"


class Auth0(_Identity):
    _icon = "auth0.png"


class Okta(_Identity):
    _icon = "okta.png"


# Aliases



File: diagrams/saas/alerting.py

# This module is automatically generated by autogen.sh. DO NOT EDIT.

from . import _Saas


class _Alerting(_Saas):
    _type = "alerting"
    _icon_dir = "resources/saas/alerting"


class Newrelic(_Alerting):
    _icon = "newrelic.png"


class Opsgenie(_Alerting):
    _icon = "opsgenie.png"


class Pagerduty(_Alerting):
    _icon = "pagerduty.png"


class Pushover(_Alerting):
    _icon = "pushover.png"


class Xmatters(_Alerting):
    _icon = "xmatters.png"


# Aliases



File: diagrams/base/__init__.py

"""
Base provides a set of general services for backend infrastructure.
"""

from diagrams import Node


class _Base(Node):
    _provider = "base"
    _icon_dir = "resources/base"

    fontcolor = "#ffffff"



File: scripts/generate.py

import os
import sys
from typing import Iterable

from jinja2 import Environment, FileSystemLoader, Template, exceptions

import config as cfg
from . import app_root_dir, doc_root_dir, resource_dir, template_dir, base_dir

_usage = "Usage: generate.py <provider>"


def load_tmpl(tmpl: str) -> Template:
    env = Environment(loader=FileSystemLoader(template_dir()))
    env.filters["up_or_title"] = up_or_title
    return env.get_template(tmpl)


def up_or_title(pvd: str, s: str) -> str:
    if s in cfg.UPPER_WORDS.get(pvd, ()):
        return s.upper()
    if s in cfg.TITLE_WORDS.get(pvd, {}):
        return cfg.TITLE_WORDS[pvd][s]
    return s.title()


def gen_classes(pvd: str, typ: str, paths: Iterable[str]) -> str:
    """Generate all service node classes based on resources paths with class templates."""
    tmpl = load_tmpl(cfg.TMPL_MODULE)

    # TODO: extract the gen class metas for sharing
    # TODO: independent function for generating all pvd/typ/paths pairs
    def _gen_class_meta(path: str) -> dict:
        base = os.path.splitext(path)[0]
        name = "".join([up_or_title(pvd, s) for s in base.split("-")])
        return {"name": name, "icon": path}

    metas = map(_gen_class_meta, paths)
    aliases = cfg.ALIASES[pvd][typ] if typ in cfg.ALIASES[pvd] else {}
    return tmpl.render(pvd=pvd, typ=typ, metas=metas, aliases=aliases)


def gen_apidoc(pvd: str, typ_paths: dict) -> str:
    try:
      default_tmp = cfg.TMPL_APIDOC.split('.')
      tmpl_file = f"{default_tmp[0]}_{pvd}.{default_tmp[1]}"
      tmpl = load_tmpl(tmpl_file)
    except exceptions.TemplateNotFound:
      tmpl = load_tmpl(cfg.TMPL_APIDOC)

    # TODO: remove
    def _gen_class_name(path: str) -> str:
        base = os.path.splitext(path)[0]
        name = "".join([up_or_title(pvd, s) for s in base.split("-")])
        return name

    typ_classes = {}
    for typ, (paths, resource_root) in sorted(typ_paths.items()):
        typ_classes[typ] = []
        for path in paths:
            name = _gen_class_name(path)
            resource_path = os.path.join(resource_root, path)
            alias = cfg.ALIASES[pvd].get(typ, {}).get(name)
            typ_classes[typ].append({"name": name, "alias": alias, "resource_path": resource_path})
    return tmpl.render(pvd=pvd, typ_classes=typ_classes)


def make_module(pvd: str, typ: str, classes: str) -> None:
    """Create a module file"""
    mod_path = os.path.join(app_root_dir(pvd), f"{typ}.py")
    with open(mod_path, "w+") as f:
        f.write(classes)


def make_apidoc(pvd: str, content: str) -> None:
    """Create an api documentation file"""
    mod_path = os.path.join(doc_root_dir(), f"{pvd}.md")
    with open(mod_path, "w+") as f:
        f.write(content)


def generate(pvd: str) -> None:
    """Generates a service node classes."""
    typ_paths = {}
    base = base_dir()
    for root, _, files in os.walk(resource_dir(pvd)):
        # Extract the names and paths from resources.
        files.sort()
        pngs = list(filter(lambda f: f.endswith(".png"), files))
        paths = list(filter(lambda f: "rounded" not in f, pngs))

        # Skip the top-root directory.
        typ = os.path.basename(root)
        if typ == pvd:
            continue

        resource_root = os.path.relpath(root, base)
        classes = gen_classes(pvd, typ, paths)
        make_module(pvd, typ, classes)

        typ_paths[typ] = (paths, resource_root)
    # Build API documentation
    apidoc = gen_apidoc(pvd, typ_paths)
    make_apidoc(pvd, apidoc)


if __name__ == "__main__":
    pvd = sys.argv[1]
    if pvd not in cfg.PROVIDERS:
        sys.exit()
    generate(pvd)



File: scripts/resource.py

"""
resources.py provides useful tools for resources processing.

There are 2 commands available.
- clean: clean and unify the resources file names with some rules.
- round: generate the rounded images from the original squared images.
"""

import os
import subprocess
import sys

import config as cfg
from . import resource_dir

_usage = "Usage: resource.py <cmd> <pvd>"


def cleaner_onprem(f):
    f = f.replace("_", "-")
    return f.lower()


def cleaner_aws(f):
    f = f.replace("_", "-")
    f = f.replace("@4x", "")
    f = f.replace("@5x", "")
    f = f.replace("2.0", "2-0")
    f = f.replace("-light-bg4x", "")
    f = f.replace("-light-bg", "")
    for p in cfg.FILE_PREFIXES["aws"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()


def cleaner_azure(f):
    f = f.replace("_", "-")
    f = f.replace("(", "").replace(")", "")
    f = "-".join(f.split())
    for p in cfg.FILE_PREFIXES["azure"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()


def cleaner_gcp(f):
    f = f.replace("_", "-")
    f = "-".join(f.split())
    for p in cfg.FILE_PREFIXES["gcp"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()


def cleaner_ibm(f):
    f = f.replace("_", "-")
    f = "-".join(f.split())
    for p in cfg.FILE_PREFIXES["ibm"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()


def cleaner_firebase(f):
    f = f.replace("_", "-")
    f = "-".join(f.split())
    for p in cfg.FILE_PREFIXES["firebase"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()


def cleaner_k8s(f):
    f = f.replace("-256", "")
    for p in cfg.FILE_PREFIXES["k8s"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()

def cleaner_digitalocean(f):
    f = f.replace("-32", "")
    for p in cfg.FILE_PREFIXES["digitalocean"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()


def cleaner_alibabacloud(f):
    for p in cfg.FILE_PREFIXES["alibabacloud"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()


def cleaner_oci(f):
    f = f.replace(" ", "-")
    f = f.replace("_", "-")
    for p in cfg.FILE_PREFIXES["oci"]:
        if f.startswith(p):
            f = f[len(p) :]
            break
    return f.lower()


def cleaner_programming(f):
    return f.lower()


def cleaner_generic(f):
    return f.lower()


def cleaner_saas(f):
    return f.lower()


def cleaner_elastic(f):
    return f.lower()


def cleaner_outscale(f):
    return f.lower()


def cleaner_openstack(f):
    return f.lower()


cleaners = {
    "onprem": cleaner_onprem,
    "aws": cleaner_aws,
    "azure": cleaner_azure,
    "digitalocean": cleaner_digitalocean,
    "gcp": cleaner_gcp,
    "ibm": cleaner_ibm,
    "firebase": cleaner_firebase,
    "k8s": cleaner_k8s,
    "alibabacloud": cleaner_alibabacloud,
    "oci": cleaner_oci,
    "programming": cleaner_programming,
    "saas": cleaner_saas,
    "elastic": cleaner_elastic,
    "outscale": cleaner_outscale,
    "generic": cleaner_generic,
    "openstack": cleaner_openstack,
}


def clean_png(pvd: str) -> None:
    """Refine the resources files names."""

    def _rename(base: str, png: str):
        new = cleaners[pvd](png)
        old_path = os.path.join(base, png)
        new_path = os.path.join(base, new)
        os.rename(old_path, new_path)

    for root, _, files in os.walk(resource_dir(pvd)):
        pngs = filter(lambda f: f.endswith(".png"), files)
        [_rename(root, png) for png in pngs]


def round_png(pvd: str) -> None:
    """Round the images."""

    def _round(base: str, path: str):
        path = os.path.join(base, path)
        subprocess.run([cfg.CMD_ROUND, *cfg.CMD_ROUND_OPTS, path])

    for root, _, files in os.walk(resource_dir(pvd)):
        pngs = filter(lambda f: f.endswith(".png"), files)
        paths = filter(lambda f: "rounded" not in f, pngs)
        [_round(root, path) for path in paths]


def svg2png(pvd: str) -> None:
    """Convert the svg into png"""

    def _convert(base: str, path: str):
        path = os.path.join(base, path)
        subprocess.run([cfg.CMD_SVG2PNG, *cfg.CMD_SVG2PNG_OPTS, path])
        subprocess.run(["rm", path])

    for root, _, files in os.walk(resource_dir(pvd)):
        svgs = filter(lambda f: f.endswith(".svg"), files)
        [_convert(root, path) for path in svgs]


def svg2png2(pvd: str) -> None:
    """Convert the svg into png using image magick"""

    def _convert(base: str, path: str):
        path_src = os.path.join(base, path)
        path_dest = path_src.replace(".svg", ".png")
        subprocess.run([cfg.CMD_SVG2PNG_IM, *cfg.CMD_SVG2PNG_IM_OPTS, path_src, path_dest])
        subprocess.run(["rm", path_src])

    for root, _, files in os.walk(resource_dir(pvd)):
        svgs = filter(lambda f: f.endswith(".svg"), files)
        [_convert(root, path) for path in svgs]


# fmt: off
commands = {
    "clean": clean_png,
    "round": round_png,
    "svg2png": svg2png,
    "svg2png2": svg2png2,
}
# fmt: on

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print(_usage)
        sys.exit()

    cmd = sys.argv[1]
    pvd = sys.argv[2]
    if cmd not in commands:
        sys.exit()
    if pvd not in cfg.PROVIDERS:
        sys.exit()
    commands[cmd](pvd)



File: scripts/__init__.py

import os
from pathlib import Path

import config as cfg


def base_dir() -> Path:
    return Path(os.path.abspath(os.path.dirname(__file__))).parent


def app_root_dir(pvd: str) -> str:
    return os.path.join(base_dir(), cfg.DIR_APP_ROOT, pvd)


def doc_root_dir() -> str:
    return os.path.join(base_dir(), cfg.DIR_DOC_ROOT)


def resource_dir(pvd: str) -> str:
    return os.path.join(base_dir(), cfg.DIR_RESOURCE, pvd)


def template_dir() -> str:
    return os.path.join(base_dir(), cfg.DIR_TEMPLATE)



![diagrams logo](assets/img/diagrams.png)

# Diagrams

[![license](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE)
[![pypi version](https://badge.fury.io/py/diagrams.svg)](https://badge.fury.io/py/diagrams)
![python version](https://img.shields.io/badge/python-%3E%3D%203.6-blue?logo=python)
![Run tests](https://github.com/mingrammer/diagrams/workflows/Run%20tests/badge.svg?branch=master)
[![todos](https://badgen.net/https/api.tickgit.com/badgen/github.com/mingrammer/diagrams?label=todos)](https://www.tickgit.com/browse?repo=github.com/mingrammer/diagrams)
![contributors](https://img.shields.io/github/contributors/mingrammer/diagrams)

<a href="https://www.buymeacoffee.com/mingrammer" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" ></a>

**Diagram as Code**.

Diagrams lets you draw the cloud system architecture **in Python code**. It was born for **prototyping** a new system architecture design without any design tools. You can also describe or visualize the existing system architecture as well. Diagrams currently supports main major providers including: `AWS`, `Azure`, `GCP`, `Kubernetes`, `Alibaba Cloud`, `Oracle Cloud` etc... It also supports `On-Premise` nodes, `SaaS` and major `Programming` frameworks and languages.

**Diagram as Code** also allows you to **track** the architecture diagram changes in any **version control** system.

>  NOTE: It does not control any actual cloud resources nor does it generate cloud formation or terraform code. It is just for drawing the cloud system architecture diagrams.

## Providers

![aws provider](https://img.shields.io/badge/AWS-orange?logo=amazon-aws&color=ff9900)
![azure provider](https://img.shields.io/badge/Azure-orange?logo=microsoft-azure&color=0089d6)
![gcp provider](https://img.shields.io/badge/GCP-orange?logo=google-cloud&color=4285f4)
![ibm provider](https://img.shields.io/badge/IBM-orange?logo=ibm&color=052FAD)
![kubernetes provider](https://img.shields.io/badge/Kubernetes-orange?logo=kubernetes&color=326ce5)
![alibaba cloud provider](https://img.shields.io/badge/AlibabaCloud-orange?logo=alibaba-cloud&color=ff6a00)
![oracle cloud provider](https://img.shields.io/badge/OracleCloud-orange?logo=oracle&color=f80000)
![openstack provider](https://img.shields.io/badge/OpenStack-orange?logo=openstack&color=da1a32)
![firebase provider](https://img.shields.io/badge/Firebase-orange?logo=firebase&color=FFCA28)
![digital ocean provider](https://img.shields.io/badge/DigitalOcean-0080ff?logo=digitalocean&color=0080ff)
![elastic provider](https://img.shields.io/badge/Elastic-orange?logo=elastic&color=005571)
![outscale provider](https://img.shields.io/badge/OutScale-orange?color=5f87bf)
![on premise provider](https://img.shields.io/badge/OnPremise-orange?color=5f87bf)
![generic provider](https://img.shields.io/badge/Generic-orange?color=5f87bf)
![programming provider](https://img.shields.io/badge/Programming-orange?color=5f87bf)
![saas provider](https://img.shields.io/badge/SaaS-orange?color=5f87bf)
![c4 provider](https://img.shields.io/badge/C4-orange?color=5f87bf)

## Getting Started

It requires **Python 3.7** or higher, check your Python version first.

It uses [Graphviz](https://www.graphviz.org/) to render the diagram, so you need to [install Graphviz](https://graphviz.gitlab.io/download/) to use **diagrams**. After installing graphviz (or already have it), install the **diagrams**.

> macOS users can download the Graphviz via `brew install graphviz` if you're using [Homebrew](https://brew.sh).

```shell
# using pip (pip3)
$ pip install diagrams

# using pipenv
$ pipenv install diagrams

# using poetry
$ poetry add diagrams
```

You can start with [quick start](https://diagrams.mingrammer.com/docs/getting-started/installation#quick-start). Check out [guides](https://diagrams.mingrammer.com/docs/guides/diagram) for more details, and you can find all available nodes list in [here](https://diagrams.mingrammer.com/docs/nodes/aws).

## Examples

| Event Processing                                             | Stateful Architecture                                        | Advanced Web Service                                         |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| ![event processing](https://diagrams.mingrammer.com/img/event_processing_diagram.png) | ![stateful architecture](https://diagrams.mingrammer.com/img/stateful_architecture_diagram.png) | ![advanced web service with on-premise](https://diagrams.mingrammer.com/img/advanced_web_service_with_on-premise.png) |

You can find all the examples on the [examples](https://diagrams.mingrammer.com/docs/getting-started/examples) page.

## Contributing

To contribute to diagram, check out [contribution guidelines](CONTRIBUTING.md).

> Let me know if you are using diagrams! I'll add you in showcase page. (I'm working on it!) :)

## Who uses it?

[Apache Airflow](https://github.com/apache/airflow) is the most popular data workflow Orchestrator. Airflow uses Diagrams to generate architecture diagrams in their documentation.

[Cloudiscovery](https://github.com/Cloud-Architects/cloudiscovery) helps you to analyze resources in your cloud (AWS/GCP/Azure/Alibaba/IBM) account. It allows you to create a diagram of analyzed cloud resource map based on this Diagrams library, so you can draw your existing cloud infrastructure with Cloudiscovery.

[Airflow Diagrams](https://github.com/feluelle/airflow-diagrams) is an Airflow plugin that aims to easily visualise your Airflow DAGs on service level from providers like AWS, GCP, Azure, etc. via diagrams.

## Other languages

- If you are familiar with Go, you can use [go-diagrams](https://github.com/blushft/go-diagrams) as well.

## License

[MIT](LICENSE)
