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 details)
Built Distribution
pynghttp2-0.3.2-py3-none-any.whl
(25.2 kB
view details)
File details
Details for the file pynghttp2-0.3.2.tar.gz
.
File metadata
- Download URL: pynghttp2-0.3.2.tar.gz
- Upload date:
- Size: 24.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 42263801c3ab55d5aca188af9fa269fd68eefa5fdb43cb22f7686055b6de7247 |
|
MD5 | 1b5384907ef8d85514615e3dc316fdd1 |
|
BLAKE2b-256 | ac454e13a6d7bef018f10493c7370ca8c9710cf882017881f79fe6043df5f5a8 |
File details
Details for the file pynghttp2-0.3.2-py3-none-any.whl
.
File metadata
- Download URL: pynghttp2-0.3.2-py3-none-any.whl
- Upload date:
- Size: 25.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0051bb45c549a4ce4d5bbe8cbde237d50bf84c3366a445c9bc0b27c5e7871937 |
|
MD5 | 32e092936e1e87d75ed358baf1003d6a |
|
BLAKE2b-256 | f951340b717a7f2555c63d1e4a938f435e0fd30bb09b7cfc16c135f9be65d799 |