aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2025-07-10 14:15:39 +0100
committerGravatar Joe Banks <[email protected]>2025-07-10 14:15:39 +0100
commit789140344212405e77370de435d8ed03be4efd77 (patch)
tree1063543e1d230f2d86e09b2eec6437e63d260f6f
parentAdd new constants (diff)
Add new APIs for adding team members
-rw-r--r--arthur/apis/github/teams.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/arthur/apis/github/teams.py b/arthur/apis/github/teams.py
index a8775a3..489da90 100644
--- a/arthur/apis/github/teams.py
+++ b/arthur/apis/github/teams.py
@@ -1,3 +1,5 @@
+import aiohttp
+
from arthur.config import CONFIG
HEADERS = {
@@ -5,3 +7,37 @@ HEADERS = {
"X-GitHub-Api-Version": "2022-11-28",
"Authorization": f"Bearer {CONFIG.github_token.get_secret_value()}",
}
+
+HTTP_404 = 404
+HTTP_403 = 403
+HTTP_422 = 422
+
+
+class GitHubError(Exception):
+ """Custom exception for GitHub API errors."""
+
+ def __init__(self, message: str):
+ super().__init__(message)
+
+
+async def add_staff_member(username: str) -> None:
+ """Add a user to the default GitHub team."""
+ async with aiohttp.ClientSession() as session:
+ endpoint = f"https://api.github.com/orgs/{CONFIG.github_org}/teams/{CONFIG.github_team}/memberships/{username}"
+ async with session.put(endpoint, headers=HEADERS) as response:
+ try:
+ response.raise_for_status()
+ return await response.json()
+ except aiohttp.ClientResponseError as e:
+ if e.status == HTTP_404:
+ msg = f"Team or user not found: {e.message}"
+ raise GitHubError(msg)
+ if e.status == HTTP_403:
+ msg = f"Forbidden: {e.message}"
+ raise GitHubError(msg)
+ if e.status == HTTP_422:
+ msg = "Cannot add organisation as a team member"
+ raise GitHubError(msg)
+
+ msg = f"Unexpected error: {e.message}"
+ raise GitHubError(msg)