Skip to main content

AIOHTTP Connector for running ASGI applications

Project description

aiohttp-asgi-connector

GitHub Workflow Status PyPI - Downloads GitHub

An AIOHTTP ClientSession connector for interacting with ASGI applications.

This library intends to increase the parity between AIOHTTP and HTTPX, specifically with HTTPX's AsyncClient. It is primarily intended to be used in test suite scenarios, or other situations where one would want to interface with an ASGI application directly instead of through a web server.

Supports AIOHTTP 3.1+ on corresponding compatible Python versions.

Installation

$ pdm add aiohttp-asgi-connector
# or
$ python -m pip install --user aiohttp-asgi-connector

Usage

This library replaces the entire connection stack and underlying HTTP transport. AIOHTTP exposes custom connectors via the connector argument supplied when creating a ClientSession instance.

To use the ASGIApplicationConnector:

import asyncio
from typing import Annotated  # or from typing_extensions

from aiohttp_asgi_connector import ASGIApplicationConnector
from aiohttp import ClientSession
from fastapi import FastAPI, Body

app = FastAPI()

@app.post("/ping")
async def pong(message: Annotated[str, Body(embed=True)]):
    return {"broadcast": f"Application says '{message}'!"}

async def main():
    connector = ASGIApplicationConnector(app)
    async with ClientSession(base_url="http://localhost", connector=connector) as session:
        async with session.post("/ping", json={"message": "hello"}) as resp:
            print(await resp.json())
            # ==> {'broadcast': "Application says 'hello'!"}

asyncio.run(main())

Exceptions raised within the ASGI application that are not handled by middleware are propagated.

This connector transmits the request to the ASGI application exactly as it is serialized by AIOHTTP. If upload chunking or compression are enabled for your ClientSession requests, your ASGI application will need to be able to handle de-chunking and de-compressing; FastAPI / Starlette do not do this by default. Support to enable connector-side dechunking and decompressing may come as a future feature if a need is demonstrated for it (file an Issue).

This library does not handle ASGI lifespan events. If you want to run those events, use this library in conjunction with something like asgi-lifespan:

from asgi_lifespan import LifespanManager

async with LifespanManager(app) as manager:
    connector = ASGIApplicationConnector(manager.app)
    async with ClientSession(base_url="http://localhost", connector=connector) as session:
        ...

License

This software is licensed under the BSD 3-Clause License.

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

aiohttp_asgi_connector-1.1.2.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

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

aiohttp_asgi_connector-1.1.2-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file aiohttp_asgi_connector-1.1.2.tar.gz.

File metadata

  • Download URL: aiohttp_asgi_connector-1.1.2.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.25.2 CPython/3.11.2 Linux/5.15.167.4-microsoft-standard-WSL2

File hashes

Hashes for aiohttp_asgi_connector-1.1.2.tar.gz
Algorithm Hash digest
SHA256 6e89b1c0b422787b6021e28de5d381a702435b0a56a2828d0c39e4f73c114f78
MD5 a49792ea1852747bc0510eddf51a46ae
BLAKE2b-256 167d4ccb494487aa491420a8d005539460ebb33fb280cecfb04e822767c68080

See more details on using hashes here.

File details

Details for the file aiohttp_asgi_connector-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: aiohttp_asgi_connector-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.25.2 CPython/3.11.2 Linux/5.15.167.4-microsoft-standard-WSL2

File hashes

Hashes for aiohttp_asgi_connector-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9f0d76a2b0c131d790a0c7f56baf939d10daf4c1a0fa8d6bd4974d3da57745aa
MD5 397c91ccc45e3070a10a24b60e5bb540
BLAKE2b-256 704e5e25ab24ca0e4f873ea439a721ddf5b25dff29fc4a46afd2952a00af3e4e

See more details on using hashes here.

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