Skip to content

Commit b327300

Browse files
committed
fix: remove unnecessary pragma: no cover from src/ files
Remove or adjust coverage pragmas in src/ files that were flagged by strict-no-cover as covering already-tested code. Changes: - Remove pragmas from lines/blocks that are fully covered by tests - Change '# pragma: no cover' to '# pragma: no branch' on lines where the condition itself is executed but one branch isn't taken - Move pragmas from except clause headers to their uncovered bodies where the except IS matched but the handler body isn't reached - Add targeted pragmas to genuinely uncovered code paths (error handlers, rarely-hit branches, cleanup paths) Files modified: 16 src/ files across cli, client, server, and shared
1 parent 9950d07 commit b327300

File tree

16 files changed

+67
-67
lines changed

16 files changed

+67
-67
lines changed

src/mcp/cli/claude.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def update_claude_config(
7272
)
7373

7474
config_file = config_dir / "claude_desktop_config.json"
75-
if not config_file.exists(): # pragma: no cover
75+
if not config_file.exists():
7676
try:
7777
config_file.write_text("{}")
7878
except Exception:

src/mcp/cli/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def _build_uv_command(
7777

7878
if with_packages:
7979
for pkg in with_packages:
80-
if pkg: # pragma: no branch
80+
if pkg:
8181
cmd.extend(["--with", pkg])
8282

8383
# Add mcp run command

src/mcp/client/auth/oauth2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ async def async_auth_flow(self, request: httpx.Request) -> AsyncGenerator[httpx.
534534
)
535535

536536
# Step 2: Discover OAuth Authorization Server Metadata (OASM) (with fallback for legacy servers)
537-
for url in asm_discovery_urls: # pragma: no branch
537+
for url in asm_discovery_urls:
538538
oauth_metadata_request = create_oauth_metadata_request(url)
539539
oauth_metadata_response = yield oauth_metadata_request
540540

src/mcp/client/session_group.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,22 +223,22 @@ async def disconnect_from_server(self, session: mcp.ClientSession) -> None:
223223
)
224224
)
225225

226-
if session_known_for_components: # pragma: no branch
226+
if session_known_for_components:
227227
component_names = self._sessions.pop(session) # Pop from _sessions tracking
228228

229229
# Remove prompts associated with the session.
230230
for name in component_names.prompts:
231-
if name in self._prompts: # pragma: no branch
231+
if name in self._prompts:
232232
del self._prompts[name]
233233
# Remove resources associated with the session.
234234
for name in component_names.resources:
235-
if name in self._resources: # pragma: no branch
235+
if name in self._resources:
236236
del self._resources[name]
237237
# Remove tools associated with the session.
238238
for name in component_names.tools:
239-
if name in self._tools: # pragma: no branch
239+
if name in self._tools:
240240
del self._tools[name]
241-
if name in self._tool_to_session: # pragma: no branch
241+
if name in self._tool_to_session:
242242
del self._tool_to_session[name]
243243

244244
# Clean up the session's resources via its dedicated exit stack

src/mcp/client/sse.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,10 @@ async def sse_reader(task_status: TaskStatus[str] = anyio.TASK_STATUS_IGNORED):
119119
await read_stream_writer.send(session_message)
120120
case _: # pragma: no cover
121121
logger.warning(f"Unknown SSE event: {sse.event}") # pragma: no cover
122-
except SSEError as sse_exc: # pragma: no cover
122+
except SSEError as sse_exc:
123123
logger.exception("Encountered SSE exception")
124124
raise sse_exc
125-
except Exception as exc: # pragma: no cover
125+
except Exception as exc:
126126
logger.exception("Error in sse_reader")
127127
await read_stream_writer.send(exc)
128128
finally:
@@ -143,7 +143,7 @@ async def post_writer(endpoint_url: str):
143143
)
144144
response.raise_for_status()
145145
logger.debug(f"Client message sent successfully: {response.status_code}")
146-
except Exception: # pragma: no cover
146+
except Exception:
147147
logger.exception("Error in post_writer")
148148
finally:
149149
await write_stream.aclose()

