diff --git a/basedpyright-code-budget.json b/basedpyright-code-budget.json index f2b54e1f889..0967ef424bc 100644 --- a/basedpyright-code-budget.json +++ b/basedpyright-code-budget.json @@ -1,194 +1 @@ -{ - "reportAny": { - "baseline": 24989, - "slack": 2500 - }, - "reportArgumentType": { - "baseline": 1814, - "slack": 180 - }, - "reportAssignmentType": { - "baseline": 220, - "slack": 22 - }, - "reportAttributeAccessIssue": { - "baseline": 346, - "slack": 35 - }, - "reportCallIssue": { - "baseline": 87, - "slack": 10 - }, - "reportConstantRedefinition": { - "baseline": 39, - "slack": 4 - }, - "reportDeprecated": { - "baseline": 217, - "slack": 22 - }, - "reportDuplicateImport": { - "baseline": 28, - "slack": 3 - }, - "reportExplicitAny": { - "baseline": 6931, - "slack": 700 - }, - "reportFunctionMemberAccess": { - "baseline": 7, - "slack": 3 - }, - "reportGeneralTypeIssues": { - "baseline": 151, - "slack": 15 - }, - "reportIncompatibleMethodOverride": { - "baseline": 52, - "slack": 5 - }, - "reportIncompatibleVariableOverride": { - "baseline": 8, - "slack": 3 - }, - "reportInconsistentOverload": { - "baseline": 12, - "slack": 3 - }, - "reportIndexIssue": { - "baseline": 26, - "slack": 3 - }, - "reportInvalidTypeForm": { - "baseline": 23, - "slack": 3 - }, - "reportInvalidTypeVarUse": { - "baseline": 2, - "slack": 3 - }, - "reportMatchNotExhaustive": { - "baseline": 1, - "slack": 0 - }, - "reportMissingParameterType": { - "baseline": 3933, - "slack": 390 - }, - "reportMissingTypeArgument": { - "baseline": 10612, - "slack": 1000 - }, - "reportMissingTypeStubs": { - "baseline": 27, - "slack": 10 - }, - "reportOperatorIssue": { - "baseline": 6, - "slack": 3 - }, - "reportOptionalCall": { - "baseline": 4, - "slack": 3 - }, - "reportOptionalIterable": { - "baseline": 3, - "slack": 3 - }, - "reportOptionalMemberAccess": { - "baseline": 724, - "slack": 72 - }, - "reportOptionalOperand": { - "baseline": 3, - "slack": 3 - }, - "reportOptionalSubscript": { - "baseline": 11, - "slack": 3 - }, - "reportPossiblyUnboundVariable": { - "baseline": 52, - "slack": 10 - }, - "reportPrivateUsage": { - "baseline": 1625, - "slack": 160 - }, - "reportRedeclaration": { - "baseline": 8, - "slack": 3 - }, - "reportReturnType": { - "baseline": 126, - "slack": 100 - }, - "reportTypedDictNotRequiredAccess": { - "baseline": 20, - "slack": 3 - }, - "reportUndefinedVariable": { - "baseline": 2, - "slack": 3 - }, - "reportUnknownArgumentType": { - "baseline": 30603, - "slack": 3000 - }, - "reportUnknownLambdaType": { - "baseline": 75, - "slack": 10 - }, - "reportUnknownMemberType": { - "baseline": 27037, - "slack": 2500 - }, - "reportUnknownParameterType": { - "baseline": 13612, - "slack": 1000 - }, - "reportUnknownVariableType": { - "baseline": 21445, - "slack": 2000 - }, - "reportUnnecessaryCast": { - "baseline": 118, - "slack": 10 - }, - "reportUnnecessaryComparison": { - "baseline": 683, - "slack": 100 - }, - "reportUnnecessaryContains": { - "baseline": 4, - "slack": 3 - }, - "reportUnnecessaryIsInstance": { - "baseline": 808, - "slack": 80 - }, - "reportUntypedBaseClass": { - "baseline": 110, - "slack": 11 - }, - "reportUntypedFunctionDecorator": { - "baseline": 22, - "slack": 3 - }, - "reportUnusedClass": { - "baseline": 22, - "slack": 3 - }, - "reportUnusedFunction": { - "baseline": 137, - "slack": 10 - }, - "reportUnusedImport": { - "baseline": 670, - "slack": 50 - }, - "reportUnusedVariable": { - "baseline": 865, - "slack": 50 - } -} +{} diff --git a/litellm/proxy/management_helpers/object_permission_utils.py b/litellm/proxy/management_helpers/object_permission_utils.py index ed8219d8931..c9c96816ed2 100644 --- a/litellm/proxy/management_helpers/object_permission_utils.py +++ b/litellm/proxy/management_helpers/object_permission_utils.py @@ -456,6 +456,43 @@ def _extract_requested_mcp_toolsets( return set() +def _validate_all_mcp_servers_sentinel( + object_permission: Optional[ObjectPermissionDict], + team_obj: Optional["LiteLLM_TeamTableCachedObj"], + is_proxy_admin: bool, +) -> None: + if not _has_all_mcp_servers_sentinel(object_permission): + return + + if team_obj is None and is_proxy_admin: + return + + if team_obj is None: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail={ + "error": ( + "Key is not in a team. The 'all-mcp-servers' sentinel " + "cannot be assigned to personal keys by non-admin callers." + ) + }, + ) + + team_op = team_obj.object_permission + team_mcp_servers = (team_op.mcp_servers or []) if team_op else [] + if SpecialMCPServerNames.all_mcp_servers.value not in team_mcp_servers: + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail={ + "error": ( + f"Key requests 'all-mcp-servers' but team '{team_obj.team_id}' " + f"does not grant the all-mcp-servers sentinel. " + f"Team allows: {sorted(team_mcp_servers)}." + ) + }, + ) + + async def validate_key_mcp_servers_against_team( object_permission: Optional[ObjectPermissionDict], team_obj: Optional["LiteLLM_TeamTableCachedObj"], @@ -485,33 +522,7 @@ async def validate_key_mcp_servers_against_team( requested_toolsets = _extract_requested_mcp_toolsets(object_permission) - if has_all_sentinel: - if teamless_admin_assignment: - pass - elif team_obj is None: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail={ - "error": ( - "Key is not in a team. The 'all-mcp-servers' sentinel " - "cannot be assigned to personal keys by non-admin callers." - ) - }, - ) - else: - team_op = team_obj.object_permission - team_mcp_servers = (team_op.mcp_servers or []) if team_op else [] - if SpecialMCPServerNames.all_mcp_servers.value not in team_mcp_servers: - raise HTTPException( - status_code=status.HTTP_403_FORBIDDEN, - detail={ - "error": ( - f"Key requests 'all-mcp-servers' but team '{team_obj.team_id}' " - f"does not grant the all-mcp-servers sentinel. " - f"Team allows: {sorted(team_mcp_servers)}." - ) - }, - ) + _validate_all_mcp_servers_sentinel(object_permission, team_obj, is_proxy_admin) # Nothing to validate if not requested_servers and not requested_access_groups and not requested_toolsets and not has_all_sentinel: diff --git a/ruff-strict-budget.json b/ruff-strict-budget.json index 10c820324ea..1d709e592da 100644 --- a/ruff-strict-budget.json +++ b/ruff-strict-budget.json @@ -1,26 +1,26 @@ { "ANN001": { - "baseline": 2865, + "baseline": 2873, "slack": 287 }, "ANN002": { - "baseline": 64, + "baseline": 65, "slack": 5 }, "ANN003": { - "baseline": 759, + "baseline": 778, "slack": 76 }, "ANN201": { - "baseline": 1944, + "baseline": 1945, "slack": 194 }, "ANN202": { - "baseline": 858, + "baseline": 865, "slack": 86 }, "ANN204": { - "baseline": 658, + "baseline": 665, "slack": 66 }, "ANN205": { @@ -28,11 +28,11 @@ "slack": 10 }, "ANN206": { - "baseline": 120, + "baseline": 119, "slack": 10 }, "ANN401": { - "baseline": 1886, + "baseline": 1945, "slack": 189 }, "ASYNC230": { @@ -48,7 +48,7 @@ "slack": 10 }, "B008": { - "baseline": 490, + "baseline": 496, "slack": 15 }, "B009": { @@ -56,7 +56,7 @@ "slack": 5 }, "B010": { - "baseline": 187, + "baseline": 194, "slack": 10 }, "B018": { @@ -80,7 +80,7 @@ "slack": 3 }, "BLE001": { - "baseline": 2854, + "baseline": 2906, "slack": 50 }, "C401": { @@ -108,7 +108,7 @@ "slack": 3 }, "C901": { - "baseline": 301, + "baseline": 316, "slack": 15 }, "D419": { @@ -120,11 +120,11 @@ "slack": 3 }, "DTZ003": { - "baseline": 30, + "baseline": 31, "slack": 3 }, "DTZ005": { - "baseline": 229, + "baseline": 237, "slack": 15 }, "DTZ006": { @@ -132,7 +132,7 @@ "slack": 3 }, "DTZ007": { - "baseline": 20, + "baseline": 18, "slack": 3 }, "DTZ011": { @@ -160,11 +160,11 @@ "slack": 3 }, "FURB188": { - "baseline": 49, + "baseline": 51, "slack": 3 }, "I001": { - "baseline": 258, + "baseline": 274, "slack": 15 }, "LOG015": { @@ -180,7 +180,7 @@ "slack": 3 }, "PERF401": { - "baseline": 136, + "baseline": 137, "slack": 10 }, "PERF402": { @@ -192,7 +192,7 @@ "slack": 5 }, "PIE790": { - "baseline": 263, + "baseline": 264, "slack": 15 }, "PIE800": { @@ -216,7 +216,7 @@ "slack": 3 }, "PLC0414": { - "baseline": 35, + "baseline": 36, "slack": 3 }, "PLR0124": { @@ -240,7 +240,7 @@ "slack": 3 }, "PLR1714": { - "baseline": 252, + "baseline": 255, "slack": 15 }, "PLR1730": { @@ -252,7 +252,7 @@ "slack": 3 }, "PLW0127": { - "baseline": 41, + "baseline": 39, "slack": 3 }, "PLW0133": { @@ -264,7 +264,7 @@ "slack": 15 }, "PLW0603": { - "baseline": 183, + "baseline": 192, "slack": 10 }, "PLW1508": { @@ -292,19 +292,19 @@ "slack": 3 }, "RET501": { - "baseline": 35, + "baseline": 36, "slack": 3 }, "RET504": { - "baseline": 702, + "baseline": 694, "slack": 20 }, "RUF010": { - "baseline": 844, + "baseline": 848, "slack": 30 }, "RUF012": { - "baseline": 158, + "baseline": 161, "slack": 10 }, "RUF015": { @@ -316,7 +316,7 @@ "slack": 3 }, "RUF022": { - "baseline": 80, + "baseline": 83, "slack": 5 }, "RUF023": { @@ -336,15 +336,15 @@ "slack": 5 }, "RUF100": { - "baseline": 465, + "baseline": 100, "slack": 15 }, "S110": { - "baseline": 222, + "baseline": 223, "slack": 15 }, "S112": { - "baseline": 21, + "baseline": 22, "slack": 3 }, "SIM101": { @@ -364,7 +364,7 @@ "slack": 3 }, "SIM114": { - "baseline": 103, + "baseline": 105, "slack": 10 }, "SIM115": { @@ -376,7 +376,7 @@ "slack": 3 }, "SIM118": { - "baseline": 104, + "baseline": 103, "slack": 10 }, "SIM201": { @@ -396,7 +396,7 @@ "slack": 3 }, "SIM401": { - "baseline": 9, + "baseline": 10, "slack": 3 }, "TC004": { @@ -408,7 +408,7 @@ "slack": 3 }, "TID251": { - "baseline": 2664, + "baseline": 2680, "slack": 50 }, "TRY002": { @@ -416,11 +416,11 @@ "slack": 20 }, "TRY004": { - "baseline": 93, + "baseline": 94, "slack": 5 }, "TRY201": { - "baseline": 409, + "baseline": 408, "slack": 15 }, "TRY203": { @@ -428,15 +428,15 @@ "slack": 10 }, "TRY300": { - "baseline": 853, + "baseline": 854, "slack": 30 }, "UP006": { - "baseline": 12941, + "baseline": 13024, "slack": 100 }, "UP007": { - "baseline": 2520, + "baseline": 2567, "slack": 50 }, "UP008": { @@ -464,7 +464,7 @@ "slack": 3 }, "UP032": { - "baseline": 609, + "baseline": 613, "slack": 20 }, "UP034": { @@ -472,7 +472,7 @@ "slack": 3 }, "UP035": { - "baseline": 2250, + "baseline": 2268, "slack": 50 }, "UP036": { @@ -480,11 +480,11 @@ "slack": 3 }, "UP037": { - "baseline": 100, + "baseline": 105, "slack": 5 }, "UP045": { - "baseline": 18417, + "baseline": 18171, "slack": 100 } }