diff options
author | 2024-02-13 19:30:37 +0000 | |
---|---|---|
committer | 2024-02-13 19:38:40 +0000 | |
commit | d7f74c477c14c2b29d7e0dbbc954ec0baa19f6a9 (patch) | |
tree | b061f92d4a50f077e11c68d9beb34dc3ca9a668d | |
parent | Add API wrapper to remove a user from a Grafana team (diff) |
Remove Grafana users from a team if they are not in the Github team
-rw-r--r-- | arthur/exts/grafana/team_sync.py | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/arthur/exts/grafana/team_sync.py b/arthur/exts/grafana/team_sync.py index 6af539e..0441ddb 100644 --- a/arthur/exts/grafana/team_sync.py +++ b/arthur/exts/grafana/team_sync.py @@ -62,6 +62,31 @@ class GrafanaTeamSync(commands.Cog): added_members += 1 return MissingMembers(count=len(missing_members), successfully_added=added_members) + async def _remove_extra_members( + self, + grafana_team_id: int, + github_team_members: set[str], + grafana_team_members: set[str], + all_grafana_users: list[dict], + ) -> int: + """ + Removes Grafana users from a team if they are not present in the Github team. + + Return how many were removed. + """ + extra_members = grafana_team_members - github_team_members + removed_members = 0 + for grafana_user in all_grafana_users: + if grafana_user["login"] not in extra_members: + continue + await grafana.remove_user_from_team( + grafana_user["userId"], + grafana_team_id, + self.bot.http_session, + ) + removed_members += 1 + return removed_members + async def _sync_teams(self, team: dict[str, str]) -> SyncFigures: """ Ensure members in Github are present in Grafana teams. @@ -85,7 +110,12 @@ class GrafanaTeamSync(commands.Cog): grafana_team_members, all_grafana_users, ) - removed_members = 0 # TODO Actually remove members who shouldn't be present. + removed_members = await self._remove_extra_members( + team["id"], + github_team_members, + grafana_team_members, + all_grafana_users, + ) return SyncFigures(added=added_members, removed=removed_members) |