Skip to content

Commit c47c767

Browse files
authored
Python lint: Ruff rules for pylint and code complexity (#525)
1 parent 47d35f0 commit c47c767

File tree

5 files changed

+37
-22
lines changed

5 files changed

+37
-22
lines changed

pyproject.toml

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,36 @@ executionEnvironments = [
102102
{ root = "examples/servers", reportUnusedFunction = false },
103103
]
104104

105-
[tool.ruff.lint]
106-
select = ["C4", "E", "F", "I", "PERF", "UP"]
107-
ignore = ["PERF203"]
108-
109105
[tool.ruff]
110106
line-length = 120
111107
target-version = "py310"
112108
extend-exclude = ["README.md"]
113109

110+
[tool.ruff.lint]
111+
select = [
112+
"C4", # flake8-comprehensions
113+
"C90", # mccabe
114+
"E", # pycodestyle
115+
"F", # pyflakes
116+
"I", # isort
117+
"PERF", # Perflint
118+
"PL", # Pylint
119+
"UP", # pyupgrade
120+
]
121+
ignore = ["PERF203", "PLC0415", "PLR0402"]
122+
mccabe.max-complexity = 24 # Default is 10
123+
114124
[tool.ruff.lint.per-file-ignores]
115125
"__init__.py" = ["F401"]
116126
"tests/server/fastmcp/test_func_metadata.py" = ["E501"]
127+
"tests/shared/test_progress_notifications.py" = ["PLW0603"]
128+
129+
[tool.ruff.lint.pylint]
130+
allow-magic-value-types = ["bytes", "float", "int", "str"]
131+
max-args = 23 # Default is 5
132+
max-branches = 23 # Default is 12
133+
max-returns = 13 # Default is 6
134+
max-statements = 102 # Default is 50
117135

118136
[tool.uv.workspace]
119137
members = ["examples/servers/*", "examples/snippets"]

src/mcp/server/fastmcp/server.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,8 @@ def __init__(
182182
raise ValueError("Cannot specify both auth_server_provider and token_verifier")
183183
if not auth_server_provider and not token_verifier:
184184
raise ValueError("Must specify either auth_server_provider or token_verifier when auth is enabled")
185-
else:
186-
if auth_server_provider or token_verifier:
187-
raise ValueError("Cannot specify auth_server_provider or token_verifier without auth settings")
185+
elif auth_server_provider or token_verifier:
186+
raise ValueError("Cannot specify auth_server_provider or token_verifier without auth settings")
188187

189188
self._auth_server_provider = auth_server_provider
190189
self._token_verifier = token_verifier

src/mcp/server/fastmcp/utilities/func_metadata.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,14 @@ def pre_parse_json(self, data: dict[str, Any]) -> dict[str, Any]:
139139
if field_info.alias:
140140
key_to_field_info[field_info.alias] = field_info
141141

142-
for data_key in data.keys():
142+
for data_key, data_value in data.items():
143143
if data_key not in key_to_field_info:
144144
continue
145145

146146
field_info = key_to_field_info[data_key]
147-
if isinstance(data[data_key], str) and field_info.annotation is not str:
147+
if isinstance(data_value, str) and field_info.annotation is not str:
148148
try:
149-
pre_parsed = json.loads(data[data_key])
149+
pre_parsed = json.loads(data_value)
150150
except json.JSONDecodeError:
151151
continue # Not JSON - skip
152152
if isinstance(pre_parsed, str | int | float):

src/mcp/server/lowlevel/server.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ async def main():
8585
from mcp.server.lowlevel.helper_types import ReadResourceContents
8686
from mcp.server.models import InitializationOptions
8787
from mcp.server.session import ServerSession
88-
from mcp.server.stdio import stdio_server as stdio_server
8988
from mcp.shared.context import RequestContext
9089
from mcp.shared.exceptions import McpError
9190
from mcp.shared.message import ServerMessageMetadata, SessionMessage

src/mcp/server/streamable_http.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -838,17 +838,16 @@ async def message_router():
838838
# If this response is for an existing request stream,
839839
# send it there
840840
target_request_id = response_id
841-
else:
842-
# Extract related_request_id from meta if it exists
843-
if (
844-
session_message.metadata is not None
845-
and isinstance(
846-
session_message.metadata,
847-
ServerMessageMetadata,
848-
)
849-
and session_message.metadata.related_request_id is not None
850-
):
851-
target_request_id = str(session_message.metadata.related_request_id)
841+
# Extract related_request_id from meta if it exists
842+
elif (
843+
session_message.metadata is not None
844+
and isinstance(
845+
session_message.metadata,
846+
ServerMessageMetadata,
847+
)
848+
and session_message.metadata.related_request_id is not None
849+
):
850+
target_request_id = str(session_message.metadata.related_request_id)
852851

853852
request_stream_id = target_request_id if target_request_id is not None else GET_STREAM_KEY
854853

0 commit comments

Comments
 (0)