
    &gv                       S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSKJ
r
JrJrJrJr  SSKJrJrJrJr  SSKJrJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSK J!r!J"r"J#r#  SSK$J%r%   SSK&J'r'J(r(  Sr) SSK+J,r,J-r-J.r.J/r/  Sr0\(       a  SSK2J3r3  SSK4J5r5  \Rl                  " S5      Rn                  r8\Rl                  " S5      Rn                  r9Sr:\;\,/\Rx                  Q7r<S/S jr=\R|                  S:w  a          S0S jr? S1         S2S jjr@O        S3S jr? S1         S4S jjr@S/S jrAS5S jrB      S6S jrC        S7S  jrDS!\R                  ;   rFS8S" jrGS9S# jrH " S$ S%5      rI " S& S'\I5      rJ " S( S)\I5      rK " S* S+\5      rLS:S, jrM\4       S;S- jjrN\4       S<S. jjrOg! \* a    Sr) GNTf = f! \* a    Sr0\(r/SSK1J,r,J-r-J.r.   GN`f = f)=z&Internal network layer helper methods.    )annotationsN)AbstractEventLoopBaseTransportBufferedProtocolFuture	Transport)TYPE_CHECKINGAnyOptionalUnion)_csotssl_support)create_task)MAX_MESSAGE_SIZE)
decompress)ProtocolError_OperationCancelled)_UNPACK_REPLY_OpMsg_OpReply)_errno_from_exception)SSLError	SSLSocketTF)BLOCKING_IO_LOOKUP_ERRORBLOCKING_IO_READ_ERRORBLOCKING_IO_WRITE_ERROR_sslConn)r   r   r   )AsyncConnection)
Connectionz<iiiiz<iiBg      ?c                ,  #    U R                  5       nU R                  S5        [        R                  " 5       n [        (       aC  [        U [        [        45      (       a(  [        R                  " [        XU5      US9I S h  vN   O-[        R                  " UR                  X5      US9I S h  vN    U R                  U5        g  ND N! [        R                   a  n[        R                  " S5      UeS nAff = f! U R                  U5        f = f7f)N        timeout	timed out)
gettimeout
settimeoutasyncioget_running_loop	_HAVE_SSL
isinstancer   r   wait_for_async_socket_sendall_sslsock_sendallTimeoutErrorsocketr#   )sockbufr#   loopexcs        ZC:\Suresh\moveshuttle\MDcreated\moveengine\venv\Lib\site-packages\pymongo/network_layer.pyasync_socket_sendallr5   O   s     ooGOOC##%D	!9D9h*?@@""#<T#MW^___""4#4#4T#?QQQ
 	  `Q 3nn[)s23 	 sk   7DAC CC C> 'C /C	0C 4C> 5DC 	C C;C66C;;C> >DDwin32c                  #    [        U5      nSnSS jnU[        U5      :  a(   X@R                  X4S  5      -  nU[        U5      :  a  M'  g g ! [         Ga  nU R	                  5       nUS:X  a  [        S5      S e[        U[        5      (       aV  UR                  5       nUR                  XuU5         UI S h  vN    UR                  U5        O! UR                  U5        f = f[        U[        5      (       aV  UR                  5       nUR                  XuU5         UI S h  vN    UR                  U5        O! UR                  U5        f = f[        (       a  [        U[        5      (       a  UR                  5       nUR                  XuU5         UR                  XuU5        UI S h  vN    UR                  U5        UR                  U5         S nAGN! UR                  U5        UR                  U5        f = f S nAGNS nAff = f7f)Nr   c                R    U R                  5       (       a  g U R                  S 5        g Ndone
set_resultfuts    r4   	_is_ready,_async_socket_sendall_ssl.<locals>._is_readyg       xxzzNN4     !Underlying socket has been closedr>   r   returnNone)
memoryviewlensendBLOCKING_IO_ERRORSfilenor   r*   r   create_future
add_readerremove_readerr   
add_writerremove_writer_HAVE_PYOPENSSLr   )	r0   r1   r2   viewsentr?   r3   fdr>   s	            r4   r,   r,   a   s     #	!
 SXo/		$u+.. SXo & /[[]8"#FGTQc#9::,,.COOB37/!		**2.**2.c#:;;,,.COOB37/!		**2.**2."?z#7O'P'P,,.COOB37/s;!		**2.**2.. **2.**2.7/s   "HA HHH
AH2C7B:8C=HC"":HD:"D%#D:(H:EAHG*F-+G0"HH$G<<H?HH

Hc                F  #    [        [        U5      5      nSnSS jnXQ:  a<   U R                  XES  5      nUS:X  a  [        S5      eU(       a  US U $ XW-  nXQ:  a  M<  U$ ! [         Ga  nU R                  5       n	U	S:X  a  [        S5      S e[        U[        5      (       aV  UR                  5       n
UR                  XU
5         U
I S h  vN    UR                  U	5        O! UR                  U	5        f = f[        U[        5      (       aV  UR                  5       n
UR                  XU
5         U
I S h  vN    UR                  U	5        O! UR                  U	5        f = f[        (       a  [        U[         5      (       a  UR                  5       n
UR                  XU
5         UR                  XU
5        U
I S h  vN    UR                  U	5        UR                  U	5         S nAGN! UR                  U	5        UR                  U	5        f = f S nAGNS nAff = f7f)Nr   c                R    U R                  5       (       a  g U R                  S 5        g r9   r:   r=   s    r4   r?   ,_async_socket_receive_ssl.<locals>._is_ready   rA   rB   connection closedrC   rD   rE   )rH   	bytearray	recv_intoOSErrorrK   rL   r   r*   r   rM   rN   rO   r   rP   rQ   rR   r   )connlengthr2   oncemv
total_readr?   readr3   rU   r>   s              r4   _async_socket_receive_sslrc      s     	&)*
	!
 !#/~~bo619!"566et9$"
 !J 	9 & /[[]8"#FGTQc#9::,,.COOB37/!		**2.**2.c#:;;,,.COOB37/!		**2.**2."?z#7O'P'P,,.COOB37/s;!		**2.**2.. **2.**2.7/s   !H!/A! H!A! H!H!!H,AHC#CC#H#C66:H1E6D97E<HE!!AH'G,>G?G,"H&H!,$HHH!HH!c                6  #    [        U5      n[        U5      nSnSnXT:  aE   U R                  X5S  5      nUS:  a  [        US-  S5      nO[        US-  S5      nXW-  nXT:  a  MD  g g ! [         a$    [        R
                  " U5      I S h  vN    Sn N_f = f7f)Nr   MbP?   Mb?)rH   rI   rJ   rK   r'   sleepmaxmin)r0   r1   dummyrS   total_length
total_sentbackoffrT   s           r4   r,   r,      s      #3x
 'yyk!23 axgk51gk51J ' & mmG,,,s9    BA( .B&B(#BBBBBBc                n  #    [        [        U5      5      nSnSnXQ:  ab   U R                  XES  5      nUS:X  a  [        S5      eU(       a  US U $  US:  a  [        US-  S5      nO[        US-  S5      nXW-  nXQ:  a  Mb  U$ ! [         a$    [
        R                  " U5      I S h  vN    Sn N_f = f7f)Nr   re   rY   rf   rg   )	rH   rZ   r[   r\   rK   r'   rh   ri   rj   )r]   r^   rk   r_   r`   ra   rn   rb   s           r4   rc   rc      s      	&)*
 !	~~bo619!"566et9$ 
 axgk51gk51J !  	 & mmG,,,s:   B5/B 0B5B5#B2'B*(B2/B51B22B5c                &    U R                  U5        g r9   )sendall)r0   r1   s     r4   rq   rq      s    LLrB   c                   #     U R                   R                  (       a  g [        R                  " [        5      I S h  vN   M@   N7fr9   )cancel_context	cancelledr'   rh   _POLL_TIMEOUTr]   s    r4   _poll_cancellationrw      s6     
