mirror of https://github.com/mingrammer/diagrams
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 @@
|
||||
pip
|
@ -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('<script>alert(document.cookie);</script>')
|
||||
|
||||
>>> # 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>"World"</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 @@
|
||||
markupsafe
|
@ -0,0 +1 @@
|
||||
pip
|
@ -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,2 @@
|
||||
_yaml
|
||||
yaml
|
@ -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 @@
|
||||
pip
|
@ -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
|
||||
|
||||
[](https://github.com/asottile/cfgv/actions/workflows/main.yml)
|
||||
[](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 @@
|
||||
cfgv
|
@ -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 @@
|
||||
pip
|
@ -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
|
||||
|
||||
[](/LICENSE)
|
||||
[](https://badge.fury.io/py/diagrams)
|
||||

|
||||

|
||||
[](https://www.tickgit.com/browse?repo=github.com/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
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## 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 |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
|  |  |  |
|
||||
|
||||
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…
Reference in new issue