nahpackpy

nahpackpy is an HTTP/2 RFC 7541 HPACK library. It wraps the Rust nahpack library.

>>> from nahpackpy import Decoder
>>> decoder = Decoder()
>>> headers = decoder.decode_block(
        b'\x82\x86\x84A\x8c\xf1\xe3\xc2\xe5'
        b'\xf2:k\xa0\xab\x90\xf4\xff'
    )
>>> for header in headers:
        print(header)
Header(name=b':method', value=b'GET')
Header(name=b':scheme', value=b'http')
Header(name=b':path', value=b'/')
Header(name=b':authority', value=b'www.example.com')
>>> from nahpackpy import Encoder
>>> encoder = Encoder()
>>> encoder.encode_block((
        (b':method', b'GET'),
        (b':scheme', b'http'),
        (b':path', b'/'),
        (b':authority', b'www.example.com'),
    ))
b'\x82\x86\x84A\x8c\xf1\xe3\xc2\xe5\xf2:k\xa0\xab\x90\xf4\xff'

Decoding

class nahpackpy.Header

Header is a namedtuple of name and value.

name bytes
value bytes
class nahpackpy.Headers(decoded, num)

Headers is an iterable of decoded Header objects.

class nahpackpy.Decoder

Decoder contains the dynamic table and capacity setting for decompressing inbound headers.

decode_block(block)

Decode a transmitted block and, if valid, return a Headers object containing the decoded headers.

Parameters:headers (bytes) – Block to decode. If a block is transmitted over multiple frames, the entire, merged block must be given.
Return type:Headers
Raises:InsufficientData, InvalidIndex, InvalidInteger, ExcessiveInteger, InvalidCompressedLiteral, IllegalEOS, SettingsSizeExceeded
set_capacity(capacity)

Set the maximum table capacity as set in a SETTINGS frame.

Parameters:capacity (int) – SETTINGS frame value.
class nahpackpy.HpackDecodeError

nahpackpy captures all decoding exceptions to raise HpackDecodeError.

class nahpackpy.InsufficientData

The header block ends prematurely.

class nahpackpy.InvalidIndex

There was reference to an indexed header that is not in the table.

class nahpackpy.InvalidInteger

An integer could not be decoded.

class nahpackpy.ExcessiveInteger

This library’s limit of an integer being at most 4 bytes was exceeded.

class nahpackpy.InvalidCompressedLiteral

The compressed literal could not be decoded.

class nahpackpy.IllegalEOS

EOS symbol was unexpectedly found in a compressed literal.

class nahpackpy.SettingsSizeExceeded

Header block gave a value for table resize that exceeds the value set by a settings frame.

Encoding

class nahpackpy.Encoder

Encoder contains the dynamic table and size setting for compressing outbound headers.

encode_block(headers)

Encode an iterable of headers and return the bytes.

Parameters:headers (tuple) – Iterable of (name<bytes>, value<bytes>) iterables.
Return type:bytes
Raises:InvalidHeaders
set_capacity(capacity)

Set the maximum table capacity as set in a SETTINGS frame.

Parameters:capacity (int) – SETTINGS frame value.
class nahpackpy.InvalidHeaders

The headers given for encoding were not of the type expected.

Exceptions

class nahpackpy.NahpackError

nahpackpy captures all exceptions to raise NahpackError.

Every other exception is a descendant of NahpackError.

Indices and tables