Skip to content

Commit bf641fe

Browse files
fix(team_endpoints.py): fix getattr
1 parent cb385e0 commit bf641fe

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

litellm/proxy/management_endpoints/team_endpoints.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import asyncio
1313
import json
1414
import traceback
15-
from litellm._uuid import uuid
1615
from datetime import datetime, timezone
1716
from typing import Any, Dict, List, Optional, Tuple, Union, cast
1817

@@ -22,6 +21,7 @@
2221

2322
import litellm
2423
from litellm._logging import verbose_proxy_logger
24+
from litellm._uuid import uuid
2525
from litellm.proxy._types import (
2626
BlockTeamRequest,
2727
CommonProxyErrors,
@@ -105,20 +105,22 @@
105105

106106
class TeamMemberBudgetHandler:
107107
"""Helper class to handle team member budget, RPM, and TPM limit operations"""
108-
108+
109109
@staticmethod
110110
def should_create_budget(
111111
team_member_budget: Optional[float] = None,
112112
team_member_rpm_limit: Optional[int] = None,
113113
team_member_tpm_limit: Optional[int] = None,
114114
) -> bool:
115115
"""Check if any team member limits are provided"""
116-
return any([
117-
team_member_budget is not None,
118-
team_member_rpm_limit is not None,
119-
team_member_tpm_limit is not None,
120-
])
121-
116+
return any(
117+
[
118+
team_member_budget is not None,
119+
team_member_rpm_limit is not None,
120+
team_member_tpm_limit is not None,
121+
]
122+
)
123+
122124
@staticmethod
123125
async def create_team_member_budget_table(
124126
data: Union[NewTeamRequest, LiteLLM_TeamTable],
@@ -146,7 +148,7 @@ async def create_team_member_budget_table(
146148
budget_id=budget_id,
147149
budget_duration=data.budget_duration,
148150
)
149-
151+
150152
if team_member_budget is not None:
151153
budget_request.max_budget = team_member_budget
152154
if team_member_rpm_limit is not None:
@@ -165,12 +167,12 @@ async def create_team_member_budget_table(
165167
new_team_data_json["metadata"][
166168
"team_member_budget_id"
167169
] = team_member_budget_table.budget_id
168-
170+
169171
# Remove team member fields from new_team_data_json
170172
TeamMemberBudgetHandler._clean_team_member_fields(new_team_data_json)
171173

172174
return new_team_data_json
173-
175+
174176
@staticmethod
175177
async def upsert_team_member_budget_table(
176178
team_table: LiteLLM_TeamTable,
@@ -193,14 +195,14 @@ async def upsert_team_member_budget_table(
193195
if team_member_budget_id is not None and isinstance(team_member_budget_id, str):
194196
# Budget exists - create update request with only provided values
195197
budget_request = BudgetNewRequest(budget_id=team_member_budget_id)
196-
198+
197199
if team_member_budget is not None:
198200
budget_request.max_budget = team_member_budget
199201
if team_member_rpm_limit is not None:
200202
budget_request.rpm_limit = team_member_rpm_limit
201203
if team_member_tpm_limit is not None:
202204
budget_request.tpm_limit = team_member_tpm_limit
203-
205+
204206
budget_row = await update_budget(
205207
budget_obj=budget_request,
206208
user_api_key_dict=user_api_key_dict,
@@ -221,11 +223,11 @@ async def upsert_team_member_budget_table(
221223
team_member_rpm_limit=team_member_rpm_limit,
222224
team_member_tpm_limit=team_member_tpm_limit,
223225
)
224-
226+
225227
# Remove team member fields from updated_kv
226228
TeamMemberBudgetHandler._clean_team_member_fields(updated_kv)
227229
return updated_kv
228-
230+
229231
@staticmethod
230232
def _clean_team_member_fields(data_dict: dict) -> None:
231233
"""Remove team member fields from data dictionary"""
@@ -267,7 +269,6 @@ async def get_all_team_memberships(
267269
return returned_tm
268270

269271

270-
271272
#### TEAM MANAGEMENT ####
272273
@router.post(
273274
"/team/new",
@@ -383,7 +384,7 @@ async def new_team( # noqa: PLR0915
383384
"error": f"Team id = {data.team_id} already exists. Please use a different team id."
384385
},
385386
)
386-
387+
387388
# If max_budget is not explicitly provided in the request,
388389
# check for a default value in the proxy configuration.
389390
if data.max_budget is None:
@@ -503,7 +504,7 @@ async def new_team( # noqa: PLR0915
503504

504505
# Set Management Endpoint Metadata Fields
505506
for field in LiteLLM_ManagementEndpoint_MetadataFields_Premium:
506-
if getattr(data, field) is not None:
507+
if getattr(data, field, None) is not None:
507508
_set_object_metadata_field(
508509
object_data=complete_team_data,
509510
field_name=field,

0 commit comments

Comments
 (0)