Skip to main content

Lightweight Python asyncio HTTP/1.1 client.

Project description

lowhaio CircleCI Maintainability Test Coverage

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.

Usage

The API is streaming-first: for both request and response bodies, asynchronous generators 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)

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 (planned for a helper function);
  • retrying failed requests;
  • cookies;
  • compressing/decompressing requests/responses;
  • authentication.

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

lowhaio-0.0.30.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lowhaio-0.0.30-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file lowhaio-0.0.30.tar.gz.

File metadata

  • Download URL: lowhaio-0.0.30.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for lowhaio-0.0.30.tar.gz
Algorithm Hash digest
SHA256 2be043ca5019691cf86b637d30badb90576057fcda88126310605a1058c3958a
MD5 f6b3eeb3932757ea5b2f632c5340608f
BLAKE2b-256 138d6723afce026b949b70b9f7948035ce44bd28940ae7205d3e80a6930504f9

See more details on using hashes here.

File details

Details for the file lowhaio-0.0.30-py3-none-any.whl.

File metadata

  • Download URL: lowhaio-0.0.30-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for lowhaio-0.0.30-py3-none-any.whl
Algorithm Hash digest
SHA256 53795da22d121e3999cc4638ad2430efd742dff7372c995d31c36208983ca135
MD5 5e69a9a4051780f9b8cebd3281512e1c
BLAKE2b-256 4fd614df476d737cd3610d3ff47cd72a7173af8ec3cbace50df8dfb2bc4cb6e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page