AsyncAPI Python Code Generator
[!IMPORTANT] Although commits to dev branch might seem infrequent, the project is under active development as of April 2026.
We currently produce only those changes that are required to satisfy our personal use cases.
The number of commits will grow as we see increase in popularity of it, so do not hesitate to star this repo, open issues, and pull requests.
Link to this github repository
Easily generate type-safe and async Python applications from AsyncAPI 3 specifications.
Features
- Creates
Applicationclass from AsyncAPI 3 specifications, implementing every operation in the file - Generates typed Python code (messages are generated using datamodel-code-generator)
- Performs dynamic validation of messages with Pydantic 2
- Enforces the user code to implement all consumer methods as described by spec
- Provides async code
- Spec parser references other files through absolute or relative paths
- Spec parser references other files through url
- Supports request-reply pattern
- Supports publish-subscribe pattern
- AsyncAPI trait support
- Customizable message encoder/decoder
- Works as a plugin for pantsbuild (see instructions below)
Requirements
python>=3.10pydantic>=2pytz- For
codegenextrajinja2typerdatamodel-code-generatorpyyaml
- For
amqpextraaio-pika
Installation
For code generation (development env), run:
pip install asyncapi-python[codegen]
For runtime, run:
pip install asyncapi-python[amqp]
You can replace amqp with any other supported protocols. For more info, see Supported Protocols section.
Usage as a Pants plugin
The following method was tested with pants version 2.23.1. Pleas note that Pants plugin API is still in development and things might break.
This library can act as a plugin for Pants. More specifically, it creates a new target type: asyncapi_python_service -- which can be used like:
# BUILD
asyncapi_python_service(
name="asyncapi_app",
service="app.asyncapi.yaml",
sources=[
"app.asyncapi.yaml",
"lib.asyncapi.yaml",
"commons.*.asyncapi.yaml"
]
)
This will be generating python module named asyncapi_app on codegen-export, and export goals.
This target can later be used as a dependency of python_sources.
# BUILD
python_sources(
dependencies=[
":asyncapi_app",
":reqs",
],
)
python_requirements(
name="reqs",
)
Note that this plugin does not do dependency injection, so asyncapi-python must be a dependency
# requirements.txt
asyncapi-python[amqp]
Deploying this plugin into your pants monorepo
# pants.toml
plugins = [
"asyncapi_python[codegen]==0.3.1", # Plugin version MUST match the version of your python clients
...
]
backend_packages = [
"asyncapi_python_pants",
...
]
pythonpath = ["%(buildroot)s/pants-plugins"]
When everything is done, test if the plugin works by running pants export-codegen ::
Supported Protocols / Use Cases
Below, you may see the table of protocols and the supported use cases. The tick signs (✅) contain links to the examples for each implemented protocol-use case pair, while the hammer signs (🔨) contain links to the Issues tracking the progress for protocol-use case pairs. The list of protocols and use cases is expected to increase over the progress of development.
| Use Case | AMQP |
|---|---|
| Pub-Sub | ✅ amqp-pub-sub |
| Work Queue | ✅ amqp-work-queue |
| RPC | ✅ amqp-rpc |
Documentation
Although there's no documentation available at the moment, a set of comprehensive examples with comments for each implemented use-case is under the examples directory.
Contributing
Contributions are welcome! Please feel free to open an Issue or submit a Pull Request.
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Release files for asyncapi-python 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| asyncapi_python-0.3.1.tar.gz | 194.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| asyncapi_python-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 290.1 kB
Release files / asyncapi_python-0.3.1.tar.gz
| Download URL | asyncapi_python-0.3.1.tar.gz |
|---|---|
| Size | 194.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ba0b325fd0a879ce3fe59a5ae3fd63ade72aab807c555f3238e33da123315541
|
|
BLAKE2b-256 checksum How to use checksums |
721a89a11ef4d99517ab1ee57b649d019beffce921bbb7f63c82978a0046bb56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 4, 2026.
Transparency logRelease files / asyncapi_python-0.3.1-py3-none-any.whl
| Download URL | asyncapi_python-0.3.1-py3-none-any.whl |
|---|---|
| Size | 96.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
66d1959763a45a0f4cd15eebb219b64938be96d17c265eb3c5e2dadeda6d649c
|
|
BLAKE2b-256 checksum How to use checksums |
1d44c871f41679f68065a0e31c2c1d42d181cd1f052f48161a2446990e8cc9f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 4, 2026.
Transparency log