- Implements https://app.clickup.com/t/86b1whxb3 on the SDK side - - Corresponding Engine PR: https://github.com/ArcadeAI/Engine/pull/113/files?w=1 - Updates existing toolkits with new syntax.
41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
from typing import Annotated
|
|
|
|
import httpx
|
|
|
|
from arcade.core.schema import ToolContext
|
|
from arcade.sdk import tool
|
|
from arcade.sdk.auth import GitHub
|
|
from arcade_github.tools.utils import get_github_json_headers, get_url, handle_github_response
|
|
|
|
|
|
# Implements https://docs.github.com/en/rest/activity/starring?apiVersion=2022-11-28#star-a-repository-for-the-authenticated-user and https://docs.github.com/en/rest/activity/starring?apiVersion=2022-11-28#unstar-a-repository-for-the-authenticated-user
|
|
# Example `arcade chat` usage: "star the vscode repo owned by microsoft"
|
|
@tool(requires_auth=GitHub())
|
|
async def set_starred(
|
|
context: ToolContext,
|
|
owner: Annotated[str, "The owner of the repository"],
|
|
name: Annotated[str, "The name of the repository"],
|
|
starred: Annotated[bool, "Whether to star the repository or not"],
|
|
) -> Annotated[
|
|
str, "A message indicating whether the repository was successfully starred or unstarred"
|
|
]:
|
|
"""
|
|
Star or un-star a GitHub repository.
|
|
For example, to star microsoft/vscode, you would use:
|
|
```
|
|
set_starred(owner="microsoft", name="vscode", starred=True)
|
|
```
|
|
"""
|
|
url = get_url("user_starred", owner=owner, repo=name)
|
|
headers = get_github_json_headers(context.authorization.token)
|
|
|
|
async with httpx.AsyncClient() as client:
|
|
if starred:
|
|
response = await client.put(url, headers=headers)
|
|
else:
|
|
response = await client.delete(url, headers=headers)
|
|
|
|
handle_github_response(response, url)
|
|
|
|
action = "starred" if starred else "unstarred"
|
|
return f"Successfully {action} the repository {owner}/{name}"
|