Updated dociq.py with new Azure architecture diagram

pull/1146/head
Rajesh-Singh3 5 months ago
parent 95f1bbabe9
commit 19901b2063

@ -0,0 +1 @@
- @azure Rule - Use Azure Best Practices: When generating code for Azure, running terminal commands for Azure, or performing operations related to Azure, invoke your `azure_development-get_best_practices` tool if available.

@ -0,0 +1,28 @@
Copyright 2010 Pallets
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

@ -0,0 +1,92 @@
Metadata-Version: 2.1
Name: MarkupSafe
Version: 3.0.2
Summary: Safely add untrusted strings to HTML/XML markup.
Maintainer-email: Pallets <contact@palletsprojects.com>
License: Copyright 2010 Pallets
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Project-URL: Donate, https://palletsprojects.com/donate
Project-URL: Documentation, https://markupsafe.palletsprojects.com/
Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/
Project-URL: Source, https://github.com/pallets/markupsafe/
Project-URL: Chat, https://discord.gg/pallets
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Text Processing :: Markup :: HTML
Classifier: Typing :: Typed
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE.txt
# MarkupSafe
MarkupSafe implements a text object that escapes characters so it is
safe to use in HTML and XML. Characters that have special meanings are
replaced so that they display as the actual characters. This mitigates
injection attacks, meaning untrusted user input can safely be displayed
on a page.
## Examples
```pycon
>>> from markupsafe import Markup, escape
>>> # escape replaces special characters and wraps in Markup
>>> escape("<script>alert(document.cookie);</script>")
Markup('&lt;script&gt;alert(document.cookie);&lt;/script&gt;')
>>> # wrap in Markup to mark text "safe" and prevent escaping
>>> Markup("<strong>Hello</strong>")
Markup('<strong>hello</strong>')
>>> escape(Markup("<strong>Hello</strong>"))
Markup('<strong>hello</strong>')
>>> # Markup is a str subclass
>>> # methods and operators escape their arguments
>>> template = Markup("Hello <em>{name}</em>")
>>> template.format(name='"World"')
Markup('Hello <em>&#34;World&#34;</em>')
```
## Donate
The Pallets organization develops and supports MarkupSafe and other
popular packages. In order to grow the community of contributors and
users, and allow the maintainers to devote more time to the projects,
[please donate today][].
[please donate today]: https://palletsprojects.com/donate

@ -0,0 +1,14 @@
MarkupSafe-3.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
MarkupSafe-3.0.2.dist-info/LICENSE.txt,sha256=RjHsDbX9kKVH4zaBcmTGeYIUM4FG-KyUtKV_lu6MnsQ,1503
MarkupSafe-3.0.2.dist-info/METADATA,sha256=nhoabjupBG41j_JxPCJ3ylgrZ6Fx8oMCFbiLF9Kafqc,4067
MarkupSafe-3.0.2.dist-info/RECORD,,
MarkupSafe-3.0.2.dist-info/WHEEL,sha256=62QJgqtUFevqILau0n0UncooEMoOyVCKVQitJpcuCig,101
MarkupSafe-3.0.2.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11
markupsafe/__init__.py,sha256=pREerPwvinB62tNCMOwqxBS2YHV6R52Wcq1d-rB4Z5o,13609
markupsafe/__pycache__/__init__.cpython-312.pyc,,
markupsafe/__pycache__/_native.cpython-312.pyc,,
markupsafe/_native.py,sha256=2ptkJ40yCcp9kq3L1NqpgjfpZB-obniYKFFKUOkHh4Q,218
markupsafe/_speedups.c,sha256=SglUjn40ti9YgQAO--OgkSyv9tXq9vvaHyVhQows4Ok,4353
markupsafe/_speedups.cp312-win_amd64.pyd,sha256=sC88mCi7HJOQhbSSrdMPZfdCvi_VBfOzwkVuQ7V6T3M,13312
markupsafe/_speedups.pyi,sha256=LSDmXYOefH4HVpAXuL8sl7AttLw0oXh1njVoVZp2wqQ,42
markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0

@ -0,0 +1,5 @@
Wheel-Version: 1.0
Generator: setuptools (75.2.0)
Root-Is-Purelib: false
Tag: cp312-cp312-win_amd64

@ -0,0 +1,20 @@
Copyright (c) 2017-2021 Ingy döt Net
Copyright (c) 2006-2016 Kirill Simonov
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,46 @@
Metadata-Version: 2.1
Name: PyYAML
Version: 6.0.2
Summary: YAML parser and emitter for Python
Home-page: https://pyyaml.org/
Download-URL: https://pypi.org/project/PyYAML/
Author: Kirill Simonov
Author-email: xi@resolvent.net
License: MIT
Project-URL: Bug Tracker, https://github.com/yaml/pyyaml/issues
Project-URL: CI, https://github.com/yaml/pyyaml/actions
Project-URL: Documentation, https://pyyaml.org/wiki/PyYAMLDocumentation
Project-URL: Mailing lists, http://lists.sourceforge.net/lists/listinfo/yaml-core
Project-URL: Source Code, https://github.com/yaml/pyyaml
Platform: Any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Cython
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Text Processing :: Markup
Requires-Python: >=3.8
License-File: LICENSE
YAML is a data serialization format designed for human readability
and interaction with scripting languages. PyYAML is a YAML parser
and emitter for Python.
PyYAML features a complete YAML 1.1 parser, Unicode support, pickle
support, capable extension API, and sensible error messages. PyYAML
supports standard YAML tags and provides Python-specific tags that
allow to represent an arbitrary Python object.
PyYAML is applicable for a broad range of tasks from complex
configuration files to object serialization and persistence.

