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
Release history Release notifications | RSS feed
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.1.tar.gz
(21.8 kB
view hashes)