@@ -419,7 +419,6 @@ def settimeout(self, timeout: float | None) -> None:
419
419
self .conn [1 ].settimeout (timeout )
420
420
421
421
async def close (self ) -> None :
422
- # print(f"Closing network interface from {''.join(traceback.format_stack())}")
423
422
self .conn [0 ].abort ()
424
423
await self .conn [1 ].wait_closed ()
425
424
@@ -516,7 +515,11 @@ async def write(self, message: bytes) -> None:
516
515
async def read (self , request_id : Optional [int ], max_message_size : int ) -> tuple [bytes , int ]:
517
516
"""Read a single MongoDB Wire Protocol message from this connection."""
518
517
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
520
523
if self ._done_messages :
521
524
message = await self ._done_messages .popleft ()
522
525
else :
@@ -557,25 +560,23 @@ async def read(self, request_id: Optional[int], max_message_size: int) -> tuple[
557
560
if overflow is not None :
558
561
if is_compressed and compressor_id is not None :
559
562
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 (),
564
565
compressor_id ,
565
566
), op_code
566
567
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 ( )
570
571
), op_code
571
572
else :
572
573
if is_compressed and compressor_id is not None :
573
574
return decompress (
574
- memoryview ( self ._buffer [start + header_size : end ]) ,
575
+ self ._buffer [start + header_size : end ],
575
576
compressor_id ,
576
577
), op_code
577
578
else :
578
- return memoryview ( self ._buffer [start + header_size : end ]), op_code
579
+ return self ._buffer [start + header_size : end ]. tobytes ( ), op_code
579
580
raise OSError ("connection closed" )
580
581
581
582
def get_buffer (self , sizehint : int ) -> memoryview :
@@ -736,8 +737,8 @@ async def _drain_helper(self) -> None:
736
737
self ._drain_waiter = asyncio .get_running_loop ().create_future ()
737
738
await self ._drain_waiter
738
739
739
- def data (self ) -> memoryview :
740
- return self ._buffer
740
+ def data (self ) -> bytes :
741
+ return self ._buffer . tobytes ()
741
742
742
743
async def wait_closed (self ) -> None :
743
744
await asyncio .wait ([self ._closed ])
0 commit comments