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

# render-lab-tasks-pagerduty

Python port of all 9 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-pagerduty==0.1.0
```

Import task definitions from `render_lab_tasks_pagerduty.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`) |
| --- | --- |
| `pagerduty.acknowledge` | `acknowledge` |
| `pagerduty.addNote` | `add_note` |
| `pagerduty.assignIncident` | `assign_incident` |
| `pagerduty.getIncident` | `get_incident` |
| `pagerduty.listIncidents` | `list_incidents` |
| `pagerduty.listOnCall` | `list_on_call` |
| `pagerduty.resolve` | `resolve` |
| `pagerduty.snooze` | `snooze` |
| `pagerduty.trigger` | `trigger` |

## 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 |
| --- | --- |
| `PAGERDUTY_ROUTING_KEY` | Required only for trigger, acknowledge, and resolve (Events API v2). |
| `PAGERDUTY_API_TOKEN` | Required only for REST operations. |
| `PAGERDUTY_FROM_EMAIL` | Required only for assignIncident and snooze; sent in the From header. |

## Verification and limitations

Events and REST credentials are independent and read lazily. The TS addNote payload does not add a From header; account-specific API requirements remain live-unverified. A dedupKey can deduplicate Events API alerts; it is not an exactly-once guarantee for other writes.

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.

## Webhook adapter

`render_lab_tasks_pagerduty.webhooks.pagerduty_adapter(on_event, ...)` returns a
registration-free adapter for `render_lab_triggers`. The callback receives the
verified event and returns `{"task": "namespace.task", "args": [event]}` or `None`.
The signing credential `PAGERDUTY_WEBHOOK_SECRET` is read inside verification unless
provided explicitly. Importing this module does not register tasks. Signature
checks use the raw body; live delivery remains in the testing backlog.
