Asyncio bindings for libnghttp2 based on ctypes
Project description
pynghttp2 are simple asyncio Python bindings based on ctypes for the nghttp2 library. The only thing you need is a libnghttp2 version on your system.
On Debian-based systems you can install nghttp2 simply via apt:
apt-get install libnghttp2-14
The project was created in the context of a student work for an HTTP/2 protocol gateway in the µPCN project - an implementation of Delay-tolerant Networking (DTN) protocols.
Installation
pip install pynghttp2
Examples
High-Level API
from pynghttp2 import http2
# GET request
resp = await http2.get('http://localhost:64602/ping')
content = await resp.text()
assert content == 'pong'
# POST request
message = b"Lorem ipsum dolorem"
resp = await http2.post('http://localhost:64602/echo', data=message)
echo = await resp.read()
assert echo == message
Client Session
from pynghttp2 import ClientSession
# Multiplex two requests
async with ClientSession(host='localhost', port=64602) as session:
stream1 = session.get('http://localhost:64602/stream')
stream2 = session.get('http://localhost:64602/stream')
await asyncio.gather(stream1.read(), stream2.read())
Server Session
import asyncio
from pynghttp2 import ServerSession
async def handle_request(req):
"""Echo the request body"""
msg = await req.read()
await req.response(200, data=msg)
with ServerSession(host='localhost', port=8080) as session:
while True:
# Wait for next incoming request
req = await session
# Handle each request in its own task to be able to multiplex
# multiple requests and responses
asyncio.ensure_future(handle_request(req))
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
pynghttp2-0.3.2.tar.gz
(24.0 kB
view hashes)
Built Distribution
pynghttp2-0.3.2-py3-none-any.whl
(25.2 kB
view hashes)
Close
Hashes for pynghttp2-0.3.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0051bb45c549a4ce4d5bbe8cbde237d50bf84c3366a445c9bc0b27c5e7871937 |
|
MD5 | 32e092936e1e87d75ed358baf1003d6a |
|
BLAKE2b-256 | f951340b717a7f2555c63d1e4a938f435e0fd30bb09b7cfc16c135f9be65d799 |