mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-21 04:54:17 +02:00
The pytest-retry plugin was causing teardown crashes due to a bug with pytest's tmp_path fixture stash. Removing `@pytest.mark.flaky` and instead improving the rate limit detection to properly skip tests on 429 errors. Also fixed a brittle error message regex - GitHub changed their error format from "tool not found" to "unknown tool". 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <noreply@anthropic.com>
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
import os
|
|
|
|
import pytest
|
|
|
|
|
|
def _is_rate_limit_error(excinfo) -> bool:
|
|
"""Check if an exception indicates a rate limit error from GitHub API."""
|
|
if excinfo is None:
|
|
return False
|
|
|
|
exc = excinfo.value
|
|
exc_type = excinfo.typename
|
|
exc_str = str(exc).lower()
|
|
|
|
# BrokenResourceError typically indicates connection closed due to rate limit
|
|
if exc_type == "BrokenResourceError":
|
|
return True
|
|
|
|
# httpx.HTTPStatusError with 429 status
|
|
if exc_type == "HTTPStatusError":
|
|
try:
|
|
if hasattr(exc, "response") and exc.response.status_code == 429:
|
|
return True
|
|
except Exception:
|
|
pass
|
|
|
|
# Check for rate limit indicators in exception message
|
|
if "429" in exc_str or "rate limit" in exc_str or "too many requests" in exc_str:
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
@pytest.hookimpl(hookwrapper=True)
|
|
def pytest_runtest_makereport(item, call):
|
|
"""Convert rate limit failures to skips for GitHub integration tests."""
|
|
outcome = yield
|
|
report = outcome.get_result()
|
|
|
|
# Only process actual failures during the call phase, not xfails
|
|
if (
|
|
report.when == "call"
|
|
and report.failed
|
|
and not hasattr(report, "wasxfail")
|
|
and item.module.__name__ == "tests.integration_tests.test_github_mcp_remote"
|
|
and _is_rate_limit_error(call.excinfo)
|
|
):
|
|
report.outcome = "skipped"
|
|
report.longrepr = (
|
|
os.path.abspath(__file__),
|
|
None,
|
|
"Skipped: Skipping due to GitHub API rate limit (429)",
|
|
)
|