Skip to content

kahlertl/pynghttp2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pynghttp2

PyPi Version

Code Coverage

Documentation Status

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))