Skip to content

Commit efd8824

Browse files
committed
fix: avoid redundant ldap.find_users() call in LDAP sync
_handle_left_users was fetching all LDAP users independently, even though get_user_diff had already fetched the same data moments before. Pass the already-fetched list through instead.
1 parent 7205268 commit efd8824

1 file changed

Lines changed: 6 additions & 8 deletions

File tree

arthur/exts/directory/ldap.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ async def sync_users(self) -> None:
161161
try:
162162
logger.info("Syncing users with the LDAP directory.")
163163

164-
diff, missing_emp, counts = await self.get_user_diff()
164+
diff, missing_emp, counts, ldap_users = await self.get_user_diff()
165165

166166
add_users = counts[LDAPSyncAction.ADD]
167167
remove_users = counts[LDAPSyncAction.REMOVE]
@@ -205,7 +205,7 @@ async def sync_users(self) -> None:
205205
user.ldap_user.employee_number if user.ldap_user else str(user.discord_user.id)
206206
)
207207

208-
await self._handle_left_users(handled)
208+
await self._handle_left_users(handled, ldap_users)
209209

210210
logger.info("LDAP: Sync complete.")
211211
except Exception as e: # noqa: BLE001
@@ -214,10 +214,8 @@ async def sync_users(self) -> None:
214214
f":x: LDAP Sync Error: ```python\n{e}```"
215215
)
216216

217-
async def _handle_left_users(self, handled: list[int]) -> None:
217+
async def _handle_left_users(self, handled: list[int], ldap_users: list[ldap.LDAPUser]) -> None:
218218
"""Handle users that have left the guild and so were not processed."""
219-
ldap_users = await ldap.find_users()
220-
221219
for user in ldap_users:
222220
if user.employee_number is None or user.employee_number in handled:
223221
continue
@@ -367,7 +365,7 @@ def _user_groups(user: discord.Member) -> list[str]:
367365

368366
async def get_user_diff(
369367
self,
370-
) -> tuple[list[DiffedUser], list[ldap.LDAPUser], Counter[LDAPSyncAction]]:
368+
) -> tuple[list[DiffedUser], list[ldap.LDAPUser], Counter[LDAPSyncAction], list[ldap.LDAPUser]]:
371369
"""Calculate and return the diff of users against LDAP from the guild."""
372370
guild = self.bot.get_guild(CONFIG.guild_id)
373371
users = await ldap.find_users()
@@ -416,7 +414,7 @@ async def get_user_diff(
416414

417415
counter = Counter([user.action for user in diff])
418416

419-
return diff, missing_emp, counter
417+
return diff, missing_emp, counter, users
420418

421419
@staticmethod
422420
def _format_user(discord_user: discord.Member, ldap_user: ldap.LDAPUser | None) -> str:
@@ -429,7 +427,7 @@ def _format_user(discord_user: discord.Member, ldap_user: ldap.LDAPUser | None)
429427
@ldap_group.command(name="sync")
430428
async def sync(self, ctx: commands.Context) -> None:
431429
"""List users found in the LDAP directory."""
432-
diff, missing_emp, counts = await self.get_user_diff()
430+
diff, missing_emp, counts, _ = await self.get_user_diff()
433431

434432
add_users = counts[LDAPSyncAction.ADD]
435433
remove_users = counts[LDAPSyncAction.REMOVE]

0 commit comments

Comments
 (0)