diff --git a/litellm/integrations/email_alerting.py b/litellm/integrations/email_alerting.py index f0e77e6db78..e237b207974 100644 --- a/litellm/integrations/email_alerting.py +++ b/litellm/integrations/email_alerting.py @@ -69,11 +69,9 @@ async def get_all_team_member_emails(team_id: str | None = None) -> list: async def get_team_admin_emails(team: LiteLLM_TeamTable, prisma_client: object) -> tuple[str, ...]: - """Emails of the team's admins: the user record's email, else the inline one, plus the legacy admins list, deduped""" + """Emails of the members holding the admin role: the user record's email, else the inline one, deduped""" admins: Final = tuple(member for member in team.members_with_roles if member.role == "admin") - admin_ids: Final = frozenset( - (*(member.user_id for member in admins if member.user_id), *(user_id for user_id in team.admins if user_id)) - ) + admin_ids: Final = frozenset(member.user_id for member in admins if member.user_id) rows: Final = ( await UserRepository(prisma_client).find_many( where={"user_id": {"in": sorted(admin_ids)}} # mutable-ok: prisma filter payloads are plain dict/list diff --git a/tests/test_litellm/integrations/test_email_alerting.py b/tests/test_litellm/integrations/test_email_alerting.py index e819a3d4d59..8b13b223239 100644 --- a/tests/test_litellm/integrations/test_email_alerting.py +++ b/tests/test_litellm/integrations/test_email_alerting.py @@ -44,11 +44,13 @@ async def test_should_return_only_admin_emails(): @pytest.mark.asyncio -async def test_should_include_legacy_admins_list(): +async def test_should_ignore_the_legacy_admins_list_the_proxy_does_not_authorize(): + prisma: Final = _prisma(USERS) team: Final = LiteLLM_TeamTable( team_id="t1", admins=["u-legacy"], members_with_roles=[Member(user_id="u-admin", role="admin")] ) - assert sorted(await get_team_admin_emails(team, _prisma(USERS))) == ["admin@example.com", "legacy@example.com"] + assert await get_team_admin_emails(team, prisma) == ("admin@example.com",) + assert prisma.db.litellm_usertable.queries == [{"user_id": {"in": ["u-admin"]}}] @pytest.mark.asyncio @@ -79,9 +81,9 @@ async def test_should_include_email_only_admins_and_dedupe_ids_and_emails(): ) team: Final = LiteLLM_TeamTable( team_id="t1", - admins=["", "u-legacy", "u-admin"], members_with_roles=[ Member(user_id="u-admin", role="admin"), + Member(user_id="u-legacy", role="admin"), Member(user_email="mail-only@example.com", role="admin"), ], )