Skip to content

Commit d601e98

Browse files
committed
Add: Add async GitHub API for removing team members
1 parent a95d16f commit d601e98

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

pontos/github/api/teams.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,3 +268,26 @@ async def update_member(
268268
data = {"role": role.value}
269269
response = await self._client.put(api, data=data)
270270
response.raise_for_status()
271+
272+
async def remove_member(
273+
self,
274+
organization: str,
275+
team: str,
276+
username: str,
277+
) -> None:
278+
"""
279+
Remove a member from a team.
280+
281+
https://docs.github.com/en/rest/teams/members#remove-team-membership-for-a-user
282+
283+
Args:
284+
organization: GitHub organization to use
285+
team: The slug of the team name.
286+
username: The handle for the GitHub user account.
287+
288+
Raises:
289+
`httpx.HTTPStatusError` if there was an error in the request
290+
"""
291+
api = f"/orgs/{organization}/teams/{team}/memberships/{username}"
292+
response = await self._client.delete(api)
293+
response.raise_for_status()

tests/github/api/test_teams.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,3 +240,26 @@ async def test_update_member_failure(self):
240240
self.client.put.assert_awaited_once_with(
241241
"/orgs/foo/teams/bar/memberships/baz", data={"role": "member"}
242242
)
243+
244+
async def test_remove_member(self):
245+
response = create_response()
246+
self.client.delete.return_value = response
247+
248+
await self.api.remove_member("foo", "bar", "baz")
249+
250+
self.client.delete.assert_awaited_once_with(
251+
"/orgs/foo/teams/bar/memberships/baz"
252+
)
253+
254+
async def test_remove_member_failure(self):
255+
response = create_response()
256+
self.client.delete.side_effect = httpx.HTTPStatusError(
257+
"404", request=MagicMock(), response=response
258+
)
259+
260+
with self.assertRaises(httpx.HTTPStatusError):
261+
await self.api.remove_member("foo", "bar", "baz")
262+
263+
self.client.delete.assert_awaited_once_with(
264+
"/orgs/foo/teams/bar/memberships/baz"
265+
)

0 commit comments

Comments
 (0)