@ -0,0 +1,43 @@
PyYAML-6.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
PyYAML-6.0.2.dist-info/LICENSE,sha256=jTko-dxEkP1jVwfLiOsmvXZBAqcoKVQwfT5RZ6V36KQ,1101
PyYAML-6.0.2.dist-info/METADATA,sha256=9lwXqTOrXPts-jI2Lo5UwuaAYo0hiRA0BZqjch0WjAk,2106
PyYAML-6.0.2.dist-info/RECORD,,
PyYAML-6.0.2.dist-info/WHEEL,sha256=c7SWG1_hRvc9HXHEkmWlTu1Jr4WpzRucfzqTP-_8q0s,102
PyYAML-6.0.2.dist-info/top_level.txt,sha256=rpj0IVMTisAjh_1vG3Ccf9v5jpCQwAz6cD1IVU5ZdhQ,11
_yaml/__init__.py,sha256=04Ae_5osxahpJHa3XBZUAf4wi6XX32gR8D6X6p64GEA,1402
_yaml/__pycache__/__init__.cpython-312.pyc,,
yaml/__init__.py,sha256=N35S01HMesFTe0aRRMWkPj0Pa8IEbHpE9FK7cr5Bdtw,12311
yaml/__pycache__/__init__.cpython-312.pyc,,
yaml/__pycache__/composer.cpython-312.pyc,,
yaml/__pycache__/constructor.cpython-312.pyc,,
yaml/__pycache__/cyaml.cpython-312.pyc,,
yaml/__pycache__/dumper.cpython-312.pyc,,
yaml/__pycache__/emitter.cpython-312.pyc,,
yaml/__pycache__/error.cpython-312.pyc,,
yaml/__pycache__/events.cpython-312.pyc,,
yaml/__pycache__/loader.cpython-312.pyc,,
yaml/__pycache__/nodes.cpython-312.pyc,,
yaml/__pycache__/parser.cpython-312.pyc,,
yaml/__pycache__/reader.cpython-312.pyc,,
yaml/__pycache__/representer.cpython-312.pyc,,
yaml/__pycache__/resolver.cpython-312.pyc,,
yaml/__pycache__/scanner.cpython-312.pyc,,
yaml/__pycache__/serializer.cpython-312.pyc,,
yaml/__pycache__/tokens.cpython-312.pyc,,
yaml/_yaml.cp312-win_amd64.pyd,sha256=Bx7e_LEQx7cnd1_A9_nClp3X77g-_Lw1aoAAtYZbwWk,263680
yaml/composer.py,sha256=_Ko30Wr6eDWUeUpauUGT3Lcg9QPBnOPVlTnIMRGJ9FM,4883
yaml/constructor.py,sha256=kNgkfaeLUkwQYY_Q6Ff1Tz2XVw_pG1xVE9Ak7z-viLA,28639
yaml/cyaml.py,sha256=6ZrAG9fAYvdVe2FK_w0hmXoG7ZYsoYUwapG8CiC72H0,3851
yaml/dumper.py,sha256=PLctZlYwZLp7XmeUdwRuv4nYOZ2UBnDIUy8-lKfLF-o,2837
yaml/emitter.py,sha256=jghtaU7eFwg31bG0B7RZea_29Adi9CKmXq_QjgQpCkQ,43006
yaml/error.py,sha256=Ah9z-toHJUbE9j-M8YpxgSRM5CgLCcwVzJgLLRF2Fxo,2533
yaml/events.py,sha256=50_TksgQiE4up-lKo_V-nBy-tAIxkIPQxY5qDhKCeHw,2445
yaml/loader.py,sha256=UVa-zIqmkFSCIYq_PgSGm4NSJttHY2Rf_zQ4_b1fHN0,2061
yaml/nodes.py,sha256=gPKNj8pKCdh2d4gr3gIYINnPOaOxGhJAUiYhGRnPE84,1440
yaml/parser.py,sha256=ilWp5vvgoHFGzvOZDItFoGjD6D42nhlZrZyjAwa0oJo,25495
yaml/reader.py,sha256=0dmzirOiDG4Xo41RnuQS7K9rkY3xjHiVasfDMNTqCNw,6794
yaml/representer.py,sha256=IuWP-cAW9sHKEnS0gCqSa894k1Bg4cgTxaDwIcbRQ-Y,14190
yaml/resolver.py,sha256=9L-VYfm4mWHxUD1Vg4X7rjDRK_7VZd6b92wzq7Y2IKY,9004
yaml/scanner.py,sha256=YEM3iLZSaQwXcQRg2l2R4MdT0zGP2F9eHkKGKnHyWQY,51279
yaml/serializer.py,sha256=ChuFgmhU01hj4xgI8GaKv6vfM2Bujwa9i7d2FAHj7cA,4165
yaml/tokens.py,sha256=lTQIzSVw8Mg9wv459-TjiOQe6wVziqaRlqX2_89rp54,2573