((mmM***	  	+s   ;AAAc           	     @  #    U R                  5       nUnU R                  S5        [        R                  " 5       n [        (       aR  [        U [        [        45      (       a7  [        R                  " [        XUSS9US9I S h  vN U R                  U5        $ [        R                  " [        XU5      US9I S h  vN U R                  U5        $  NM N! [        R                   a  n[        R                  " S5      UeS nAff = f! U R                  U5        f = f7f)Nr!   T)r_   r"   r$   )r%   r&   r'   r(   r)   r*   r   r   r+   rc   _async_socket_receiver.   r/   r#   )r0   r^   sock_timeoutr#   r2   errs         r4   async_receive_data_socketr|      s      ??$LGOOC##%D&9D9h*?@@ )))$4H  	% !))%dD9  	%
  3nn[)s23 	%se   9DAC CC D"C ;C<C ?DC C D)D  DD DDc                   #    [        [        U5      5      nSnXA:  a8  UR                  XUS  5      I S h  vN nUS:X  a  [        S5      eXE-  nXA:  a  M8  U$  N"7f)Nr   rY   )rH   rZ   sock_recv_intor\   )r]   r^   r2   r`   
bytes_readchunk_lengths         r4   ry   ry     sk      
If%	&BJ

!00*+GG1-.."
	 

 I	 Hs   3AAAAPyPyc                   U R                   R                  nSnUR                  5       S:X  a  g [        US5      (       a  UR	                  5       S:  a  SnOcU(       a;  U[
        R                  " 5       -
  nUS::  a  Sn[        [        U[        5      S5      nO[        nU R                  R                  USUS9nU R                  R                  (       a  [        S5      eU(       a  gU(       a  [        R                   " S	5      eM  )
zABlock until at least one byte is read, or a timeout, or a cancel.FrC   NTpendingr   )rb   r#   operation cancelledr$   )r]   r0   rL   hasattrr   time	monotonicri   rj   ru   socket_checkerselectrs   rt   r   r/   r#   )r]   deadliner0   	timed_outreadable	remainingr#   s          r4   wait_for_readr   '  s    99>>DI{{}
4##(:H $t~~'77	 > $Ic)];Q?'**11$T71SH((%&;<<..--/ rB   c                v   [        U5      n[        U5      nSnU R                  R                  5       n XQ:  a   [        (       aZ  [        X5        [        R                  " 5       (       a4  Ub1  U R                  [        U[        R                  " 5       -
  S5      5        OKUb1  [        [        U[        R                  " 5       -
  S5      [        5      nO[        nU R                  U5        U R                  R                  XES  5      nUS:X  a  [+        S5      eXX-  nXQ:  a  M  U R                  U5        U$ ! [         a?    U R                   R"                  (       a  [%        S5      S e[&        R(                  " S5      S e[&        R(                   a8    U R                   R"                  (       a  [%        S5      S e[        (       a  e  GM  [*         aQ  n	U R                   R"                  (       a  [%        S5      S e[-        U	5      [.        R0                  :X  a   S n	A	GM  e S n	A	ff = f! U R                  U5        f = f)Nr   r   r$   rY   )rZ   rH   r]   r%   _PYPYr   r   get_timeoutset_conn_timeoutri   r   r   rj   ru   r[   rK   rs   rt   r   r/   r#   r\   r   errnoEINTR)
r]   r^   r   r1   r`   r   orig_timeoutshort_timeoutr   r3   s
             r4   receive_datar   H  s   
