lowhaio-chunked

Chunked transfer request encoding for lowhaio


License
MIT
Install
pip install lowhaio-chunked==0.0.5

Documentation

lowhaio-chunked CircleCI

Chunked transfer request encoding for lowhaio. This is only needed if content-length is unknown before the body starts to transfer.

Installation

pip install lowhaio lowhaio_chunked

or just copy and paste the below 8 lines of code into your project, ensuring to also follow the requirements in the LICENSE file.

def chunked(body):
    async def _chunked(*args, **kwargs):
        async for chunk in body(*args, **kwargs):
            yield hex(len(chunk))[2:].encode() + b'\r\n'
            yield chunk
            yield b'\r\n'
        yield b'0\r\n\r\n'
    return _chunked

Usage

Usage is very similar to standard lowhaio, except that the body data should be wrapped with the chunked function; the transfer-encoding: chunked header is required; and the content-length header should not be specified.

So instead of a request like

from lowhaio import Pool

request, _ = Pool()

body = ...

code, headers, body = await request(
    b'POST', 'https://example.com/path', body=body,
    headers=((b'content-length', b'1234'),),
)

you can write

from lowhaio import Pool
from lowhaio_chunked import chunked  # Or paste in the code above

request, _ = Pool()

body = ...

code, headers, body = await request(
    b'POST', 'https://example.com/path', body=chunked(body),
    headers=((b'transfer-encoding': b'chunked'),),
)