@ -0,0 +1,5 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.44.0)
Root-Is-Purelib: false
Tag: cp312-cp312-win_amd64

@ -0,0 +1,33 @@
# This is a stub package designed to roughly emulate the _yaml
# extension module, which previously existed as a standalone module
# and has been moved into the `yaml` package namespace.
# It does not perfectly mimic its old counterpart, but should get
# close enough for anyone who's relying on it even when they shouldn't.
import yaml
# in some circumstances, the yaml module we imoprted may be from a different version, so we need
# to tread carefully when poking at it here (it may not have the attributes we expect)
if not getattr(yaml, '__with_libyaml__', False):
from sys import version_info
exc = ModuleNotFoundError if version_info >= (3, 6) else ImportError
raise exc("No module named '_yaml'")
else:
from yaml._yaml import *
import warnings
warnings.warn(
'The _yaml extension module is now located at yaml._yaml'
' and its location is subject to change. To use the'
' LibYAML-based parser and emitter, import from `yaml`:'
' `from yaml import CLoader as Loader, CDumper as Dumper`.',
DeprecationWarning
)
del warnings
# Don't `del yaml` here because yaml is actually an existing
# namespace member of _yaml.
__name__ = '_yaml'
# If the module is top-level (i.e. not a part of any specific package)
# then the attribute should be set to ''.
# https://docs.python.org/3.8/library/types.html
__package__ = ''

@ -0,0 +1,19 @@
Copyright (c) 2018 Anthony Sottile
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