F
C	CBJ 99'')L',!5!$1((**x/C--c(T^^=M2Mq.QR+(+C4>>;K0KQ,OQ^(_(5))-8#yy222k?C& q 122&JI !L 	l+I3 & <&&00-.CD$Nnn[1t;>> &&00-.CD$N5 &&00-.CD$N(-< 	l+sI   H% CD6 H% 6BH"H% 	H"AHH% HH""H% %H8c                  x    \ rS rSrSS jr\SS j5       rSS jrSS jrSS jr	\SS j5       r
\SS j5       rS	rg
)NetworkingInterfaceBasei  c                    Xl         g r9   rv   )selfr]   s     r4   __init__ NetworkingInterfaceBase.__init__  s    	rB   c                    [         er9   NotImplementedErrorr   s    r4   r%   "NetworkingInterfaceBase.gettimeout      !!rB   c                    [         er9   r   r   r#   s     r4   r&   "NetworkingInterfaceBase.settimeout      !!rB   c                    [         er9   r   r   s    r4   closeNetworkingInterfaceBase.close  r   rB   c                    [         er9   r   r   s    r4   
is_closing"NetworkingInterfaceBase.is_closing  r   rB   c                    [         er9   r   r   s    r4   get_conn NetworkingInterfaceBase.get_conn  r   rB   c                    [         er9   r   r   s    r4   r0   NetworkingInterfaceBase.sock  r   rB   rv   N)r]   r
   )rF   r
   r#   float | NonerF   rG   rF   bool)__name__
__module____qualname____firstlineno__r   propertyr%   r&   r   r   r   r0   __static_attributes__ rB   r4   r   r     sR     " """" " " " "rB   r   c                     ^  \ rS rSrS
U 4S jjr\SS j5       rSS jrSS jrSS jr	\SS j5       r
\SS j5       rS	rU =r$ )AsyncNetworkingInterfacei  c                $   > [         TU ]  U5        g r9   superr   r   r]   	__class__s     r4   r   !AsyncNetworkingInterface.__init__      rB   c                4    U R                   S   R                  $ N   r]   r%   r   s    r4   r%   #AsyncNetworkingInterface.gettimeout  s    yy|&&&rB   c                @    U R                   S   R                  U5        g r   r]   r&   r   s     r4   r&   #AsyncNetworkingInterface.settimeout  s    		!(rB   c                   #    U R                   S   R                  5         U R                   S   R                  5       I S h  vN   g  N7fr   )r]   r   wait_closedr   s    r4   r   AsyncNetworkingInterface.close  s3     		!iil&&(((s   >A AAc                <    U R                   S   R                  5       $ )Nr   r]   r   r   s    r4   r   #AsyncNetworkingInterface.is_closing  s    yy|&&((rB   c                     U R                   S   $ r   rv   r   s    r4   r   !AsyncNetworkingInterface.get_conn  s    yy|rB   c                >    U R                   S   R                  S5      $ )Nr   r/   )r]   get_extra_infor   s    r4   r0   AsyncNetworkingInterface.sock  s    yy|**844rB   r   )r]   z!tuple[Transport, PyMongoProtocol]rF   r   r   rF   rG   r   )rF   PyMongoProtocol)rF   socket.socket)r   r   r   r   r   r   r%   r&   r   r   r   r0   r   __classcell__r   s   @r4   r   r     sS     ' ')))   5 5rB   r   c                     ^  \ rS rSrSU 4S jjrSS jrSS jrSS jrSS jr\	SS j5       r
\	SS j5       rSS	 jrSS
 jrSrU =r$ )NetworkingInterfacei  c                $   > [         TU ]  U5        g r9   r   r   s     r4   r   NetworkingInterface.__init__  r   rB   c                6    U R                   R                  5       $ r9   r   r   s    r4   r%   NetworkingInterface.gettimeout      yy##%%rB   c                :    U R                   R                  U5        g r9   r   r   s     r4   r&   NetworkingInterface.settimeout  s    		W%rB   c                8    U R                   R                  5         g r9   )r]   r   r   s    r4   r   NetworkingInterface.close  s    		rB   c                6    U R                   R                  5       $ r9   r   r   s    r4   r   NetworkingInterface.is_closing  r   rB   c                    U R                   $ r9   rv   r   s    r4   r   NetworkingInterface.get_conn      yyrB   c                    U R                   $ r9   rv   r   s    r4   r0   NetworkingInterface.sock  r   rB   c                6    U R                   R                  5       $ r9   )r]   rL   r   s    r4   rL   NetworkingInterface.fileno  s    yy!!rB   c                8    U R                   R                  U5      $ r9   )r]   r[   )r   buffers     r4   r[   NetworkingInterface.recv_into  s    yy""6**rB   r   )r]   Union[socket.socket, _sslConn]r   r   r   r   )rF   r   )rF   int)r   bytesrF   r   )r   r   r   r   r   r%   r&   r   r   r   r   r0   rL   r[   r   r   r   s   @r4   r   r     sS    &&&    "+ +rB   r   c                      \ rS rSrSSS jjrSS jr\SS j5       rSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSSS jjrSSS jjrSSS jjrSS jrSrg)r   i  Nc                   S U l         [        [        S5      5      U l        SU l        [        [        S5      5      U l        SU l        S U l        SU l        SU l	        SU l
        SU l        SU l        SU l        S U l        Xl        SU l        S U l        [$        U l        S U l        [*        R,                  " 5       R/                  5       U l        [2        R4                  " 5       U l        [2        R4                  " 5       U l        g )N   r   	   TF)	transportrH   rZ   _header_header_index_compression_header_compression_index_message_message_index_expecting_header_expecting_compression_message_size_op_code_connection_lost_read_waiter_timeout_is_compressed_compressor_idr   _max_message_size_response_tor'   r(   rM   _closedcollectionsdeque_pending_messages_done_messagesr   s     r4   r   PyMongoProtocol.__init__  s    $( ")B-0#-il#; "#.2!%&+# %.2#-1!1+///1??A<G<M<M<O9D9J9J9LrB   c                    Xl         g r9   r  r   s     r4   r&   PyMongoProtocol.settimeout  s    rB   c                    U R                   $ )zGThe configured timeout for the socket that underlies our protocol pair.r  r   s    r4   r%   PyMongoProtocol.gettimeout  s     }}rB   c                X    Xl         U R                   R                  [        [        5        g)zCalled exactly once when a connection is made.
The transport argument is the transport representing the write side of the connection.
N)r   set_write_buffer_limitsr   )r   r   s     r4   connection_madePyMongoProtocol.connection_made  s     #../?AQRrB   c                   #    U R                   R                  5       (       a  [        S5      eU R                   R                  U5        U R                   R	                  5         g7f)z/Write a message to this connection's transport.zConnection is closedN)r   r   r\   writeresume_reading)r   messages     r4   r   PyMongoProtocol.write  sF     >>$$&&011W%%%'s   A!A#c                V  #    U R                   (       a   U R                   R                  5         X l        U R
                  (       a#  U R
                  R                  5       I Sh  vN nOU R                   (       a*  U R                   R                  5       (       a  [        S5      e[        R                  " 5       R                  5       nU R                  R                  U5         UI Sh  vN nX@R
                  ;   a  U R
                  R                  U5        U(       a1  Uu  pVpxUb  X:w  a  [        SU< SU< 35      eUb  [        X5      nX4$ [        S5      e! [         a    [        S5      Sef = f GN N! X@R
                  ;   a  U R
                  R                  U5        f f = f7f)zARead a single MongoDB Wire Protocol message from this connection.zconnection is already closedNGot response id  but expected rY   )r   r!  AttributeErrorr\   r  r  popleftr   r'   r(   rM   r  appendremover   r   )	r   
request_idmax_message_sizer"  read_waiterop_codecompressor_idresponse_todatas	            r4   rb   PyMongoProtocol.read  st    >>H--/ "2 //7799G~~$..";";"="=<==!224BBDK""))+6< ++"5"55''..{;8?5GK%,'*;/
~V  (!$6= )**5 " H<=4GH : ,"5"55''..{; 6sS   F)E 4F)#E4$A>F)#E9 (E7)E9 -A-F)E11F)7E9 9-F&&F)c                j   U R                   (       a6  U R                  (       d  [        [        S5      5      U l        U R                  $ U R                  (       a  U R
                  U R                  S $ U R                  (       a  U R                  U R                  S $ U R                  U R                  S $ )a  Called to allocate a new receive buffer.
The asyncio loop calls this method expecting to receive a non-empty buffer to fill with data.
If any data does not fit into the returned buffer, this method will be called again until
either no data remains or an empty buffer is returned.
i @  N)r	  r  rH   rZ   r  r   r   r  r  r  r  )r   sizehints     r4   
get_bufferPyMongoProtocol.get_buffer'  s       == *9U+; <==  !!<< 2 2 455&&++D,C,C,EFF}}T00233rB   c                6   US:X  a  U R                  [        S5      5        gU R                  (       a  gU R                  (       az  U =R                  U-  sl        U R                  S:  aT  SU l         U R                  5       u  U l        U l        U l        U l	        [        [        U R                  5      5      U l        gU R                  (       aJ  U =R                  U-  sl        U R                  S:  a$  SU l	        U R                  5       u  U l        U l        gU =R"                  U-  sl        U R"                  U R                  :  Ga(  SU l        U R$                  R'                  5         U R(                  (       a  U R(                  R+                  5       nO#[,        R.                  " 5       R1                  5       nUR3                  5       (       a  U R                  S5        gUR5                  U R                  U R                   U R                  U R                  45        U R6                  R9                  U5        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        gg! [         a  nU R                  U5         SnAgSnAff = f)z9Called when the buffer was updated with the received datar   rY   Nr   Fr   T)r   r\   r	  r  r   process_headerr  r  r  r  r   rH   rZ   r  r  process_compression_headerr  r  r   pause_readingr  r(  r'   r(   rM   r;   r<   r  r)  )r   nbytesr3   results       r4   buffer_updatedPyMongoProtocol.buffer_updated<  s$    Q;JJw234  !!&(!!R').&	 ++-*)3
 !+9T5G5G+H I&&##v-#&&!+.3+595T5T5V2t2v%$"4"44%)D"NN((*%%//779 113AAC{{}}

4  3 3T5F5FV &&v.!"D&'D#"#D!"D DMDM"&D $D3 5 % JJsOs   2)I3 3
J=JJc                   [        U R                  5      u  pp4SnUS:X  a  US::  a  [        SU< S35      eSnUS-  nUS::  a  [        SU< S	35      eXR                  :  a  [        SU< S
U R                  < S35      eUS-
  XCU4$ )z&Unpack a MongoDB Wire Protocol header.F     Message length (zA) not longer than standard OP_COMPRESSED message header size (25)Tr   r   3) not longer than standard message header size (16)*) is larger than server max message size ())_UNPACK_HEADERr   r   r  )r   r^   _r0  r.  expecting_compressions         r4   r8  PyMongoProtocol.process_headerw  s    *8*F'; %d?|#&vj0qr  %)!aKFR<"6*,_`  ***"6* -!!%!7!7 :!= 
 {G2GGGrB   c                8    [        U R                  5      u  pnX4$ )z2Unpack a MongoDB Wire Protocol compression header.)_UNPACK_COMPRESSION_HEADERr  )r   r.  rG  r/  s       r4   r9  *PyMongoProtocol.process_compression_header  s     $>t?W?W$X!M%%rB   c                    [        U R                  5      nU HY  nUR                  5       (       d&  Uc  UR                  S 5        OUR	                  U5        U R
                  R                  U5        M[     g r9   )listr  r;   r<   set_exceptionr  r)  )r   r3   r   msgs       r4   _resolve_pending_messages)PyMongoProtocol._resolve_pending_messages  sZ    t--.C88::;NN4(%%c*&&s+ rB   c                h    U R                   R                  5         U R                  U5        SU l        g )NT)r   abortrQ  r	  r   r3   s     r4   r   PyMongoProtocol.close  s(    &&s+ $rB   c                    U R                  U5        U R                  R                  5       (       d  U R                  R                  S 5        g g r9   )rQ  r  r;   r<   rU  s     r4   connection_lostPyMongoProtocol.connection_lost  s:    &&s+||  ""LL##D) #rB   c                8   #    U R                   I S h  vN   g  N7fr9   )r  r   s    r4   r   PyMongoProtocol.wait_closed  s     lls   )r  r  r  r  r	  r  r  r  r   r   r  r  r  r  r  r  r  r
  r  r  r   r9   )r#   Optional[float]r   r   )r   r   rF   rG   )r"  r   rF   rG   )r+  Optional[int]r,  r   rF   ztuple[bytes, int])r4  r   rF   rH   )r;  r   rF   rG   )rF   ztuple[int, int, int, bool])rF   ztuple[int, int])r3   zOptional[Exception]rF   rG   r   )r   r   r   r   r   r&   r   r%   r  r   rb   r5  r=  r8  r9  rQ  r   rX  r   r   r   rB   r4   r   r     s\    M4   S( +D4*9%vH.&
,%
*
rB   r   c                   #     [         R                  " U R                  U5      U R                  S9I S h  vN   g  N! [         R                   a  n[
        R                  " S5      UeS nAff = f7f)Nr"   r$   )r'   r+   r   r%   r.   r/   r#   )r]   r1   r3   s      r4   async_sendallr_    sR     3tzz#HHH 3nn[)s23s1   A01= ;= A0= A-A((A--A0c                T  #    U R                   R                  n[        R                  " 5       (       a  [        R                  " 5       nO"U(       a  [
        R                  " 5       U-   nOSnU(       a"  [        U[
        R                  " 5       -
  S5      n[        [        U 5      5      n[        U R                   R                  R                  X5      5      nXe/n [        R                  " Xs[        R                  S9I Sh  vN u  pU	 H  n
U
R                  5         M     U	(       a  [        R                  " U	5      I Sh  vN   [!        U5      S:X  a  ["        R$                  " S5      eXh;   a$  UR'                  5       u  p [(        U   nU" U5      $ [1        S5      e N N_! [*         a(    [-        SU< S[(        R.                  " 5       < 35      Sef = f! [        R2                   a:    U H  n
U
R                  5         M     [        R                  " U5      I Sh  vN    e f = f7f)1Receive a raw BSON message or raise socket.error.Nr   )r#   return_whenr$   Got opcode r&  r   )r]   r%   r   r   get_deadliner   r   ri   r   rw   r   rb   r'   waitFIRST_COMPLETEDcancelrI   r/   r#   r<  r   KeyErrorr   keysr   CancelledError)r]   r+  r,  r#   r   cancellation_task	read_tasktasksr;   r   taskr1  r.  unpack_replys                 r4   async_receive_messagerp    s     ii""G%%'~~''1HH h!1115#$6t$<=DII..33JQRI*E%ll0G0G
 
 DKKM ,,w'''t9>..--%,,.MD,W5
  %%!"788%
 (  #!'N=;M;M;O:RS !! DKKM ll5!!!	sh   CH(&G  F?G  F A G 	F" G H(G  G "2GG AH%H H%%H(c                   [         R                  " 5       (       a  [         R                  " 5       nO<U R                  R	                  5       nU(       a  [
        R                  " 5       U-   nOSn[        [        U SU5      5      u  pVpxUb  X:w  a  [        SU< SU< 35      eUS::  a  [        SU< S35      eXR:  a  [        SU< SU< S35      eUS	:X  a3  [        [        U S
U5      5      u  pn	[        [        XS-
  U5      U	5      n
O[        XS-
  U5      n
 [        U   nU" U
5      $ ! [         a(    [        SU< S[        R                  " 5       < 35      Sef = f)ra  Nr   r%  r&  rB  rC  rD  rE  r@  r   rA  rc  )r   r   rd  r]   r%   r   r   rF  r   r   rK  r   r   rh  ri  )r]   r+  r,  r   r#   r^   rG  r0  r.  r/  r1  ro  s               r4   receive_messagerr    sz    %%'))&&(~~''1HH&4\$H5U&V#F{$"2;/PZ~ ^__|vj([\
 	
  vj )-03
 	
 $$>|DRSU]?^$_!M,tb[(C]SD2+x8$W-
 	  'N=3E3E3G2JK
	s   	D* *2E)r0   r   r1   r   rF   rG   )r0   r   r1   r   r2   r   rF   rG   )F)
r]   r   r^   r   r2   r   r_   Optional[bool]rF   rH   )r0   r   r1   r   rk   r   rF   rG   )
r]   r   r^   r   rk   r   r_   rs  rF   rH   )r]   r   rF   rG   )r0   r   r^   r   rF   rH   )r]   r   r^   r   r2   r   rF   rH   )r]   r   r   r\  rF   rG   )r]   r   r^   r   r   r\  rF   rH   )r]   r   r1   r   rF   rG   )r]   r   r+  r]  r,  r   rF   Union[_OpReply, _OpMsg])r]   r   r+  r]  r,  r   rF   rt  )P__doc__
__future__r   r'   r  r   r/   structsysr   r   r   r   r   r   typingr	   r
   r   r   pymongor   r   pymongo._asyncio_taskr   pymongo.commonr   pymongo.compression_supportr   pymongo.errorsr   r   pymongo.messager   r   r   pymongo.socket_checkerr   sslr   r   r)   ImportErrorpymongo.pyopenssl_contextr   r   r   r   rR   pymongo.ssl_supportpymongo.asynchronous.poolr   pymongo.synchronous.poolr   StructunpackrF  rK  ru   BlockingIOErrorrK   r5   platformr,   rc   rq   rw   r|   ry   versionr   r   r   r   r   r   r   r_  rp  rr  r   rB   r4   <module>r     s   - "      
  Y Y  ' - + 2 = ; ; 8'I  O 93w'..#]]6299 %'?a+B`B`a 
!  <<7)/,)/38)/@Q)/	)/X V[00 #0+<0DR0	0l,38AR	, W\ #,=ES	6+&
(&25&&2


!$
,=

 	#++.B5p" "456 56+1 +>T& Tn3 -0
00 0 	0h JZ'
'"/'CF''s  I  OH s$   2
G =G GGG,+G,