src/mcp/client/streamable_http.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,8 @@ async def handle_get_stream(self, client: httpx.AsyncClient, read_stream_writer:
201201
attempt = 0
202202

203203
except Exception as exc:
204-
logger.debug(f"GET stream error: {exc}")
205-
attempt += 1
204+
logger.debug(f"GET stream error: {exc}") # pragma: no cover
205+
attempt += 1 # pragma: no cover
206206

207207
if attempt >= MAX_RECONNECTION_ATTEMPTS: # pragma: no cover
208208
logger.debug(f"GET stream max reconnection attempts ({MAX_RECONNECTION_ATTEMPTS}) exceeded")
@@ -334,7 +334,7 @@ async def _handle_sse_response(
334334
await response.aclose()
335335
return # Normal completion, no reconnect needed
336336
except Exception as e:
337-
logger.debug(f"SSE stream ended: {e}")
337+
logger.debug(f"SSE stream ended: {e}") # pragma: no cover
338338

339339
# Stream ended without response - reconnect if we received an event with ID
340340
if last_event_id is not None: # pragma: no branch
@@ -474,18 +474,18 @@ async def handle_request_async():
474474

475475
async def terminate_session(self, client: httpx.AsyncClient) -> None:
476476
"""Terminate the session by sending a DELETE request."""
477-
if not self.session_id:
477+
if not self.session_id: # pragma: no branch
478478
return
479479

480480
try:
481481
headers = self._prepare_headers()
482482
response = await client.delete(self.url, headers=headers)
483483

484-
if response.status_code == 405:
484+
if response.status_code == 405: # pragma: no branch
485485
logger.debug("Server does not allow session termination")
486-
elif response.status_code not in (200, 204):
486+
elif response.status_code not in (200, 204): # pragma: no branch
487487
logger.warning(f"Session termination failed: {response.status_code}")
488-
except Exception as exc:
488+
except Exception as exc: # pragma: no cover
489489
logger.warning(f"Session termination failed: {exc}")
490490

491491
def get_session_id(self) -> str | None:

src/mcp/server/auth/handlers/token.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ async def handle(self, request: Request):
178178
except TokenError as e:
179179
return self.response(TokenErrorResponse(error=e.error, error_description=e.error_description))
180180

181-
case RefreshTokenRequest(): # pragma: no branch
181+
case RefreshTokenRequest():
182182
refresh_token = await self.provider.load_refresh_token(client_info, token_request.refresh_token)
183183
if refresh_token is None or refresh_token.client_id != token_request.client_id:
184184
# if token belongs to different client, pretend it doesn't exist

src/mcp/server/auth/middleware/client_auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ async def authenticate_request(self, request: Request) -> OAuthClientInformation
9696

9797
# If client from the store expects a secret, validate that the request provides
9898
# that secret
99-
if client.client_secret: # pragma: no branch
99+
if client.client_secret:
100100
if not request_client_secret:
101101
raise AuthenticationError("Client secret is required")
102102

src/mcp/server/experimental/task_context.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ async def elicit_url(
317317
response_data = await resolver.wait()
318318
await self._store.update_task(self.task_id, status=TASK_STATUS_WORKING)
319319
return ElicitResult.model_validate(response_data)
320-
except anyio.get_cancelled_exc_class(): # pragma: no cover
320+
except anyio.get_cancelled_exc_class():
321321
await self._store.update_task(self.task_id, status=TASK_STATUS_WORKING)
322322
raise
323323

@@ -486,7 +486,7 @@ async def elicit_as_task(
486486
await self._store.update_task(self.task_id, status=TASK_STATUS_WORKING)
487487
return result
488488

489-
except anyio.get_cancelled_exc_class(): # pragma: no cover
489+
except anyio.get_cancelled_exc_class():
490490
await self._store.update_task(self.task_id, status=TASK_STATUS_WORKING)
491491
raise
492492

src/mcp/server/fastmcp/server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -873,7 +873,7 @@ async def handle_sse(scope: Scope, receive: Receive, send: Send): # pragma: no
873873
app=RequireAuthMiddleware(sse.handle_post_message, required_scopes, resource_metadata_url),
874874
)
875875
)
876-
else: # pragma: no cover
876+
else:
877877
# Auth is disabled, no need for RequireAuthMiddleware
878878
# Since handle_sse is an ASGI app, we need to create a compatible endpoint
879879
async def sse_endpoint(request: Request) -> Response:

0 commit comments

Comments
 (0)