Skip to content

Commit fbd7a13

Browse files
committed
use lower-case usernames when dealing with these names as strings
1 parent 4619b06 commit fbd7a13

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

gh_org_mgr/_gh_org.py

+16-12
Original file line numberDiff line numberDiff line change
@@ -182,16 +182,16 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
182182
self._get_org_members()
183183

184184
# Get open invitations
185-
open_invitations = [user.login for user in self.org.invitations()]
185+
open_invitations = [user.login.lower() for user in self.org.invitations()]
186186

187187
for team, team_attrs in self.current_teams.items():
188188
# Update current team members with dict[NamedUser, str (role)]
189189
team_attrs["members"] = self._get_current_team_members(team)
190190

191191
# For the rest of the function however, we use just the login name
192-
# for each current user
192+
# for each current user. All lower-case
193193
current_team_members = {
194-
user.login: role for user, role in team_attrs["members"].items()
194+
user.login.lower(): role for user, role in team_attrs["members"].items()
195195
}
196196

197197
# Handle the team not being configured locally
@@ -209,16 +209,17 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
209209
else:
210210
team_configuration = {}
211211

212-
# Analog to team_attrs["members"], add members and maintainers to shared
213-
# dict with respective role, while maintainer role dominates
212+
# Analog to team_attrs["members"], add members and maintainers to
213+
# shared dict with respective role, while maintainer role dominates.
214+
# All user names shall be lower-case to ease comparison
214215
configured_users: dict[str, str] = {}
215216
for config_role in ("member", "maintainer"):
216217
team_members = self._get_configured_team_members(
217218
team_configuration, team.name, config_role
218219
)
219220
for team_member in team_members:
220-
# Add user with role to dict
221-
configured_users.update({team_member: config_role})
221+
# Add user with role to dict, in lower-case
222+
configured_users.update({team_member.lower(): config_role})
222223

223224
# Consider all GitHub organisation team maintainers if they are member of the team
224225
# This is because GitHub API returns them as maintainers even if they are just members
@@ -227,7 +228,7 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
227228
logging.debug(
228229
"Overriding role of organisation owner '%s' to maintainer", user.login
229230
)
230-
configured_users[user.login] = "maintainer"
231+
configured_users[user.login.lower()] = "maintainer"
231232

232233
# Only make edits to the team membership if the current state differs from config
233234
if configured_users == current_team_members:
@@ -278,8 +279,11 @@ def sync_teams_members(self, dry: bool = False) -> None: # pylint: disable=too-
278279
# Loop through all current members. Remove them if they are not configured
279280
for current_user in current_team_members:
280281
if current_user not in configured_users:
282+
logging.debug("User '%s' not found within configured users", current_user)
281283
# Turn user to GitHub object, trying to find them
282284
if not (gh_user := self._resolve_gh_username(current_user, team.name)):
285+
# If the user cannot be found for some reason, log an
286+
# error and skip this loop
283287
continue
284288
if team.has_in_members(gh_user):
285289
logging.info(
@@ -567,7 +571,7 @@ def _get_configured_repos_and_user_perms(self):
567571
)
568572
)
569573
else:
570-
self.configured_repos_collaborators[repo][team_member] = perm
574+
self.configured_repos_collaborators[repo][team_member.lower()] = perm
571575

572576
def _convert_graphql_perm_to_rest(self, permission: str) -> str:
573577
"""Convert a repo permission coming from the GraphQL API to the ones
@@ -633,12 +637,12 @@ def _fetch_collaborators_of_repo(self, repo: Repository):
633637

634638
# Extract relevant data
635639
for collaborator in collaborators:
636-
login = collaborator["node"]["login"]
640+
login: str = collaborator["node"]["login"]
637641
# Skip entry if collaborator is org owner, which is "admin" anyway
638-
if login in [user.login for user in self.org_owners]:
642+
if login.lower() in [user.login.lower() for user in self.org_owners]:
639643
continue
640644
permission = self._convert_graphql_perm_to_rest(collaborator["permission"])
641-
self.current_repos_collaborators[repo][login] = permission
645+
self.current_repos_collaborators[repo][login.lower()] = permission
642646

643647
def _get_current_repos_and_user_perms(self):
644648
"""Get all repos, their current collaborators and their permissions"""

0 commit comments

Comments
 (0)