Python lint: Ruff rules for pylint and code complexity (#525)

This commit is contained in:
Christian Clauss 2025-09-05 16:20:14 +02:00 • committed by GitHub
commit c47c767ff4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 37 additions and 22 deletions

View file

@ -102,18 +102,36 @@ executionEnvironments = [
{ root = "examples/servers", reportUnusedFunction = false },
]
[tool.ruff.lint]
select = ["C4", "E", "F", "I", "PERF", "UP"]
ignore = ["PERF203"]
[tool.ruff]
line-length = 120
target-version = "py310"
extend-exclude = ["README.md"]
[tool.ruff.lint]
select = [
"C4", # flake8-comprehensions
"C90", # mccabe
"E", # pycodestyle
"F", # pyflakes
"I", # isort
"PERF", # Perflint
"PL", # Pylint
"UP", # pyupgrade
]
ignore = ["PERF203", "PLC0415", "PLR0402"]
mccabe.max-complexity = 24 # Default is 10
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"]
"tests/server/fastmcp/test_func_metadata.py" = ["E501"]
"tests/shared/test_progress_notifications.py" = ["PLW0603"]
[tool.ruff.lint.pylint]
allow-magic-value-types = ["bytes", "float", "int", "str"]
max-args = 23 # Default is 5
max-branches = 23 # Default is 12
max-returns = 13 # Default is 6
max-statements = 102 # Default is 50
[tool.uv.workspace]
members = ["examples/servers/*", "examples/snippets"]

View file

@ -182,9 +182,8 @@ class FastMCP(Generic[LifespanResultT]):
raise ValueError("Cannot specify both auth_server_provider and token_verifier")
if not auth_server_provider and not token_verifier:
raise ValueError("Must specify either auth_server_provider or token_verifier when auth is enabled")
else:
if auth_server_provider or token_verifier:
raise ValueError("Cannot specify auth_server_provider or token_verifier without auth settings")
elif auth_server_provider or token_verifier:
raise ValueError("Cannot specify auth_server_provider or token_verifier without auth settings")
self._auth_server_provider = auth_server_provider
self._token_verifier = token_verifier

View file

@ -139,14 +139,14 @@ class FuncMetadata(BaseModel):
if field_info.alias:
key_to_field_info[field_info.alias] = field_info
for data_key in data.keys():
for data_key, data_value in data.items():
if data_key not in key_to_field_info:
continue
field_info = key_to_field_info[data_key]
if isinstance(data[data_key], str) and field_info.annotation is not str:
if isinstance(data_value, str) and field_info.annotation is not str:
try:
pre_parsed = json.loads(data[data_key])
pre_parsed = json.loads(data_value)
except json.JSONDecodeError:
continue # Not JSON - skip
if isinstance(pre_parsed, str | int | float):

View file

@ -85,7 +85,6 @@ import mcp.types as types
from mcp.server.lowlevel.helper_types import ReadResourceContents
from mcp.server.models import InitializationOptions
from mcp.server.session import ServerSession
from mcp.server.stdio import stdio_server as stdio_server
from mcp.shared.context import RequestContext
from mcp.shared.exceptions import McpError
from mcp.shared.message import ServerMessageMetadata, SessionMessage

View file

@ -838,17 +838,16 @@ class StreamableHTTPServerTransport:
# If this response is for an existing request stream,
# send it there
target_request_id = response_id
else:
# Extract related_request_id from meta if it exists
if (
session_message.metadata is not None
and isinstance(
session_message.metadata,
ServerMessageMetadata,
)
and session_message.metadata.related_request_id is not None
):
target_request_id = str(session_message.metadata.related_request_id)
# Extract related_request_id from meta if it exists
elif (
session_message.metadata is not None
and isinstance(
session_message.metadata,
ServerMessageMetadata,
)
and session_message.metadata.related_request_id is not None
):
target_request_id = str(session_message.metadata.related_request_id)
request_stream_id = target_request_id if target_request_id is not None else GET_STREAM_KEY