Lightweight Python asyncio HTTP/1.1 client.
A lightweight Python asyncio HTTP/1.1 client. No additional tasks are created; all code is in a single module; and other than the standard library only a single dependency is required, aiodnsresolver.
Connections are DNS-aware, in that they are only re-used if they match a current A record for the domain.
pip install lowhaio
The API is streaming-first: for both request and response bodies, asynchronous iterators are used.
import asyncio from lowhaio import Pool async def main(): request, close = Pool() async def request_body(): yield b'a' yield b'bc' code, headers, response_body = await request( b'POST', 'https://postman-echo.com/post', headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),), body=request_body, ) async for chunk in response_body: print(chunk) loop = asyncio.get_event_loop() loop.run_until_complete(main())
However, there are helper functions
buffered when this isn't required or possible.
import asyncio from lowhaio import Pool, streamed, buffered async def main(): request, close = Pool() request_body = streamed(b'abc') code, headers, response_body = await request( b'POST', 'https://postman-echo.com/post', headers=((b'content-length', b'3'), (b'content-type', b'text/plain'),), body=request_body, ) print(await buffered(response_body)) loop = asyncio.get_event_loop() loop.run_until_complete(main())
The only header automatically added to requests is the
host header, which is the idna/punycode-encoded domain name from the requested URL.
Exceptions raised are subclasses of
HttpError. If a lower-level exception caused this, it is set in the
__cause__ attribute of the
Exceptions before any data is sent are instances of
HttpConnectionError, and after data is sent,
HttpDataError. This is to make it possible to know if non-idempotent requests can be retried.
The scope of the core functions is restricted to:
- (TLS) connection opening, closing and pooling;
- passing and receiving HTTP headers and streaming bodies;
- decoding chunked responses;
- raising exceptions on timeouts.
This is to make the core behaviour useful to a reasonable range of uses, but to not include what can be added by layer(s) on top. Specifically not included:
- following redirects, implemented by lowhaio-redirect;
- retrying failed requests, implemented by lowhaio-retry;
- encoding chunked requests, implemented by lowhaio-chunked;
- authentication, such as AWS Signature Version 4 implemented by lowhaio-aws-sigv4, or AWS Signature Version 4 with unsigned payload implemented by lowhaio-aws-sigv4-unsigned-payload;
- compressing/decompressing requests/responses;
Release history Release notifications
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size lowhaio-0.0.72-py3-none-any.whl (7.1 kB)||File type Wheel||Python version py3||Upload date||Hashes View hashes|
|Filename, size lowhaio-0.0.72.tar.gz (6.2 kB)||File type Source||Python version None||Upload date||Hashes View hashes|