Lightweight Python asyncio HTTP/1.1 client.
Project description
lowhaio

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.
Installation
pip install lowhaio
Usage
The API is streaming-first: for both request and response bodies, asynchronous iterators are used.
import os
from lowhaio import Pool
request, _ = Pool()
path = 'my.file'
content_length = str(os.stat(path).st_size).encode()
async def file_data():
with open(path, 'rb') as file:
for chunk in iter(lambda: file.read(16384), b''):
yield chunk
code, headers, body = await request(
b'POST', 'https://example.com/path',
params=(), headers=((b'content-length': content_length),), body=file_data,
)
async for chunk in body:
print(chunk)
However, there are helper functions streamed and buffered when this isn't required or possible.
from lowhaio import Pool, streamed, buffered
request, _ = Pool()
content = b'some-data'
content_length = b'9'
code, headers, body = await request(
b'POST', 'https://example.com/path',
params=(), headers=((b'content-length': content_length),), body=streamed(content),
)
response = await buffered(body)
Headers
The only header automatically added to requests is the host header, which is the idna/punycode-encoded domain name from the requested URL.
Exceptions
Exceptions raised are subclasses of HttpError. If a lower-level exception caused this, it is set in the __cause__ attribute of the HttpError
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.
Scope
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;
- retrying failed requests;
- cookies;
- compressing/decompressing requests/responses;
- encoding chunked requests;
- authentication, such as AWS Signature Version 4, or AWS Signature Version 4 with unsigned payload.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lowhaio-0.0.67.tar.gz.
File metadata
- Download URL: lowhaio-0.0.67.tar.gz
- Upload date:
- Size: 6.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.22.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbaf5a3b0a35f7fadac55894eafaeee2469929771ecb6dde4b4020eebd22b642
|
|
| MD5 |
5e833097a35be85898d9f3d5d1a0a5ea
|
|
| BLAKE2b-256 |
df4b9b8398c2a81e9d794d6ab4de9197456db153b40a8a7500d0641e9673f10b
|
File details
Details for the file lowhaio-0.0.67-py3-none-any.whl.
File metadata
- Download URL: lowhaio-0.0.67-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.22.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
602e63ed73bccd2874c15c2b9d2226e4377a5b50da5bde1ef263fd367e42a013
|
|
| MD5 |
59b5cd0e4ca36bf7a6a52d0f777f82ed
|
|
| BLAKE2b-256 |
ac1867d1cda05a1a129fe28e4e10e03c41daa302851b31a2256958cbf1f56a5f
|