Skip to main content

Lightweight Python asyncio HTTP/1.1 client.

Project description

lowhaio CircleCI Maintainability Test Coverage


Work in progress. These docs serve as a rough design spec.


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(65536), 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)

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.

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 (although this is planned for a helper function);
  • 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.20.tar.gz (4.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.20-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lowhaio-0.0.20.tar.gz
  • Upload date:
  • Size: 4.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.20.tar.gz
Algorithm Hash digest
SHA256 34eed9df877bbc32bede9640f2b4032b77d043410d3ed6c41e716e91840c3d8a
MD5 e3d5e812bbed9ba65f8b9c04e715a5eb
BLAKE2b-256 83cc2d2c4ea1b7fdae696f7b4f97b85c12670b0c0cc856fd73faea8b248ead8f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lowhaio-0.0.20-py3-none-any.whl
  • Upload date:
  • Size: 5.6 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.20-py3-none-any.whl
Algorithm Hash digest
SHA256 7b14a816bc40109fa57b5dc7eddad3e3ee12f1c51c35a943779c8b1350a3f4a2
MD5 44dd1b5e971156462b427ccb157449dd
BLAKE2b-256 186129cf5b5566632ad312ee8582ac08b685f6400e5e37014ae4218911119d6c

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