Metadata-Version: 2.5
Name: render-lab-tasks-http
Version: 0.1.0
Summary: http tasks for Render Workflows
Project-URL: Repository, https://github.com/render-lab/render-tasks-python
License-Expression: MIT
License-File: LICENSE
Requires-Python: >=3.12
Requires-Dist: httpx<0.29,>=0.28
Requires-Dist: render-lab-tasks-core<0.2,>=0.1.1
Requires-Dist: render==1.0.1
Description-Content-Type: text/markdown

# render-lab-tasks-http

Python port of all 6 registered tasks in the pinned TypeScript pack at
`45f9c2d44bd28e01ae9813e0d2ff56ee6c533816`. Python 3.12+.

Install this distribution and its dependencies:

```sh
pip install render-lab-tasks-http==0.1.0
```

Import definitions from `render_lab_tasks_http.tasks`; combine `app` objects
with `Workflows.from_workflows(...)`. JSON fields retain TS spelling; functions
use snake_case. Package root imports are inert.

## Tasks

| Registered name | Python export (also exposes `_impl`) |
| --- | --- |
| `http.download` | `download` |
| `http.graphql` | `graphql` |
| `http.paginate` | `paginate` |
| `http.poll` | `poll` |
| `http.request` | `request` |
| `http.webhookVerify` | `webhook_verify` |

## Dependencies and retries

Raw implementations accept context first and keyword-only `deps`. The `.client`
module exports typed `Port`, `Deps`, and `Client` classes. Inject a fake port, or
pass a caller-owned `httpx.AsyncClient` to `Client`. Default dependencies close
their client after one operation. Credentials resolve at first use. Transport
retries are disabled; `retry.py` owns durable policies. DTO types are in `.types`.
Requires core >=0.1.1.

## Environment

No environment variables. Caller-provided headers carry authentication.

## Verification and limitations

4xx (including 429) are returned; network failures and 5xx raise. Polling makes one
request per attempt and requires a nonempty predicate. Only application/json
responses populate `json`. `timeoutMs` and `intervalHintMs` remain TS compatibility
hints: the default transport uses 30 seconds and the durable poll policy uses five
seconds. Paginate follows Link headers for at most maxPages (default 10).
Download decodes UTF-8 text then base64-encodes it; it is not a binary file API.
Python rejects download output above 1 MiB. Signature verification is HMAC only;
the caller owns replay protection. URLs and pagination links must be trusted.

Shared fixtures execute the actual pinned TS implementations and compare Python
outputs and requests. Sanity's SDK calls are translated into separately asserted
REST requests. These are hermetic checks, not real account or hosted verification.
See [the testing backlog](https://github.com/render-lab/render-tasks-python/issues/1)
and the root verification tracker. Licensed under MIT.
