Metadata-Version: 2.5
Name: render-lab-tasks-hubspot
Version: 0.1.0
Summary: hubspot 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.0
Requires-Dist: render==1.0.1
Description-Content-Type: text/markdown

# render-lab-tasks-hubspot

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

From the repository, install this pack and its supporting core together:

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

Import task definitions from `render_lab_tasks_hubspot.tasks`. Combine its `app` with
other pack apps using `Workflows.from_workflows(...)` and call tasks with
`await ctx.run(task, input)`. Package roots do not register tasks. JSON fields
retain the TS spelling; Python functions use snake_case.

## Tasks

| Registered name | Python export (also exposes `_impl`) |
| --- | --- |
| `hubspot.addToList` | `add_to_list` |
| `hubspot.createCompany` | `create_company` |
| `hubspot.createDeal` | `create_deal` |
| `hubspot.createTask` | `create_task` |
| `hubspot.getContact` | `get_contact` |
| `hubspot.logActivity` | `log_activity` |
| `hubspot.moveDealStage` | `move_deal_stage` |
| `hubspot.searchContacts` | `search_contacts` |
| `hubspot.updateDeal` | `update_deal` |
| `hubspot.upsertContact` | `upsert_contact` |

## Dependencies and retries

Raw implementations accept context first and keyword-only `deps`. The `.client`
module exports typed `Port`, `Deps`, and `Client` classes (also vendor-named aliases).
Inject a fake port, or pass a caller-owned `httpx.AsyncClient` to `Client` for custom
transport/configuration. Default dependencies close their HTTP clients after the
operation. Credentials resolve at first use. HTTP and SDK retries are disabled;
`retry.py` owns durable retry settings. DTO types live in `.types`.

## Environment

| Variable | Contract |
| --- | --- |
| `HUBSPOT_ACCESS_TOKEN` | Required on API calls. |

## Verification and limitations

The HTTP adapter uses CRM v3 and the lists v3 membership API rather than a vendor SDK. Upsert searches email before create/update and is not atomic. Note/task timestamps default to current UTC. List/search operations preserve the TS single-page limit behavior.

Shared JSON fixtures compare the Python task output with the actual pinned TS
implementation. REST fixtures also compare HTTP requests; HubSpot and Linear
fixtures compare source SDK arguments with HTTP payloads/GraphQL variables.
No live vendor calls were made for this batch. Registered-task parity does not
claim live readiness or all supporting TS exports. See the root verification
tracker and docs/porting-batches.md. Licensed under MIT.

[Lists v3 reference](https://developers.hubspot.com/docs/api-reference/legacy/crm/lists/guide).
