@@ -419,7 +419,6 @@ def settimeout(self, timeout: float | None) -> None:
419419 self .conn [1 ].settimeout (timeout )
420420
421421 async def close (self ) -> None :
422- # print(f"Closing network interface from {''.join(traceback.format_stack())}")
423422 self .conn [0 ].abort ()
424423 await self .conn [1 ].wait_closed ()
425424
@@ -516,7 +515,11 @@ async def write(self, message: bytes) -> None:
516515 async def read (self , request_id : Optional [int ], max_message_size : int ) -> tuple [bytes , int ]:
517516 """Read a single MongoDB Wire Protocol message from this connection."""
518517 if self .transport :
519- self .transport .resume_reading ()
518+ try :
519+ self .transport .resume_reading ()
520+ # Known bug in SSL Protocols, fixed in Python 3.11: https://github.com/python/cpython/issues/89322
521+ except AttributeError :
522+ raise OSError ("connection is already closed" ) from None
520523 if self ._done_messages :
521524 message = await self ._done_messages .popleft ()
522525 else :
@@ -557,25 +560,23 @@ async def read(self, request_id: Optional[int], max_message_size: int) -> tuple[
557560 if overflow is not None :
558561 if is_compressed and compressor_id is not None :
559562 return decompress (
560- memoryview (
561- bytearray (self ._buffer [start + header_size : self ._end_index ])
562- + bytearray (overflow [:overflow_index ])
563- ),
563+ self ._buffer [start + header_size : self ._end_index ].tobytes ()
564+ + overflow [:overflow_index ].tobytes (),
564565 compressor_id ,
565566 ), op_code
566567 else :
567- return memoryview (
568- bytearray ( self ._buffer [start + header_size : self ._end_index ])
569- + bytearray ( overflow [:overflow_index ])
568+ return (
569+ self ._buffer [start + header_size : self ._end_index ]. tobytes ( )
570+ + overflow [:overflow_index ]. tobytes ( )
570571 ), op_code
571572 else :
572573 if is_compressed and compressor_id is not None :
573574 return decompress (
574- memoryview ( self ._buffer [start + header_size : end ]) ,
575+ self ._buffer [start + header_size : end ],
575576 compressor_id ,
576577 ), op_code
577578 else :
578- return memoryview ( self ._buffer [start + header_size : end ]), op_code
579+ return self ._buffer [start + header_size : end ]. tobytes ( ), op_code
579580 raise OSError ("connection closed" )
580581
581582 def get_buffer (self , sizehint : int ) -> memoryview :
@@ -736,8 +737,8 @@ async def _drain_helper(self) -> None:
736737 self ._drain_waiter = asyncio .get_running_loop ().create_future ()
737738 await self ._drain_waiter
738739
739- def data (self ) -> memoryview :
740- return self ._buffer
740+ def data (self ) -> bytes :
741+ return self ._buffer . tobytes ()
741742
742743 async def wait_closed (self ) -> None :
743744 await asyncio .wait ([self ._closed ])
0 commit comments