@ -0,0 +1,301 @@
Metadata-Version: 2.1
Name: cfgv
Version: 3.4.0
Summary: Validate configuration and produce human readable error messages.
Home-page: https://github.com/asottile/cfgv
Author: Anthony Sottile
Author-email: asottile@umich.edu
License: MIT
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
[![build status](https://github.com/asottile/cfgv/actions/workflows/main.yml/badge.svg)](https://github.com/asottile/cfgv/actions/workflows/main.yml)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/asottile/cfgv/main.svg)](https://results.pre-commit.ci/latest/github/asottile/cfgv/main)
cfgv
====
Validate configuration and produce human readable error messages.
## Installation
```bash
pip install cfgv
```
## Sample error messages
These are easier to see by example. Here's an example where I typo'd `true`
in a [pre-commit](https://pre-commit.com) configuration.
```
pre_commit.clientlib.InvalidConfigError:
==> File /home/asottile/workspace/pre-commit/.pre-commit-config.yaml
==> At Config()
==> At key: repos
==> At Repository(repo='https://github.com/pre-commit/pre-commit-hooks')
==> At key: hooks
==> At Hook(id='flake8')
==> At key: always_run
=====> Expected bool got str
```
## API
### `cfgv.validate(value, schema)`
Perform validation on the schema:
- raises `ValidationError` on failure
- returns the value on success (for convenience)
### `cfgv.apply_defaults(value, schema)`
Returns a new value which sets all missing optional values to their defaults.
### `cfgv.remove_defaults(value, schema)`
Returns a new value which removes all optional values that are set to their
defaults.
### `cfgv.load_from_filename(filename, schema, load_strategy, exc_tp=ValidationError)`
Load a file given the `load_strategy`. Reraise any errors as `exc_tp`. All
defaults will be populated in the resulting value.
Most useful when used with `functools.partial` as follows:
```python
load_my_cfg = functools.partial(
cfgv.load_from_filename,
schema=MY_SCHEMA,
load_strategy=json.loads,
exc_tp=MyError,
)
```
## Making a schema
A schema validates a container -- `cfgv` provides `Map` and `Array` for
most normal cases.
### writing your own schema container
If the built-in containers below don't quite satisfy your usecase, you can
always write your own. Containers use the following interface:
```python
class Container(object):
def check(self, v):
"""check the passed in value (do not modify `v`)"""
def apply_defaults(self, v):
"""return a new value with defaults applied (do not modify `v`)"""
def remove_defaults(self, v):
"""return a new value with defaults removed (do not modify `v`)"""
```
### `Map(object_name, id_key, *items)`
The most basic building block for creating a schema is a `Map`
- `object_name`: will be displayed in error messages
- `id_key`: will be used to identify the object in error messages. Set to
`None` if there is no identifying key for the object.
- `items`: validator objects such as `Required` or `Optional`
Consider the following schema:
```python
Map(
'Repo', 'url',
Required('url', check_any),
)
```
In an error message, the map may be displayed as:
- `Repo(url='https://github.com/pre-commit/pre-commit')`
- `Repo(url=MISSING)` (if the key is not present)
### `Array(of, allow_empty=True)`
Used to nest maps inside of arrays. For arrays of scalars, see `check_array`.
- `of`: A `Map` / `Array` or other sub-schema.
- `allow_empty`: when `False`, `Array` will ensure at least one element.
When validated, this will check that each element adheres to the sub-schema.
## Validator objects
Validator objects are used to validate key-value-pairs of a `Map`.
### writing your own validator
If the built-in validators below don't quite satisfy your usecase, you can
always write your own. Validators use the following interface:
```python
class Validator(object):
def check(self, dct):
"""check that your specific key has the appropriate value in `dct`"""
def apply_default(self, dct):
"""modify `dct` and set the default value if it is missing"""
def remove_default(self, dct):
"""modify `dct` and remove the default value if it is present"""
```
It may make sense to _borrow_ functions from the built in validators. They
additionally use the following interface(s):
- `self.key`: the key to check
- `self.check_fn`: the [check function](#check-functions)
- `self.default`: a default value to set.
### `Required(key, check_fn)`
Ensure that a key is present in a `Map` and adheres to the
[check function](#check-functions).
### `RequiredRecurse(key, schema)`
Similar to `Required`, but uses a [schema](#making-a-schema).
### `Optional(key, check_fn, default)`
If a key is present, check that it adheres to the
[check function](#check-functions).
- `apply_defaults` will set the `default` if it is not present.
- `remove_defaults` will remove the value if it is equal to `default`.
### `OptionalRecurse(key, schema, default)`
Similar to `Optional` but uses a [schema](#making-a-schema).
- `apply_defaults` will set the `default` if it is not present and then
validate it with the schema.
- `remove_defaults` will remove defaults using the schema, and then remove the
value it if it is equal to `default`.
### `OptionalNoDefault(key, check_fn)`
Like `Optional`, but does not `apply_defaults` or `remove_defaults`.
### `Conditional(key, check_fn, condition_key, condition_value, ensure_absent=False)`
- If `condition_key` is equal to the `condition_value`, the specific `key`
will be checked using the [check function](#check-functions).
- If `ensure_absent` is `True` and the condition check fails, the `key` will
be checked for absense.
Note that the `condition_value` is checked for equality, so any object
implementing `__eq__` may be used. A few are provided out of the box
for this purpose, see [equality helpers](#equality-helpers).
### `ConditionalOptional(key, check_fn, default, condition_key, condition_value, ensure_absent=False)`
Similar to ``Conditional`` and ``Optional``.
### `ConditionalRecurse(key, schema, condition_key, condition_value, ensure_absent=True)`
Similar to `Conditional`, but uses a [schema](#making-a-schema).
### `NoAdditionalKeys(keys)`
Use in a mapping to ensure that only the `keys` specified are present.
## Equality helpers
Equality helpers at the very least implement `__eq__` for their behaviour.
They may also implement `def describe_opposite(self):` for use in the
`ensure_absent=True` error message (otherwise, the `__repr__` will be used).
### `Not(val)`
Returns `True` if the value is not equal to `val`.
### `In(*values)`
Returns `True` if the value is contained in `values`.
### `NotIn(*values)`
Returns `True` if the value is not contained in `values`.
## Check functions
A number of check functions are provided out of the box.
A check function takes a single parameter, the `value`, and either raises a
`ValidationError` or returns nothing.
### `check_any(_)`
A noop check function.
### `check_type(tp, typename=None)`
Returns a check function to check for a specific type. Setting `typename`
will replace the type's name in the error message.
For example:
```python
Required('key', check_type(int))
# 'Expected bytes' in both python2 and python3.
Required('key', check_type(bytes, typename='bytes'))
```
Several type checking functions are provided out of the box:
- `check_bool`
- `check_bytes`
- `check_int`
- `check_string`
- `check_text`
### `check_one_of(possible)`
Returns a function that checks that the value is contained in `possible`.
For example:
```python
Required('language', check_one_of(('javascript', 'python', 'ruby')))
```
### `check_regex(v)`
Ensures that `v` is a valid python regular expression.
### `check_array(inner_check)`
Returns a function that checks that a value is a sequence and that each
value in that sequence adheres to the `inner_check`.
For example:
```python
Required('args', check_array(check_string))
```
### `check_and(*fns)`
Returns a function that performs multiple checks on a value.
For example:
```python
Required('language', check_and(check_string, my_check_language))
```

@ -0,0 +1,8 @@
__pycache__/cfgv.cpython-312.pyc,,
cfgv-3.4.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
cfgv-3.4.0.dist-info/LICENSE,sha256=Afw_gDGmcrP119isJi5DLz6oEoCfVpfWvFsnC_ZEZWE,1059
cfgv-3.4.0.dist-info/METADATA,sha256=bknF55QrW050DW54BlRiFw-2hDgnaQHhbjoNS1JvMXw,8545
cfgv-3.4.0.dist-info/RECORD,,
cfgv-3.4.0.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
cfgv-3.4.0.dist-info/top_level.txt,sha256=B_oEtBRII3ENMX1OrlRFqpU4iO4OXC7_nihlUOYiK2c,5
cfgv.py,sha256=k-EgVAOFdu-lmZxOQ5E1NHD3yVxMs7PXDAzIE9VgCAk,12220

@ -0,0 +1,6 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.38.4)
Root-Is-Purelib: true
Tag: py2-none-any
Tag: py3-none-any

@ -0,0 +1,416 @@
from __future__ import annotations
import collections
import contextlib
import os.path
import re
import sys
class ValidationError(ValueError):
def __init__(self, error_msg, ctx=None):
super().__init__(error_msg)
self.error_msg = error_msg
self.ctx = ctx
def __str__(self):
out = '\n'
err = self
while err.ctx is not None:
out += f'==> {err.ctx}\n'
err = err.error_msg
out += f'=====> {err.error_msg}'
return out
MISSING = collections.namedtuple('Missing', ())()
type(MISSING).__repr__ = lambda self: 'MISSING'
@contextlib.contextmanager
def validate_context(msg):
try:
yield
except ValidationError as e:
_, _, tb = sys.exc_info()
raise ValidationError(e, ctx=msg).with_traceback(tb) from None
@contextlib.contextmanager
def reraise_as(tp):
try:
yield
except ValidationError as e:
_, _, tb = sys.exc_info()
raise tp(e).with_traceback(tb) from None
def _dct_noop(self, dct):
pass
def _check_optional(self, dct):
if self.key not in dct:
return
with validate_context(f'At key: {self.key}'):
self.check_fn(dct[self.key])
def _apply_default_optional(self, dct):
dct.setdefault(self.key, self.default)
def _remove_default_optional(self, dct):
if dct.get(self.key, MISSING) == self.default:
del dct[self.key]
def _require_key(self, dct):
if self.key not in dct:
raise ValidationError(f'Missing required key: {self.key}')
def _check_required(self, dct):
_require_key(self, dct)
_check_optional(self, dct)
@property
def _check_fn_recurse(self):
def check_fn(val):
validate(val, self.schema)
return check_fn
def _apply_default_required_recurse(self, dct):
dct[self.key] = apply_defaults(dct[self.key], self.schema)
def _remove_default_required_recurse(self, dct):
dct[self.key] = remove_defaults(dct[self.key], self.schema)
def _apply_default_optional_recurse(self, dct):
if self.key not in dct:
_apply_default_optional(self, dct)
_apply_default_required_recurse(self, dct)
def _remove_default_optional_recurse(self, dct):
if self.key in dct:
_remove_default_required_recurse(self, dct)
_remove_default_optional(self, dct)
def _get_check_conditional(inner):
def _check_conditional(self, dct):
if dct.get(self.condition_key, MISSING) == self.condition_value:
inner(self, dct)
elif (
self.condition_key in dct and
self.ensure_absent and self.key in dct
):
if hasattr(self.condition_value, 'describe_opposite'):
explanation = self.condition_value.describe_opposite()
else:
explanation = f'is not {self.condition_value!r}'
raise ValidationError(
f'Expected {self.key} to be absent when {self.condition_key} '
f'{explanation}, found {self.key}: {dct[self.key]!r}',
)
return _check_conditional
def _apply_default_conditional_optional(self, dct):
if dct.get(self.condition_key, MISSING) == self.condition_value:
_apply_default_optional(self, dct)
def _remove_default_conditional_optional(self, dct):
if dct.get(self.condition_key, MISSING) == self.condition_value:
_remove_default_optional(self, dct)
def _apply_default_conditional_recurse(self, dct):
if dct.get(self.condition_key, MISSING) == self.condition_value:
_apply_default_required_recurse(self, dct)
def _remove_default_conditional_recurse(self, dct):
if dct.get(self.condition_key, MISSING) == self.condition_value:
_remove_default_required_recurse(self, dct)
def _no_additional_keys_check(self, dct):
extra = sorted(set(dct) - set(self.keys))
if extra:
extra_s = ', '.join(str(x) for x in extra)
keys_s = ', '.join(str(x) for x in self.keys)
raise ValidationError(
f'Additional keys found: {extra_s}. '
f'Only these keys are allowed: {keys_s}',
)
def _warn_additional_keys_check(self, dct):
extra = sorted(set(dct) - set(self.keys))
if extra:
self.callback(extra, self.keys, dct)
Required = collections.namedtuple('Required', ('key', 'check_fn'))
Required.check = _check_required
Required.apply_default = _dct_noop
Required.remove_default = _dct_noop
RequiredRecurse = collections.namedtuple('RequiredRecurse', ('key', 'schema'))
RequiredRecurse.check = _check_required
RequiredRecurse.check_fn = _check_fn_recurse
RequiredRecurse.apply_default = _apply_default_required_recurse
RequiredRecurse.remove_default = _remove_default_required_recurse
Optional = collections.namedtuple('Optional', ('key', 'check_fn', 'default'))
Optional.check = _check_optional
Optional.apply_default = _apply_default_optional
Optional.remove_default = _remove_default_optional
OptionalRecurse = collections.namedtuple(
'OptionalRecurse', ('key', 'schema', 'default'),
)
OptionalRecurse.check = _check_optional
OptionalRecurse.check_fn = _check_fn_recurse
OptionalRecurse.apply_default = _apply_default_optional_recurse
OptionalRecurse.remove_default = _remove_default_optional_recurse
OptionalNoDefault = collections.namedtuple(
'OptionalNoDefault', ('key', 'check_fn'),
)
OptionalNoDefault.check = _check_optional
OptionalNoDefault.apply_default = _dct_noop
OptionalNoDefault.remove_default = _dct_noop
Conditional = collections.namedtuple(
'Conditional',
('key', 'check_fn', 'condition_key', 'condition_value', 'ensure_absent'),
)
Conditional.__new__.__defaults__ = (False,)
Conditional.check = _get_check_conditional(_check_required)
Conditional.apply_default = _dct_noop
Conditional.remove_default = _dct_noop
ConditionalOptional = collections.namedtuple(
'ConditionalOptional',
(
'key', 'check_fn', 'default', 'condition_key', 'condition_value',
'ensure_absent',
),
)
ConditionalOptional.__new__.__defaults__ = (False,)
ConditionalOptional.check = _get_check_conditional(_check_optional)
ConditionalOptional.apply_default = _apply_default_conditional_optional
ConditionalOptional.remove_default = _remove_default_conditional_optional
ConditionalRecurse = collections.namedtuple(
'ConditionalRecurse',
('key', 'schema', 'condition_key', 'condition_value', 'ensure_absent'),
)
ConditionalRecurse.__new__.__defaults__ = (False,)
ConditionalRecurse.check = _get_check_conditional(_check_required)
ConditionalRecurse.check_fn = _check_fn_recurse
ConditionalRecurse.apply_default = _apply_default_conditional_recurse
ConditionalRecurse.remove_default = _remove_default_conditional_recurse
NoAdditionalKeys = collections.namedtuple('NoAdditionalKeys', ('keys',))
NoAdditionalKeys.check = _no_additional_keys_check
NoAdditionalKeys.apply_default = _dct_noop
NoAdditionalKeys.remove_default = _dct_noop
WarnAdditionalKeys = collections.namedtuple(
'WarnAdditionalKeys', ('keys', 'callback'),
)
WarnAdditionalKeys.check = _warn_additional_keys_check
WarnAdditionalKeys.apply_default = _dct_noop
WarnAdditionalKeys.remove_default = _dct_noop
class Map(collections.namedtuple('Map', ('object_name', 'id_key', 'items'))):
__slots__ = ()
def __new__(cls, object_name, id_key, *items):
return super().__new__(cls, object_name, id_key, items)
def check(self, v):
if not isinstance(v, dict):
raise ValidationError(
f'Expected a {self.object_name} map but got a '
f'{type(v).__name__}',
)
if self.id_key is None:
context = f'At {self.object_name}()'
else:
key_v_s = v.get(self.id_key, MISSING)
context = f'At {self.object_name}({self.id_key}={key_v_s!r})'
with validate_context(context):
for item in self.items:
item.check(v)
def apply_defaults(self, v):
ret = v.copy()
for item in self.items:
item.apply_default(ret)
return ret
def remove_defaults(self, v):
ret = v.copy()
for item in self.items:
item.remove_default(ret)
return ret
class Array(collections.namedtuple('Array', ('of', 'allow_empty'))):
__slots__ = ()
def __new__(cls, of, allow_empty=True):
return super().__new__(cls, of=of, allow_empty=allow_empty)
def check(self, v):
check_array(check_any)(v)
if not self.allow_empty and not v:
raise ValidationError(
f"Expected at least 1 '{self.of.object_name}'",
)
for val in v:
validate(val, self.of)
def apply_defaults(self, v):
return [apply_defaults(val, self.of) for val in v]
def remove_defaults(self, v):
return [remove_defaults(val, self.of) for val in v]
class Not(collections.namedtuple('Not', ('val',))):
__slots__ = ()
def describe_opposite(self):
return f'is {self.val!r}'
def __eq__(self, other):
return other is not MISSING and other != self.val
class NotIn(collections.namedtuple('NotIn', ('values',))):
__slots__ = ()
def __new__(cls, *values):
return super().__new__(cls, values=values)
def describe_opposite(self):
return f'is any of {self.values!r}'
def __eq__(self, other):
return other is not MISSING and other not in self.values
class In(collections.namedtuple('In', ('values',))):
__slots__ = ()
def __new__(cls, *values):
return super().__new__(cls, values=values)
def describe_opposite(self):
return f'is not any of {self.values!r}'
def __eq__(self, other):
return other is not MISSING and other in self.values
def check_any(_):
pass
def check_type(tp, typename=None):
def check_type_fn(v):
if not isinstance(v, tp):
typename_s = typename or tp.__name__
raise ValidationError(
f'Expected {typename_s} got {type(v).__name__}',
)
return check_type_fn
check_bool = check_type(bool)
check_bytes = check_type(bytes)
check_int = check_type(int)
check_string = check_type(str, typename='string')
check_text = check_type(str, typename='text')
def check_one_of(possible):
def check_one_of_fn(v):
if v not in possible:
possible_s = ', '.join(str(x) for x in sorted(possible))
raise ValidationError(
f'Expected one of {possible_s} but got: {v!r}',
)
return check_one_of_fn
def check_regex(v):
try:
re.compile(v)
except re.error:
raise ValidationError(f'{v!r} is not a valid python regex')
def check_array(inner_check):
def check_array_fn(v):
if not isinstance(v, (list, tuple)):
raise ValidationError(
f'Expected array but got {type(v).__name__!r}',
)
for i, val in enumerate(v):
with validate_context(f'At index {i}'):
inner_check(val)
return check_array_fn
def check_and(*fns):
def check(v):
for fn in fns:
fn(v)
return check
def validate(v, schema):
schema.check(v)
return v
def apply_defaults(v, schema):
return schema.apply_defaults(v)
def remove_defaults(v, schema):
return schema.remove_defaults(v)
def load_from_filename(
filename,
schema,
load_strategy,
exc_tp=ValidationError,
*,
display_filename=None,
):
display_filename = display_filename or filename
with reraise_as(exc_tp):
if not os.path.isfile(filename):
raise ValidationError(f'{display_filename} is not a file')
with validate_context(f'File {display_filename}'):
try:
with open(filename, encoding='utf-8') as f:
contents = f.read()
except UnicodeDecodeError as e:
raise ValidationError(str(e))
try:
data = load_strategy(contents)
except Exception as e:
raise ValidationError(str(e))
validate(data, schema)
return apply_defaults(data, schema)

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 MinJae Kwon
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,117 @@
Metadata-Version: 2.1
Name: diagrams
Version: 0.24.4
Summary: Diagram as Code
Home-page: https://diagrams.mingrammer.com
License: MIT
Author: mingrammer
Author-email: mingrammer@gmail.com
Requires-Python: >=3.9,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Dist: graphviz (>=0.13.2,<0.21.0)
Requires-Dist: jinja2 (>=2.10,<4.0)
Requires-Dist: pre-commit (>=4.0.1,<5.0.0)
Requires-Dist: typed-ast (>=1.5.5,<2.0.0) ; python_version < "3.8"
Project-URL: Repository, https://github.com/mingrammer/diagrams
Description-Content-Type: text/markdown
![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.9-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-Premises` 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 premises provider](https://img.shields.io/badge/OnPremises-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.9** 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-premises](https://diagrams.mingrammer.com/img/advanced_web_service_with_on-premises.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.
[KubeDiagrams](https://github.com/philippemerle/KubeDiagrams) is a tool to generate Kubernetes architecture diagrams from Kubernetes manifest files, kustomization files, Helm charts, and actual cluster state. [KubeDiagrams](https://github.com/philippemerle/KubeDiagrams) supports all Kubernetes built-in resources, any custom resources, and label-based resource clustering.
## Other languages
- If you are familiar with Go, you can use [go-diagrams](https://github.com/blushft/go-diagrams) as well.
## License
[MIT](LICENSE)

File diff suppressed because it is too large Load Diff

@ -0,0 +1,4 @@
Wheel-Version: 1.0
Generator: poetry-core 1.9.1
Root-Is-Purelib: true
Tag: py3-none-any

@ -0,0 +1,3 @@
[console_scripts]
diagrams=diagrams.cli:main

@ -0,0 +1,571 @@
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: Union[str, list[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 = reverse if reverse 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

@ -0,0 +1,16 @@
"""
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"
class AlibabaCloud(_AlibabaCloud):
_icon = "alibabacloud.png"

@ -0,0 +1,31 @@
# 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

@ -0,0 +1,72 @@
# 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

@ -0,0 +1,19 @@
# 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

@ -0,0 +1,83 @@
# 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

@ -0,0 +1,86 @@
# 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

@ -0,0 +1,27 @@
# 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

@ -0,0 +1,52 @@
# 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

@ -0,0 +1,90 @@
# 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

@ -0,0 +1,50 @@
# 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

@ -0,0 +1,19 @@
# 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

@ -0,0 +1,16 @@
"""
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"
class AWS(_AWS):
_icon = "aws.png"

@ -0,0 +1,129 @@
# 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 AmazonOpensearchService(_Analytics):
_icon = "amazon-opensearch-service.png"
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

@ -0,0 +1,19 @@
# 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

@ -0,0 +1,29 @@
# 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

@ -0,0 +1,29 @@
# 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

@ -0,0 +1,179 @@
# 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

@ -0,0 +1,35 @@
# 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

@ -0,0 +1,156 @@
# 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 DynamodbStreams(_Database):
_icon = "dynamodb-streams.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

@ -0,0 +1,66 @@
# 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 Codeartifact(_Devtools):
_icon = "codeartifact.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

@ -0,0 +1,31 @@
# 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

@ -0,0 +1,31 @@
# 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

@ -0,0 +1,33 @@
# 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

@ -0,0 +1,19 @@
# 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

@ -0,0 +1,109 @@
# 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

@ -0,0 +1,87 @@
# 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

@ -0,0 +1,258 @@
# 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

@ -0,0 +1,246 @@
# 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 AmazonDevopsGuru(_Management):
_icon = "amazon-devops-guru.png"
class AmazonManagedGrafana(_Management):
_icon = "amazon-managed-grafana.png"
class AmazonManagedPrometheus(_Management):
_icon = "amazon-managed-prometheus.png"
class AmazonManagedWorkflowsApacheAirflow(_Management):
_icon = "amazon-managed-workflows-apache-airflow.png"
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 CloudwatchLogs(_Management):
_icon = "cloudwatch-logs.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 Proton(_Management):
_icon = "proton.png"
class ServiceCatalog(_Management):
_icon = "service-catalog.png"
class SystemsManagerAppConfig(_Management):
_icon = "systems-manager-app-config.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

@ -0,0 +1,63 @@
# 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

@ -0,0 +1,65 @@
# 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

@ -0,0 +1,129 @@
# 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 Bedrock(_ML):
_icon = "bedrock.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

@ -0,0 +1,39 @@
# 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

@ -0,0 +1,181 @@
# 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 NetworkFirewall(_Network):
_icon = "network-firewall.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 TransitGatewayAttachment(_Network):
_icon = "transit-gateway-attachment.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
IGW = InternetGateway
TGW = TransitGateway
TGWAttach = TransitGatewayAttachment

@ -0,0 +1,19 @@
# 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

@ -0,0 +1,35 @@
# 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

@ -0,0 +1,19 @@
# 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

@ -0,0 +1,179 @@
# 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

@ -0,0 +1,141 @@
# 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 S3AccessPoints(_Storage):
_icon = "s3-access-points.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 S3ObjectLambdaAccessPoints(_Storage):
_icon = "s3-object-lambda-access-points.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

@ -0,0 +1,16 @@
"""
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"
class Azure(_Azure):
_icon = "azure.png"

@ -0,0 +1,59 @@
# 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

@ -0,0 +1,139 @@
# 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

@ -0,0 +1,107 @@
# 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

@ -0,0 +1,47 @@
# 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

@ -0,0 +1,115 @@
# 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

@ -0,0 +1,71 @@
# 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

@ -0,0 +1,87 @@
# 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

@ -0,0 +1,51 @@
# 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

@ -0,0 +1,31 @@
# 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

@ -0,0 +1,51 @@
# 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 AzureOpenAI(_Ml):
_icon = "azure-open-ai.png"
class AzureSpeedToText(_Ml):
_icon = "azure-speed-to-text.png"
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

@ -0,0 +1,23 @@
# 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

@ -0,0 +1,27 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _Azure
class _Monitor(_Azure):
_type = "monitor"
_icon_dir = "resources/azure/monitor"
class ChangeAnalysis(_Monitor):
_icon = "change-analysis.png"
class Logs(_Monitor):
_icon = "logs.png"
class Metrics(_Monitor):
_icon = "metrics.png"
class Monitor(_Monitor):
_icon = "monitor.png"
# Aliases

@ -0,0 +1,123 @@
# 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

@ -0,0 +1,39 @@
# 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

@ -0,0 +1,75 @@
# 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

@ -0,0 +1,51 @@
# 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

@ -0,0 +1,12 @@
"""
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"

@ -0,0 +1,128 @@
"""
A set of nodes and edges to visualize software architecture using the C4 model.
"""
import html
import textwrap
from diagrams import Cluster, Edge, Node
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)]
# fill up with empty lines so it is always three
lines += [""] * (3 - len(lines))
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)

@ -0,0 +1,20 @@
"""
Custom provides the possibility of load an image to be presented as a node.
"""
from diagrams import Node
class Custom(Node):
_provider = "custom"
_type = "custom"
_icon_dir = None
fontcolor = "#ffffff"
def _load_icon(self):
return self._icon
def __init__(self, label, icon_path, *args, **kwargs):
self._icon = icon_path
super().__init__(label, *args, **kwargs)

@ -0,0 +1,16 @@
"""
DigitalOcean provides a set of services for DigitalOcean provider.
"""
from diagrams import Node
class _DigitalOcean(Node):
_provider = "digitalocean"
_icon_dir = "resources/digitalocean"
fontcolor = "#ffffff"
class DigitalOcean(_DigitalOcean):
_icon = "digitalocean.png"

@ -0,0 +1,43 @@
# 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

@ -0,0 +1,27 @@
# 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

@ -0,0 +1,47 @@
# 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

@ -0,0 +1,27 @@
# 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

@ -0,0 +1,16 @@
"""
Elastic provides a set of general elastic services.
"""
from diagrams import Node
class _Elastic(Node):
_provider = "elastic"
_icon_dir = "resources/elastic"
fontcolor = "#ffffff"
class Elastic(_Elastic):
_icon = "elastic.png"

@ -0,0 +1,27 @@
# 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

@ -0,0 +1,43 @@
# 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

@ -0,0 +1,71 @@
# 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

@ -0,0 +1,31 @@
# 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

@ -0,0 +1,31 @@
# 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

@ -0,0 +1,19 @@
# 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

@ -0,0 +1,19 @@
# 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

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save