Skip to main content

aioh2

https://img.shields.io/pypi/v/aioh2.svg https://img.shields.io/travis/decentfox/aioh2.svg Documentation Status

HTTP/2 implementation with hyper-h2 on Python 3 asyncio.

Features

  • Asynchronous HTTP/2 client and server

  • Multiplexing streams of data with managed flow and priority control

  • Optional tickless health check

  • More to come

Non-features:

  • Request/Response wrappers

  • Web server, dispatcher, cookie, etc

  • HTTP/2 upgrade

Example

A server saying hello:

# Server request handler
async def on_connected(proto):
    try:
        while True:
            # Receive a request from queue
            stream_id, headers = await proto.recv_request()

            # Send response headers
            await proto.start_response(stream_id, {':status': '200'})

            # Response body starts with "hello"
            await proto.send_data(stream_id, b'hello, ')

            # Read all request body as a name from client side
            name = await proto.read_stream(stream_id, -1)

            # Amend response body with the name
            await proto.send_data(stream_id, name)

            # Send trailers with the length of the name
            await proto.send_trailers(stream_id, {'len': str(len(name))})
    except asyncio.CancelledError:
        # do cleanup here
        pass

# Start server on random port, with maximum concurrent requests of 3
server = await aioh2.start_server(on_connected, port=0, concurrency=3)
port = server.sockets[0].getsockname()[1]

And a client to try out:

# Open client connection
client = await aioh2.open_connection('0.0.0.0', port,
                                     functional_timeout=0.1)

# Optionally wait for an ack of tickless ping - a.k.a. until functional
await asyncio.sleep(0.1)  # simulate client being busy with something else
rtt = await client.wait_functional()
if rtt:
    print('Round-trip time: %.1fms' % (rtt * 1000))

# Start request with headers
stream_id = await client.start_request(
    {':method': 'GET', ':path': '/index.html'})

# Send my name "world" as whole request body
await client.send_data(stream_id, b'world', end_stream=True)

# Receive response headers
headers = await client.recv_response(stream_id)
print('Response headers:', headers)

# Read all response body
resp = await client.read_stream(stream_id, -1)
print('Response body:', resp)

# Read response trailers
trailers = await client.recv_trailers(stream_id)
print('Response trailers:', trailers)

client.close_connection()
await asyncio.sleep(.1)

Above example can be found at examples/core.py.

Credits

A big thanks to the great library hyper-h2 from Cory Benfield.

DecentFoX Studio is a software outsourcing company delivering high-quality web-based products and mobile apps for global customers with agile methodology, focusing on bleeding-edge technologies and fast-developing scalable architectures.

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.2.1 (2017-12-03)

  • Updated to h2 3.0 (Contributed by Arthur Darcet and Peter Wu)

  • Dropped support for Python 3.3

0.1.0 (2016-2-6)

  • First release on PyPI.

Metadata

Release files for aioh2 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aioh2 0.2.3
File Size Uploaded
aioh2-0.2.3.tar.gz 24.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aioh2 0.2.3
File Interpreter ABI Platform
aioh2-0.2.3-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 36.3 kB

Release files / aioh2-0.2.3.tar.gz

Download URL aioh2-0.2.3.tar.gz
Size 24.7 kB
Tags Source
SHA-256 checksum
How to use checksums
9f6ed71db16c410abf74dbe900def8f11429ba19edcf1037b865fc03668d3bd7
BLAKE2b-256 checksum
How to use checksums
c2925f598d7475bc1df25d87614b5ad74bd20d2db2fc78270d30c9b1568939c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Release files / aioh2-0.2.3-py2.py3-none-any.whl

Download URL aioh2-0.2.3-py2.py3-none-any.whl
Size 11.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
a4d09801b46a6cc9101d6c97e1886428469db10aaa2736a45fa89d0467c75821
BLAKE2b-256 checksum
How to use checksums
f704d66eb5b20378bcb91f5b58b20fc7d5bddb4c6cec2b0892530ad7fca69416
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 release files

0.2.2

1 release file

0.2.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page