Metadata-Version: 2.5
Name: render-lab-tasks-jira
Version: 0.1.0
Summary: jira 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-jira

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-jira==0.1.0
```

Import task definitions from `render_lab_tasks_jira.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`) |
| --- | --- |
| `jira.addAttachment` | `add_attachment` |
| `jira.assignIssue` | `assign_issue` |
| `jira.comment` | `comment` |
| `jira.createIssue` | `create_issue` |
| `jira.getIssue` | `get_issue` |
| `jira.jql` | `jql` |
| `jira.linkIssues` | `link_issues` |
| `jira.listTransitions` | `list_transitions` |
| `jira.transition` | `transition` |
| `jira.updateIssue` | `update_issue` |

## 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 |
| --- | --- |
| `JIRA_BASE_URL` | Required Jira site URL. |
| `JIRA_EMAIL` | Required account email for Basic authentication. |
| `JIRA_API_TOKEN` | Required account API token. |

## Verification and limitations

Plain text descriptions/comments become Atlassian Document Format, with one paragraph per line. JQL uses the current `/rest/api/3/search/jql` endpoint and requests summary/status fields explicitly. It returns one page (default 50); `limit: 0` makes no request. Limits must be non-negative integers. This deliberately corrects the pinned TS transport (ADR-0007); live Jira validation remains pending. Attachments use UTF-8 text and reject CR/LF/quotes in filenames before HTTP (ADR-0006). This is not a binary media upload API.

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.
