Skip to main content

chumicro-requests

A non-blocking HTTP/1.1 client that keeps your LED blinking through a TLS handshake.

A requests-flavored surface that advances one chunk per runner tick (connect, send, recv, parse), so your control loop never stalls waiting for a peer. It covers plain HTTP and HTTPS (live-verified on real boards), the POST / PUT / PATCH / DELETE verbs with a JSON helper, redirect handling, and Transfer-Encoding: chunked decode. For bodies bigger than RAM, stream=True reads a firmware image into a 512-byte buffer one chunk at a time.


Part of the ChuMicro family: small, focused Python libraries for microcontrollers and laptops. Browse all libraries.

Install

# CircuitPython (after `circup bundle-add ChuMicro/ChuMicro-Bundle`)
circup install chumicro_requests

# MicroPython
mpremote mip install github:ChuMicro/ChuMicro-Bundle/chumicro_requests

# CPython
pip install chumicro-requests

For bundle setup, pre-compiled .mpy bundles, the experimental channel, and details on PyPI naming, see the chumicro INSTALL guide.

Quick example

from chumicro_requests import HttpClient
from chumicro_sockets.sockets_factory import connector_factory
from chumicro_timing import ticks_ms

client = HttpClient(transport_factory=connector_factory())
handle = client.get("http://api.example.com/now", timeout_ms=5000)

while not handle.done:
    if client.check(ticks_ms()):
        client.handle(ticks_ms())

response = handle.result          # raises HttpError on failure
print(response.status_code)       # 200
print(response.headers["content-type"])
print(response.body)              # raw response bytes
print(response.text)              # decoded str (charset sniffed from Content-Type)
print(response.json())            # parsed JSON when Content-Type is application/json

What's included

Symbol Purpose
HttpClient Runner-shaped HTTP/1.1 client; check(now_ms) / handle(now_ms); per-verb methods plus generic request(...); stream=True for incremental bodies; cancel() aborts in flight.
RequestHandle Per-request handle: .done, .result, .error; .read_body_into(buffer) drains a streamed body.
Response Status code, reason, headers, raw body, URL; .text, .json(), .encoding; .streamed on streamed exchanges.
chumicro_requests.generators Opt-in submodule: yield from-shaped fetch / get / post / ... one-shots and stream + BodyReader for chunked body reads under Runner.add_generator.
CaseInsensitiveDict Header dict with case-insensitive lookups.
WhenOversized Policy enum for responses past max_body_bytes.
chumicro_sockets.sockets_factory.connector_factory(...) Shared module: convenience connection-factory wired to chumicro-sockets.
parse_url(url) URL → (scheme, host, port, path).
parse_charset(content_type) Extract charset from a Content-Type header value.
encode_request(...) Build raw HTTP request bytes.
ResponseParser Streaming response state machine.
HttpError + subclasses HttpBusyError, HttpTimeoutError, HttpProtocolError, HttpURLError, HttpOversizedError.
chumicro_requests.testing.FakeHttpClient Host-only fake for downstream test suites.

Where this fits

Depends on chumicro-sockets for TCP / TLS and chumicro-timing for ticks. Used directly in app code.

Platform support

Works on CPython, MicroPython, and CircuitPython. Pure Python, no native extensions.

Examples

Example What it shows
periodic_get.py Periodic GET on a real CP/MP board. Brings wifi up, hits a configured URL every N seconds, prints status + body length, drives an LED-blink counter to verify the request never blocks the loop. Reads wifi + target URL from runtime_config.msgpack (chumicro-workspace) with a constants fallback. Cross-runtime (CP + MP).

Wiring wifi credentials for examples

The board-side examples need wifi credentials to reach the network. periodic_get.py reads them (and its target URL) from a runtime_config.msgpack written by chumicro-workspace, and falls back to in-file placeholder constants you edit directly when no config file is deployed. The library itself never reads config: it takes a transport_factory and goes, so credential and config wiring stay in your application.

Contributing

Issues, bug reports, and pull requests are welcome, and so is "I ran it on this board and here's what happened", some of the most useful feedback a hardware project can get. Development happens in the ChuMicro repository, whose contributing guide covers setup and the test workflow.

Docs

📖 Stable docs · Experimental docs

Find this library

License

MIT

Metadata

Release files for chumicro-requests 0.19.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for chumicro-requests 0.19.1
File Size Uploaded
chumicro_requests-0.19.1.tar.gz 67.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for chumicro-requests 0.19.1
File Interpreter ABI Platform
chumicro_requests-0.19.1-py3-none-any.whl Python 3 none any Details

Total release size: 93.9 kB

Release files / chumicro_requests-0.19.1.tar.gz

Download URL chumicro_requests-0.19.1.tar.gz
Size 67.6 kB
Tags Source
SHA-256 checksum
How to use checksums
008c77013a1d2ad32cd127a9f79a3b57ed6f3e52ec743a3e3017d6de3a6ffc2a
BLAKE2b-256 checksum
How to use checksums
05119ca7016d37d5e0167ec27fd67bc2ff6dd8f6f305fd8648fa79e2740f4320
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 7, 2026.

Transparency log

Release files / chumicro_requests-0.19.1-py3-none-any.whl

Download URL chumicro_requests-0.19.1-py3-none-any.whl
Size 26.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7d92fbc4edf71df285a87614aaffb49e0768482ad4a4ae995e285f031a546730
BLAKE2b-256 checksum
How to use checksums
ced6bfc5d2e005924aa279ac2b79cbd73c43da6cc527f42610c8778ffe09e4a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 7, 2026.

Transparency log

Release history Release notifications | RSS feed

0.21.3

2 release files

0.21.2

2 release files

0.21.1

2 release files

0.21.0

2 release files

This release

0.19.1 This release

2 release files

0.19.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page