Skip to main content

Easily generate type-safe and async Python applications from AsyncAPI 3 specifications.

Project description

AsyncAPI Python Code Generator

[!IMPORTANT] Although commits to dev branch might seem infrequent, the project is under active development as of March 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 Application class 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.10
  • pydantic>=2
  • pytz
  • For codegen extra
    • jinja2
    • typer
    • datamodel-code-generator
    • pyyaml
  • For amqp extra
    • aio-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.2.5",  # 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asyncapi_python-0.3.0.tar.gz (189.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

asyncapi_python-0.3.0-py3-none-any.whl (96.1 kB view details)

Uploaded Python 3

File details

Details for the file asyncapi_python-0.3.0.tar.gz.

File metadata

  • Download URL: asyncapi_python-0.3.0.tar.gz
  • Upload date:
  • Size: 189.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for asyncapi_python-0.3.0.tar.gz
Algorithm Hash digest
SHA256 d7de3598499c4983f3399f6cddca3c4b0ab00d477532550fdbeaff650986046b
MD5 6c76587bbb10a5622a8bc92515ba890b
BLAKE2b-256 86e6ac99ae4cbe5656bf34498d25f6518061e94c27448c520e22cb62c133c803

See more details on using hashes here.

Provenance

The following attestation bundles were made for asyncapi_python-0.3.0.tar.gz:

Publisher: release.yml on G-USI/asyncapi-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file asyncapi_python-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for asyncapi_python-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3177bdfaa333498a83b3297044a3f84de98c163b9b92bf082a9c4a8c2701dcdb
MD5 f1f93b6f0223ed25392a629a983b673d
BLAKE2b-256 9cc8d3977a92559fe3ccc75b47679b16fe05ac89f533337c7c336a4283809820

See more details on using hashes here.

Provenance

The following attestation bundles were made for asyncapi_python-0.3.0-py3-none-any.whl:

Publisher: release.yml on G-USI/asyncapi-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page