@@ -91,7 +91,7 @@ async def store_event(self, stream_id: StreamId, message: JSONRPCMessage | None)
9191 Returns:
9292 The generated event ID for the stored event.
9393 """
94- pass # pragma: no cover
94+ pass # pragma: lax no cover
9595
9696 @abstractmethod
9797 async def replay_events_after (
@@ -108,7 +108,7 @@ async def replay_events_after(
108108 Returns:
109109 The stream ID of the replayed events, or None if no events were found.
110110 """
111- pass # pragma: no cover
111+ pass # pragma: lax no cover
112112
113113
114114class StreamableHTTPServerTransport :
@@ -354,7 +354,7 @@ async def _clean_up_memory_streams(self, request_id: RequestId) -> None:
354354 # Close the request stream
355355 await self ._request_streams [request_id ][0 ].aclose ()
356356 await self ._request_streams [request_id ][1 ].aclose ()
357- except Exception : # pragma: no cover
357+ except Exception : # pragma: lax no cover
358358 # During cleanup, we catch all exceptions since streams might be in various states
359359 logger .debug ("Error closing memory streams - may already be closed" )
360360 finally :
@@ -439,15 +439,15 @@ async def _validate_accept_header(self, request: Request, scope: Scope, send: Se
439439 async def _handle_post_request (self , scope : Scope , request : Request , receive : Receive , send : Send ) -> None :
440440 """Handle POST requests containing JSON-RPC messages."""
441441 writer = self ._read_stream_writer
442- if writer is None : # pragma: no cover
442+ if writer is None : # pragma: lax no cover
443443 raise ValueError ("No read stream writer available. Ensure connect() is called first." )
444444 try :
445445 # Validate Accept header
446446 if not await self ._validate_accept_header (request , scope , send ):
447447 return
448448
449449 # Validate Content-Type
450- if not self ._check_content_type (request ): # pragma: no cover
450+ if not self ._check_content_type (request ): # pragma: lax no cover
451451 response = self ._create_error_response (
452452 "Unsupported Media Type: Content-Type must be application/json" ,
453453 HTTPStatus .UNSUPPORTED_MEDIA_TYPE ,
@@ -486,7 +486,7 @@ async def _handle_post_request(self, scope: Scope, request: Request, receive: Re
486486 request_session_id = self ._get_session_id (request )
487487
488488 # If request has a session ID but doesn't match, return 404
489- if request_session_id and request_session_id != self .mcp_session_id : # pragma: no cover
489+ if request_session_id and request_session_id != self .mcp_session_id : # pragma: lax no cover
490490 response = self ._create_error_response (
491491 "Not Found: Invalid or expired session ID" ,
492492 HTTPStatus .NOT_FOUND ,
@@ -544,23 +544,23 @@ async def _handle_post_request(self, scope: Scope, request: Request, receive: Re
544544 response_message = event_message .message
545545 break
546546 # For notifications and requests, keep waiting
547- else : # pragma: no cover
547+ else : # pragma: lax no cover
548548 logger .debug (f"received: { event_message .message .method } " )
549549
550550 # At this point we should have a response
551551 if response_message :
552552 # Create JSON response
553553 response = self ._create_json_response (response_message )
554554 await response (scope , receive , send )
555- else : # pragma: no cover
555+ else : # pragma: lax no cover
556556 # This shouldn't happen in normal operation
557557 logger .error ("No response message received before stream closed" )
558558 response = self ._create_error_response (
559559 "Error processing request: No response received" ,
560560 HTTPStatus .INTERNAL_SERVER_ERROR ,
561561 )
562562 await response (scope , receive , send )
563- except Exception : # pragma: no cover
563+ except Exception : # pragma: lax no cover
564564 logger .exception ("Error processing JSON response" )
565565 response = self ._create_error_response (
566566 "Error processing request" ,
@@ -626,14 +626,14 @@ async def sse_writer(): # pragma: lax no cover
626626 # Then send the message to be processed by the server
627627 session_message = self ._create_session_message (message , request , request_id , protocol_version )
628628 await writer .send (session_message )
629- except Exception : # pragma: no cover
629+ except Exception : # pragma: lax no cover
630630 logger .exception ("SSE response error" )
631631 await sse_stream_writer .aclose ()
632632 await self ._clean_up_memory_streams (request_id )
633633 finally :
634634 await sse_stream_reader .aclose ()
635635
636- except Exception as err : # pragma: no cover
636+ except Exception as err : # pragma: lax no cover
637637 logger .exception ("Error handling POST request" )
638638 response = self ._create_error_response (
639639 f"Error handling POST request: { err } " ,
@@ -653,7 +653,7 @@ async def _handle_get_request(self, request: Request, send: Send) -> None:
653653 and notifications on this stream.
654654 """
655655 writer = self ._read_stream_writer
656- if writer is None : # pragma: no cover
656+ if writer is None : # pragma: lax no cover
657657 raise ValueError ("No read stream writer available. Ensure connect() is called first." )
658658
659659 # Validate Accept header - must include text/event-stream
@@ -667,7 +667,7 @@ async def _handle_get_request(self, request: Request, send: Send) -> None:
667667 await response (request .scope , request .receive , send )
668668 return
669669
670- if not await self ._validate_request_headers (request , send ): # pragma: no cover
670+ if not await self ._validate_request_headers (request , send ): # pragma: lax no cover
671671 return
672672
673673 # Handle resumability: check for Last-Event-ID header
@@ -740,7 +740,7 @@ async def standalone_sse_writer():
740740 async def _handle_delete_request (self , request : Request , send : Send ) -> None :
741741 """Handle DELETE requests for explicit session termination."""
742742 # Validate session ID
743- if not self .mcp_session_id : # pragma: no cover
743+ if not self .mcp_session_id : # pragma: lax no cover
744744 # If no session ID set, return Method Not Allowed
745745 response = self ._create_error_response (
746746 "Method Not Allowed: Session termination not supported" ,
@@ -749,7 +749,7 @@ async def _handle_delete_request(self, request: Request, send: Send) -> None:
749749 await response (request .scope , request .receive , send )
750750 return
751751
752- if not await self ._validate_request_headers (request , send ): # pragma: no cover
752+ if not await self ._validate_request_headers (request , send ): # pragma: lax no cover
753753 return
754754
755755 await self .terminate ()
@@ -787,7 +787,7 @@ async def terminate(self) -> None:
787787 await self ._write_stream_reader .aclose ()
788788 if self ._write_stream is not None : # pragma: no branch
789789 await self ._write_stream .aclose ()
790- except Exception as e : # pragma: no cover
790+ except Exception as e : # pragma: lax no cover
791791 # During cleanup, we catch all exceptions since streams might be in various states
792792 logger .debug (f"Error closing streams: { e } " )
793793
@@ -816,7 +816,7 @@ async def _validate_request_headers(self, request: Request, send: Send) -> bool:
816816
817817 async def _validate_session (self , request : Request , send : Send ) -> bool :
818818 """Validate the session ID in the request."""
819- if not self .mcp_session_id : # pragma: no cover
819+ if not self .mcp_session_id : # pragma: lax no cover
820820 # If we're not using session IDs, return True
821821 return True
822822
@@ -833,7 +833,7 @@ async def _validate_session(self, request: Request, send: Send) -> bool:
833833 return False
834834
835835 # If session ID doesn't match, return error
836- if request_session_id != self .mcp_session_id : # pragma: no cover
836+ if request_session_id != self .mcp_session_id : # pragma: lax no cover
837837 response = self ._create_error_response (
838838 "Not Found: Invalid or expired session ID" ,
839839 HTTPStatus .NOT_FOUND ,
@@ -872,7 +872,7 @@ async def _replay_events(self, last_event_id: str, request: Request, send: Send)
872872 """
873873 event_store = self ._event_store
874874 if not event_store :
875- return # pragma: no cover
875+ return # pragma: lax no cover
876876
877877 try :
878878 headers = {
@@ -921,9 +921,9 @@ async def send_event(event_message: EventMessage) -> None:
921921 await sse_stream_writer .send (event_data )
922922 except anyio .ClosedResourceError :
923923 # Expected when close_sse_stream() is called
924- logger .debug ("Replay SSE stream closed by close_sse_stream()" ) # pragma: no cover
924+ logger .debug ("Replay SSE stream closed by close_sse_stream()" ) # pragma: lax no cover
925925 except Exception : # pragma: lax no cover
926- logger .exception ("Error in replay sender" ) # pragma: no cover
926+ logger .exception ("Error in replay sender" ) # pragma: lax no cover
927927
928928 # Create and start EventSourceResponse
929929 response = EventSourceResponse (
@@ -934,20 +934,20 @@ async def send_event(event_message: EventMessage) -> None:
934934
935935 try :
936936 await response (request .scope , request .receive , send )
937- except Exception : # pragma: no cover
938- logger .exception ("Error in replay response" ) # pragma: no cover
937+ except Exception : # pragma: lax no cover
938+ logger .exception ("Error in replay response" ) # pragma: lax no cover
939939 finally :
940940 await sse_stream_writer .aclose ()
941941 await sse_stream_reader .aclose ()
942942
943- except Exception : # pragma: no cover
944- logger .exception ("Error replaying events" ) # pragma: no cover
945- response = self ._create_error_response ( # pragma: no cover
946- "Error replaying events" , # pragma: no cover
947- HTTPStatus .INTERNAL_SERVER_ERROR , # pragma: no cover
948- INTERNAL_ERROR , # pragma: no cover
949- ) # pragma: no cover
950- await response (request .scope , request .receive , send ) # pragma: no cover
943+ except Exception : # pragma: lax no cover
944+ logger .exception ("Error replaying events" ) # pragma: lax no cover
945+ response = self ._create_error_response ( # pragma: lax no cover
946+ "Error replaying events" , # pragma: lax no cover
947+ HTTPStatus .INTERNAL_SERVER_ERROR , # pragma: lax no cover
948+ INTERNAL_ERROR , # pragma: lax no cover
949+ ) # pragma: lax no cover
950+ await response (request .scope , request .receive , send ) # pragma: lax no cover
951951
952952 @asynccontextmanager
953953 async def connect (
@@ -1049,6 +1049,6 @@ async def message_router():
10491049 await read_stream .aclose ()
10501050 await write_stream_reader .aclose ()
10511051 await write_stream .aclose ()
1052- except Exception as e : # pragma: no cover
1052+ except Exception as e : # pragma: lax no cover
10531053 # During cleanup, we catch all exceptions since streams might be in various states
10541054 logger .debug (f"Error closing streams: { e } " )
0 commit comments