diff --git a/packages/bot/CHANGELOG.md b/packages/bot/CHANGELOG.md index a7ba97c..af7b5a2 100644 --- a/packages/bot/CHANGELOG.md +++ b/packages/bot/CHANGELOG.md @@ -2,6 +2,12 @@ ### Unreleased +### 0.2.3 + +#### Added + +- Added more webhook events to `WebhookPayload` type + ### 0.2.2 #### Added diff --git a/packages/bot/pyproject.toml b/packages/bot/pyproject.toml index 9a7852d..9d3eac6 100644 --- a/packages/bot/pyproject.toml +++ b/packages/bot/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "automa-bot" -version = "0.2.2" +version = "0.2.3" authors = [{ name = "Sunkara, Inc.", email = "engineering@automa.app" }] description = "Bot helpers for Automa" diff --git a/packages/bot/src/automa/bot/__init__.py b/packages/bot/src/automa/bot/__init__.py index 5f62466..511d455 100644 --- a/packages/bot/src/automa/bot/__init__.py +++ b/packages/bot/src/automa/bot/__init__.py @@ -1,6 +1,29 @@ from ._client import AsyncAutoma, Automa -from ._types import Org, Repo, Task, TaskItem, WebhookEventType, WebhookPayload -from .resources import AsyncCodeResource, CodeFolder, CodeResource +from ._types import ( + GenericTaskItem, + Org, + ProposalTaskItem, + Repo, + Task, + TaskForCode, + TaskItem, + WebhookEventType, + WebhookPayload, + WebhookProposalAcceptedData, + WebhookProposalAcceptedPayload, + WebhookProposalRejectedData, + WebhookProposalRejectedPayload, + WebhookTaskCreatedData, + WebhookTaskCreatedPayload, +) +from .resources import ( + AsyncCodeResource, + CodeCleanupParams, + CodeDownloadParams, + CodeFolder, + CodeProposeParams, + CodeResource, +) __all__ = [ "Automa", @@ -8,11 +31,23 @@ "AsyncCodeResource", "CodeResource", "CodeFolder", + "CodeCleanupParams", + "CodeDownloadParams", + "CodeProposeParams", + "ProposalTaskItem", + "GenericTaskItem", "TaskItem", "Task", + "TaskForCode", "Repo", "Org", "WebhookEventType", + "WebhookTaskCreatedData", + "WebhookTaskCreatedPayload", + "WebhookProposalAcceptedData", + "WebhookProposalAcceptedPayload", + "WebhookProposalRejectedData", + "WebhookProposalRejectedPayload", "WebhookPayload", ] diff --git a/packages/bot/src/automa/bot/_types.py b/packages/bot/src/automa/bot/_types.py index a1ea790..e471163 100644 --- a/packages/bot/src/automa/bot/_types.py +++ b/packages/bot/src/automa/bot/_types.py @@ -1,7 +1,7 @@ from __future__ import annotations from enum import Enum -from typing import Any, Dict, Literal, Mapping, TypedDict, Union +from typing import Any, Dict, Literal, Mapping, NotRequired, TypedDict, Union from httpx._types import QueryParamTypes, RequestExtensions @@ -38,16 +38,41 @@ class RequestOptions(TypedDict, total=False): stream: bool | None -class TaskItem(TypedDict): +class ProposalTaskItem(TypedDict): id: int - type: Literal["origin", "message", "repo", "bot", "proposal", "activity"] + type: Literal["proposal"] + data: ProposalTaskItemData + bot_id: int + repo_id: int + + class ProposalTaskItemData(TypedDict): + prId: int + prNumber: int + prTitle: str + prHead: str + prBase: str + prState: Literal["open", "closed"] + prMerged: bool + + +class GenericTaskItem(TypedDict): + id: int + type: Literal["origin", "message", "repo", "bot", "activity"] data: Dict[str, Any] + bot_id: NotRequired[int] + repo_id: NotRequired[int] + + +TaskItem = Union[ProposalTaskItem, GenericTaskItem] class Task(TypedDict): id: int - token: str title: str + + +class TaskForCode(Task): + token: str items: list[TaskItem] @@ -64,16 +89,50 @@ class Org(TypedDict): class WebhookEventType(Enum): - TaskCreated = "task.created" + TASK_CREATED = "task.created" + PROPOSAL_ACCEPTED = "proposal.accepted" + PROPOSAL_REJECTED = "proposal.rejected" + + +class WebhookTaskCreatedData(TypedDict): + task: TaskForCode + repo: Repo + org: Org + + +class WebhookProposalClosedData(TypedDict): + proposal: ProposalTaskItem + task: Task + org: Org -class WebhookPayload(TypedDict): +WebhookProposalAcceptedData = WebhookProposalClosedData +WebhookProposalRejectedData = WebhookProposalClosedData + + +class WebhookTaskCreatedPayload(TypedDict): + id: str + timestamp: str + type: Literal[WebhookEventType.TASK_CREATED] + data: WebhookTaskCreatedData + + +class WebhookProposalAcceptedPayload(TypedDict): id: str timestamp: str - type: WebhookEventType - data: WebhookPayloadData + type: Literal[WebhookEventType.PROPOSAL_ACCEPTED] + data: WebhookProposalAcceptedData + + +class WebhookProposalRejectedPayload(TypedDict): + id: str + timestamp: str + type: Literal[WebhookEventType.PROPOSAL_REJECTED] + data: WebhookProposalRejectedData + - class WebhookPayloadData(TypedDict): - task: Task - repo: Repo - org: Org +WebhookPayload = Union[ + WebhookTaskCreatedPayload, + WebhookProposalAcceptedPayload, + WebhookProposalRejectedPayload, +] diff --git a/packages/bot/src/automa/bot/resources/__init__.py b/packages/bot/src/automa/bot/resources/__init__.py index d14971f..786ceff 100644 --- a/packages/bot/src/automa/bot/resources/__init__.py +++ b/packages/bot/src/automa/bot/resources/__init__.py @@ -1,6 +1,9 @@ from .code import ( AsyncCodeResource, + CodeCleanupParams, + CodeDownloadParams, CodeFolder, + CodeProposeParams, CodeResource, ) @@ -8,4 +11,7 @@ "AsyncCodeResource", "CodeResource", "CodeFolder", + "CodeCleanupParams", + "CodeDownloadParams", + "CodeProposeParams", ] diff --git a/packages/bot/src/automa/bot/resources/code.py b/packages/bot/src/automa/bot/resources/code.py index d5c2f40..ed84325 100644 --- a/packages/bot/src/automa/bot/resources/code.py +++ b/packages/bot/src/automa/bot/resources/code.py @@ -16,6 +16,9 @@ "CodeResource", "AsyncCodeResource", "CodeFolder", + "CodeCleanupParams", + "CodeDownloadParams", + "CodeProposeParams", ] @@ -241,6 +244,6 @@ class Proposal(TypedDict): title: NotRequired[str] body: NotRequired[str] - # TODO: Add `extra_items=Any` + # TODO: Add `extra_items=Any` (py 3.15) class Metadata(TypedDict): cost: NotRequired[float] diff --git a/uv.lock b/uv.lock index fd2cff8..04bbaf2 100644 --- a/uv.lock +++ b/uv.lock @@ -31,7 +31,7 @@ wheels = [ [[package]] name = "automa-bot" -version = "0.2.2" +version = "0.2.3" source = { virtual = "packages/bot" } dependencies = [ { name = "anyio" },