diff options
Diffstat (limited to 'arthur/apis/github')
| -rw-r--r-- | arthur/apis/github/__init__.py | 24 | ||||
| -rw-r--r-- | arthur/apis/github/orgs.py | 25 | ||||
| -rw-r--r-- | arthur/apis/github/teams.py | 18 | 
3 files changed, 48 insertions, 19 deletions
| diff --git a/arthur/apis/github/__init__.py b/arthur/apis/github/__init__.py index 11261da..3eb55a6 100644 --- a/arthur/apis/github/__init__.py +++ b/arthur/apis/github/__init__.py @@ -1,3 +1,23 @@ -from .teams import GitHubError, add_staff_member +from arthur.config import CONFIG -__all__ = ("GitHubError", "add_staff_member") +from .orgs import remove_org_member +from .teams import add_staff_member + + +class GitHubError(Exception): +    """Custom exception for GitHub API errors.""" + +    def __init__(self, message: str): +        super().__init__(message) + + +__all__ = ("GitHubError", "add_staff_member", "remove_org_member") + +HEADERS = { +    "Accept": "application/vnd.github+json", +    "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 diff --git a/arthur/apis/github/orgs.py b/arthur/apis/github/orgs.py new file mode 100644 index 0000000..55039c8 --- /dev/null +++ b/arthur/apis/github/orgs.py @@ -0,0 +1,25 @@ +import aiohttp + +from arthur.apis.github import GitHubError, HEADERS, HTTP_403, HTTP_404 +from arthur.config import CONFIG + + +async def remove_org_member(username: str) -> None: +    """Remove a user from the GitHub organisation.""" +    async with aiohttp.ClientSession() as session: +        endpoint = f"https://api.github.com/orgs/{CONFIG.github_org}/members/{username}" + +        async with session.delete(endpoint, headers=HEADERS) as resp: +            try: +                resp.raise_for_status() +                return await resp.json() +            except aiohttp.ClientResponseError as e: +                if e.status == HTTP_404: +                    msg = f"Team or user not found in the org: {e.message}" +                    raise GitHubError(msg) +                if e.status == HTTP_403: +                    msg = f"Forbidden: {e.message}" +                    raise GitHubError(msg) + +                msg = f"Unexpected error: {e.message}" +                raise GitHubError(msg) diff --git a/arthur/apis/github/teams.py b/arthur/apis/github/teams.py index 489da90..e919051 100644 --- a/arthur/apis/github/teams.py +++ b/arthur/apis/github/teams.py @@ -1,24 +1,8 @@  import aiohttp +from arthur.apis.github import GitHubError, HEADERS, HTTP_403, HTTP_404, HTTP_422  from arthur.config import CONFIG -HEADERS = { -    "Accept": "application/vnd.github+json", -    "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.""" | 
