
    Ii)                    0
   % S r SSKJr  SSKrSSKrSSKrSSKJr  SSK	J
r
JrJrJrJrJrJrJrJr  SSKrSSKJrJrJr  SSKJr  SSKJrJrJrJr  SS	KJr  SS
K J!r!   SSK"J#r#  Sr$SSK&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.  SSK/J0r0J1r1  \
(       a  SSK2J3r3J4r4J5r5  SSK6J7r7  SSK8J9r9J:r:J;r;J<r<J=r=  Sr>Sr?Sr@SrASrBSrCSrDSrESrFSrGSrHSrISrJ\AS\BS \CS!0rKS"S#S$S%S&.rL\" S'S(9rMS)\NS*'   SS+ jrO      SS, jrPSS- jrQSS. jrR        SS/ jrSSS0S1S2S3S4.rTS5S6S7S8S9S:S;S<S=S>S>S?S@.rU   S                       SSA jjrV              SSB jrW\R                  " SC5      R                  rZSDr[        SSE jr\\R                  " SF5      R                  r]SSG jr^\R                  " SH5      R                  r_\R                  " SI5      R                  r`\R                  " SJ5      R                  ra            SSK jrb              SSL jrc            SSM jrd\$(       a  \#R                  rd S             SSN jjre                SSO jrf                  SSP jrg                SSQ jrh\$(       a  \#R                  rh S                 SSR jjrj\R                  " SS5      R                  rkSST jrl          SSU jrm        SSV jrn\$(       a  \#R                  rn S         SSW jjrp\ASX\BSY\CSZ0rq " S[ S\5      rr " S] S^\r5      rs " S_ S`\s5      rtSSa jruSbrv                SSc jrw              SSd jrx\$(       a  \#R                  rx              SSe jry              SSf jrz\$(       a  \#R                  rz              SSg jr{ " Sh Si\r5      r|Sjr}            SSk jr~                SSl jr              SSm jr              SSn jr              SSo jr            SSp jr              SSq jr\$(       a  \#GR                  r                SSr jr " Ss St5      r " Su Sv5      r\GR                  \GR                  \GR                  \GR                  0rSw\NSx'    " Sy Sz5      r " S{ S|5      r " S} S~\5      r " S S\5      r " S S\5      rg! \% a    Sr$ GNf = f)zTools for creating `messages
<https://www.mongodb.com/docs/manual/reference/mongodb-wire-protocol/>`_ to be sent to
MongoDB.

.. note:: This module is for internal use and is generally not needed by
   application developers.
    )annotationsN)BytesIO)	TYPE_CHECKINGAnyCallableIterableMappingMutableMappingNoReturnOptionalUnion)CodecOptions_dict_to_bson_make_c_string)Int64)_RAW_ARRAY_BSON_OPTIONSDEFAULT_RAW_BSON_OPTIONSRawBSONDocument_inflate_bson)HelloCompat)_EventListeners)	_cmessageTF)ConfigurationErrorCursorNotFoundDocumentTooLargeExecutionTimeoutInvalidOperationNotPrimaryErrorOperationFailureProtocolError)ReadPreference_ServerMode)SnappyContextZlibContextZstdContext)ReadConcern)_Address_AgnosticClientSession_AgnosticConnection_AgnosticMongoClient_DocumentOutii   i?                   s            s           s       s   documents     s   updates     s   deletes     	documentsupdatesdeletes	bulkWrite)insertupdatedeleter5   replace)unicode_decode_error_handlerzCodecOptions[Mapping[str, Any]]_UNICODE_REPLACE_CODEC_OPTIONSc                 @    [         R                  " [        [        5      $ )z(Generate a pseudo random 32 bit integer.)randomrandint	MIN_INT32	MAX_INT32 r.   5/venv/lib/python3.13/site-packages/pymongo/message.py_randintrC   t   s    >>)Y//r.   c                    UR                   nUR                  nU(       a;  U[        R                  R                   :w  d  [	        U5      S:  a  SU ;  a  SU 0n X0S'   U $ )z-Add $readPreference to spec when appropriate.r,   $query$readPreference)modedocumentr!   SECONDARY_PREFERREDlen)specread_preferencerG   rH   s       rB   _maybe_add_read_preferencerM   y   s^     D''H ;;@@@CMTUDU4d#D"*Kr.   c                F    [        U 5      U R                  R                  S.$ )z<Convert an Exception into a failure document for publishing.)errmsgerrtype)str	__class____name__	exceptions    rB   _convert_exceptionrV      s    )n1D1D1M1MNNr.   c                \    [        U 5      U R                  U R                  R                  S.$ )zeConvert an Exception into a failure document for publishing,
for use in client-level bulk write API.
)rO   coderP   )rQ   rX   rR   rS   rT   s    rB   _convert_client_bulk_exceptionrY      s+    
 i.&&// r.   c                ,   UR                  SS5      nSUS.nUR                  SUR                  SS5      5      nU(       aN  UR                  S5      (       a  US	SS
0S.US'   O,SUR                  SS5      US.nSU;   a  US   US'   U/US'   U$ U S:X  a  [        US   5      US'   U$ U S:X  af  SU;   a  SUS   S./US'   U$ UR                  S5      SL a>  US:X  a8  US   S   nUS   R                  SUS   R                  S5      5      nSUS./US'   U$ )z6Convert a legacy write result to write command format.nr   r,   )okr[   rO   err wtimeout@   T)rO   rX   errInfowriteConcernErrorrX      )indexrX   rO   ra   writeErrorsr6   r2   r7   upserted)rd   _idupdatedExistingFr3   urg   q)getrJ   )		operationcommandresultaffectedresrO   errorr7   rg   s	            rB   _convert_write_resultrr      sX   
 zz#q!H
"CZZ&**UB"78F::j!!28"R\^bQc'dC#$  FA)>&QEF"#))#4i "'CJHw{+,C J 
h	)*6*3EFGC
O J ZZ)*e3A Y'*F+//%)?@C)*378C
OJr.   rc             )tailableoplogReplaynoCursorTimeout	awaitDataallowPartialResultsfiltersorthintcommentmaxScan	maxTimeMSmaxmin	returnKeyshowRecordIdsnapshot)rE   z$orderbyz$hintz$commentz$maxScanz
$maxTimeMSz$maxz$minz
$returnKeyz$showRecordIdz$showDiskLocz	$snapshotc                   SU 0nSU;   ay  UR                  UR                  5        VVs/ s H  u  pU[        ;   a  [        U   U4OX4PM     snn5        SU;   a  UR                  S5        SU;   a  UR                  S5        OXS'   U(       a  X+S'   U(       a  X;S'   U(       a  [	        U5      US'   US	:  a  S
US'   U(       a  X[S'   UR
                  (       a'  U	(       a  U	R                  (       d  UR                  US'   U(       a  XS'   U
b  XS'   U(       aE  UR                  [        R                  5        VVs/ s H  u  pXm-  (       d  M  US
4PM     snn5        U$ s  snnf s  snnf )z!Generate a find command document.findrE   $explainrF   r{   
projectionskiplimitr   TsingleBatch	batchSizereadConcern	collationallowDiskUse)	r7   items
_MODIFIERSpopabslevelin_transactionrH   _OPTIONS)collrK   r   r   r   
batch_sizeoptionsread_concernr   sessionallow_disk_usecmdkeyvalopts                  rB   _gen_find_commandr      sP    "4.C4

 !%

 ,HC +.*;C#&#K ,	
 GGJ#GG%&H&LF5zG19!%C%K7w/E/E)22M$K!,N

0@R0@HCGMKS$K0@RSJ?: Ss   $E!
<E'
E'
c                `    XS.nU(       a  X&S'   Ub  X6S'   Ub  UR                   S:  a  XFS'   U$ )z$Generate a getMore command document.)getMore
collectionr   r   	   r~   )max_wire_version)	cursor_idr   r   max_await_time_msr~   connr   s          rB   _gen_get_more_commandr     sD     '0DC%K$,Kt449 IJr.   z<iiiiiiB   c           
         UR                  U5      n[        5       n[        [        [	        U5      -   USSU [	        U5      UR
                  5      nXEU-   4$ )zDTakes message data, compresses it, and adds an OP_COMPRESSED header.r   i  )compressrC   _pack_compression_header_COMPRESSION_HEADER_SIZErJ   compressor_id)rl   datactx
compressed
request_idheaders         rB   	_compressr   "  s[     d#JJ% 3z?2	D	F 
***r.   z<iiiic                V    [        5       n[        S[        U5      -   USU 5      nX#U-   4$ )zlTakes message data and adds a message header based on the operation.

Returns the resultant message string.
rs   r   )rC   _pack_headerrJ   )rl   r   ridmessages       rB   __pack_messager   8  s0    
 *C2D	>39=G$r.   z<iz<IBz<Bc                   [        USU5      n[        U S5      n[        U5      nSnU(       a  Ub}  [        S5      n	[	        U5      n
U Vs/ s H  n[        USU5      PM     nn[        U
5      [        S U 5       5      -   S-   n[        U5      nX}-  n[        S U 5       5      nXeXU
/UQnOXe/nSR                  U5      Xx4$ s  snf )zGet a OP_MSG message.

Note: this method handles multiple documents in a type one payload but
it does not perform batch splitting and the total message size is
only checked *after* generating the entire message.
Fr   r,   c              3  8   #    U  H  n[        U5      v   M     g 7fNrJ   .0docs     rB   	<genexpr>$_op_msg_no_header.<locals>.<genexpr>]  s     !Cls#c((l      c              3  8   #    U  H  n[        U5      v   M     g 7fr   r   r   s     rB   r   r   `  s     <|3s88|r   r.   )	r   _pack_op_msg_flags_typerJ   
_pack_byter   sum	_pack_intr   join)flagsrm   
identifierdocsoptsencoded
flags_type
total_sizemax_doc_sizetype_onecstringr   encoded_docssizeencoded_sizer   s                   rB   _op_msg_no_headerr   G  s     GUD1G(2JWJLd&a= ,CGH4Cc5$74H7|c!Cl!CCCaG 
<|<<XWT|T$88D>:33 Is   Cc                F    [        XX#U5      u  pgn[        SXe5      u  pXXx4$ )zInternal OP_MSG message helper.  )r   r   )
r   rm   r   r   r   r   msgr   max_bson_sizer   s
             rB   _op_msg_compressedr   g  s1     &7uzY]%^"C]s(HCZ..r.   c                F    [        XX#U5      u  pVn[        SU5      u  pXXg4$ )z*Internal compressed OP_MSG message helper.r   )r   r   )
r   rm   r   r   r   r   r   r   r   
op_messages
             rB   _op_msg_uncompressedr   u  s2     '8
Z^&_#Dm+D$7J:<<r.   c                x   X!S'   Ub&  SU;  a   UR                   (       a  UR                  US'   [        [        U5      5      n [        U   nUR                  U5      n U(       a  [        XXxXE5      U(       a  XU'   $ $ [        XXxU5      U(       a  XU'   $ $ ! [         a    SnSn NJf = f! U(       a  XU'   f f = f)zGet a OP_MSG message.$dbNrF   r^   )	rG   rH   nextiter
_FIELD_MAPr   KeyErrorr   r   )	r   rm   dbnamerL   r   r   namer   r   s	            rB   _op_msgr     s     EN"'8'G)8)A)AG%&WD%
{{:&'%ejR "&J  $EJdK "&J   
 "&J s$   B B+ >B+ B('B(+B9c                   [        USU5      nU(       a  [        USU5      nOSn[        [        U5      [        U5      5      n	SR                  [	        U 5      [
        R                  " U5      [	        U5      [	        U5      UU/5      U	4$ )zGet an OP_QUERY message.Fr.   )r   r   rJ   r   r   bsonr   )
r   collection_namenum_to_skipnum_to_returnqueryfield_selectorr   r   efsr   s
             rB   _query_implr     s     E5$/GNE48Gc#h/M'"##O4+&-(		
 	 r.   c           	     F    [        XX#XEU5      u  p[        SX5      u  pXU	4$ )z)Internal compressed query message helper.  )r   r   )r   r   r   r   r   r   r   r   op_queryr   r   r   s               rB   _query_compressedr     s6     *+eUYH x-HC]""r.   c           	     F    [        XX#XEU5      u  px[        SU5      u  pXU4$ )zInternal query message helper.r   )r   r   )r   r   r   r   r   r   r   r   r   r   r   s              rB   _query_uncompressedr     s6     *+eUYH dH-HC]""r.   c           
     H    U(       a  [        XX#XEXg5      $ [        XX#XEU5      $ )zGet a **query** message.)r   r   )r   r   r   r   r   r   r   r   s           rB   _queryr     s7      k%Y]
 	
 +eUY r.   z<qc                    SR                  [        [        R                  " U 5      [	        U5      [        U5      /5      $ )zGet an OP_GET_MORE message.r.   )r   _ZERO_32r   r   r   _pack_long_longr   r   r   s      rB   _get_more_implr    s9    880m$I&		
 r.   c                0    [        S[        XU5      U5      $ )z+Internal compressed getMore message helper.  )r   r  r   r   r   r   s       rB   _get_more_compressedr    s     T>/)TVYZZr.   c                .    [        S[        XU5      5      $ )z Internal getMore message helper.r  )r   r  r  s      rB   _get_more_uncompressedr    s     $y YZZr.   c                @    U(       a  [        XX#5      $ [        XU5      $ )zGet a **getMore** message.)r  r  r  s       rB   	_get_morer
  $  s!     #OISS!/)LLr.   s
   documents s   updates s   deletes c                      \ rS rSrSrSr                SS jr\SS j5       r\SS j5       r	\SS j5       r
\SS j5       rSS	 jrSS
 jrSrg)_BulkWriteContextBasei:  z]Private base class for wrapping around AsyncConnection to use with write splitting functions.)db_namer   op_idr   fieldpublish
start_time	listenersr   r   op_typecodecc	                0   Xl         X0l        X@l        XPl        UR                  U l        X l        [        U R                     U l        [        R                  R                  5       U l        X`l        [        UR                  5      U l        Xpl        Xl        g r   )r  r   r  r  enabled_for_commandsr  r   r   r  datetimenowr  r   boolcompression_contextr   r  r  )	selfdatabase_namecmd_namer   operation_idr  r   r  r  s	            rB   __init___BulkWriteContextBase.__init__L  sq     %	!
" 55			*
"++//1T556
r.   c                .    U R                   R                  $ )z#A proxy for SockInfo.max_bson_size.)r   r   r  s    rB   r   #_BulkWriteContextBase.max_bson_sized  s     yy&&&r.   c                    U R                   (       a  U R                  R                  S-
  $ U R                  R                  $ )z&A proxy for SockInfo.max_message_size.rs   )r   r   max_message_sizer"  s    rB   r%  &_BulkWriteContextBase.max_message_sizei  s0     ==99--22yy)))r.   c                .    U R                   R                  $ )z*A proxy for SockInfo.max_write_batch_size.)r   max_write_batch_sizer"  s    rB   r(  *_BulkWriteContextBase.max_write_batch_sizeq  s     yy---r.   c                    U R                   $ )z:The maximum size of a BSON command before batch splitting.)r   r"  s    rB   max_split_size$_BulkWriteContextBase.max_split_sizev  s     !!!r.   c                    U R                   R                  UUU R                  UU R                  R                  U R                  R
                  U R                  U R                  R                  U R                  S9	  g)z Publish a CommandSucceededEvent.r  N)	r  publish_command_successr   r   addressserver_connection_idr  
service_idr  )r  r   replydurations       rB   _succeed_BulkWriteContextBase._succeed{  s^    ..IIIIII**JJII  ,, 	/ 
	
r.   c                    U R                   R                  UUU R                  UU R                  R                  U R                  R
                  U R                  U R                  R                  U R                  S9	  g)zPublish a CommandFailedEvent.r.  N)	r  publish_command_failurer   r   r0  r1  r  r2  r  )r  r   failurer4  s       rB   _fail_BulkWriteContextBase._fail  s^    ..IIIIII**JJII  ,, 	/ 
	
r.   )r  r   r   r  r  r  r   r  r  r  r   r  Nr  rQ   r  rQ   r   r)   r  intr  r   r    Optional[_AgnosticClientSession]r  r=  r  r   returnr=  )r   r=  r3  r+   r4  datetime.timedeltar@  None)r   r=  r9  r+   r4  rA  r@  rB  )rS   
__module____qualname____firstlineno____doc__	__slots__r  propertyr   r%  r(  r+  r5  r:  __static_attributes__rA   r.   rB   r  r  :  s    gI  "	
  # 2  0 ' ' * * . . " "

r.   r  c                     ^  \ rS rSrSrSr                SU 4S jjr      SS jr        S	S jrSr	U =r
$ )
_BulkWriteContexti  z]A wrapper around AsyncConnection/Connection for use with the collection-level bulk write API.rA   c	           
     2   > [         T	U ]  UUUUUUUU5        g r   superr  )
r  r  r  r   r  r  r   r  r  rR   s
            rB   r  _BulkWriteContext.__init__  s*     			
r.   c                    U R                   S-   n[        X0R                  XU R                  U 5      u  pEnU(       d  [	        S5      eXEU4$ )N.$cmdcannot do an empty bulk write)r  _do_batched_op_msgr  r  r   )r  r   r   	namespacer   r   to_sends          rB   batch_command_BulkWriteContext.batch_command  sN     LL7*	#5||S

D$
 
 "#BCC''r.   c           	        X1U R                   '   U R                  R                  UU R                  UU R                  R
                  U R                  R                  U R                  U R                  R                  5        U$ )Publish a CommandStartedEvent.)	r  r  publish_command_startr  r   r0  r1  r  r2  )r  r   r   r   s       rB   _start_BulkWriteContext._start  sc     DJJ,,LLIIII**JJII  	
 
r.   r<  )r   MutableMapping[str, Any]r   list[Mapping[str, Any]]r@  zAtuple[int, Union[bytes, dict[str, Any]], list[Mapping[str, Any]]])r   r]  r   r=  r   r^  r@  r]  rS   rC  rD  rE  rF  rG  r  rV  r[  rI  __classcell__rR   s   @rB   rK  rK    s    gI

 
 "	

 
 #
 2
 
 
,	(+	(3J	(	J	(+9<D[	! r.   rK  c                  B    \ rS rSrSr      SS jr\SS j5       rSrg)_EncryptedBulkWriteContexti  rA   c                    U R                   S-   n[        X0R                  XU R                  U 5      u  pEU(       d  [	        S5      eUR                  SS5      S-   n[        [        U5      US  [        5      nSXu4$ )NrQ  rR  r0   r   r   )	r  _encode_batched_write_commandr  r  r   rd   r   
memoryviewr   )r  r   r   rT  r   rU  	cmd_startoutgoings           rB   rV  (_EncryptedBulkWriteContext.batch_command  sz     LL7*	4||S

D
 "#BCC IIgq)A-	 C!<>VW8$$r.   c                    [         $ )z Reduce the batch splitting size.)_MAX_SPLIT_SIZE_ENCr"  s    rB   r+  )_EncryptedBulkWriteContext.max_split_size  s
     #"r.   N)r   r]  r   r^  r@  z3tuple[int, dict[str, Any], list[Mapping[str, Any]]]r?  )	rS   rC  rD  rE  rG  rV  rH  r+  rI  rA   r.   rB   rc  rc    s8    I%+%3J%	<% # #r.   rc  c                J    U S:X  a  [        SX4-  5      e[        U < S35      e)z-Internal helper for raising DocumentTooLarge.r6   zfBSON document too large (%d bytes) - the connected server supports BSON document sizes up to %d bytes.z command document too large)r   )rl   doc_sizemax_sizes      rB   _raise_document_too_largerq    s>    H ",-
 	
 ).IJKKr.   i    c                   UR                   nUR                  nUR                  n	U(       a  SOSn
UR                  U
5        UR                  S5        UR                  [	        USU5      5        UR                  S5        UR                  5       nUR                  S5         UR                  [        U    5        / nSnU H  n[	        USU5      n[        U5      nUR                  5       U-   nUS:H  =(       a    UU	:  nU(       + =(       a    UU:  nU(       d  U(       a6  [        [        R                  5       5      U    n[        U[        U5      U5        UU	:  a    O2UR                  U5        UR                  U5        US	-  nX:X  d  M    O   UR                  5       nUR                  U5        UR                  [!        UU-
  5      5        UU4$ ! [         a    [        S5      Sef = f)
zCreate a batched OP_MSG write.r1         r0   F   Unknown commandNr   r,   )r   r(  r%  writer   tell_OP_MSG_MAPr   r   rJ   listr   keysrq  appendseekr   )rl   rm   r   ackr   r   bufr   r(  r%  r   size_locationrU  idxr   value
doc_lengthnew_message_sizedoc_too_largeunacked_doc_too_largewrite_oplengths                         rB   _batched_op_msg_implr    s    %%M33++#&,?EIIe IIgIImGUD12 IIgHHJMII!"<		+i() G
Cc5$/Z
88:
2qJ&69I&I %( HZ--G1JOO-.y9H%hE
MJ..		%sq&1 6 XXZFHH]IIi./0F?I  <01t;<s   !G G(c           	     Z    [        5       n[        XX#XEU5      u  pxUR                  5       U4$ )zGEncode the next batched insert, update, or delete operation
as OP_MSG.
)_BytesIOr  getvalue)	rl   rm   r   r}  r   r   r~  rU  _s	            rB   _encode_batched_op_msgr  A  s/     *C%i$TPSTJG<<>7""r.   c                    [        XX#XE5      u  pgUR                  R                  c   e[        SXeR                  R                  5      u  pXU4$ )zUCreate the next batched insert, update, or delete operation
with OP_MSG, compressed.
r   )r  r   r  r   )
rl   rm   r   r}  r   r   r   rU  r   r   s
             rB   _batched_op_msg_compressedr  V  sM     +9t$TMD88''333dHH,H,HIOJG##r.   c           	     f   [        5       nUR                  [        5        UR                  S5        [        XX#XEU5      u  pxUR	                  S5        [        5       n	UR                  [        U	5      5        UR	                  S5        UR                  [        U5      5        XR                  5       U4$ )z"OP_MSG implementation entry point.         r   r   )r  rv  _ZERO_64r  r|  rC   r   r  )
rl   rm   r   r}  r   r   r~  rU  r  r   s
             rB   _batched_op_msgr  h  s     *C IIhII12*9t$UXYOG HHQKJIIi
#$HHQKIIi ||~w..r.   c                    U R                  SS5      S   US'   SU;   a  [        US   R                  SS5      5      nOSnUR                  R                  (       a  [        XX6XE5      $ [        XX6XE5      $ )zJCreate the next batched insert, update, or delete operation
using OP_MSG.
.r,   r   r   writeConcernwT)splitr  rk   r   r  r  r  )rT  rl   rm   r   r   r   r}  s          rB   rS  rS    sq     __S!,Q/GEN 7>*..sA67
xx##))dSS9t$DDr.   c                     ^  \ rS rSrSrSr              SU 4S jjr        SS jr          S	S jrSr	U =r
$ )
_ClientBulkWriteContexti  zYA wrapper around AsyncConnection/Connection for use with the client-level bulk write API.rA   c           
     2   > [         TU ]  UUUUUUSU5        g )Nr   rM  )	r  r  r  r   r  r  r   r  rR   s	           rB   r   _ClientBulkWriteContext.__init__  s*     			
r.   c                b    [        XX0R                  U 5      u  pEpgU(       d  [        S5      eXEXg4$ )NrR  )_client_do_batched_op_msgr  r   )r  r   
operations
namespacesr   r   to_send_ops
to_send_nss           rB   rV  %_ClientBulkWriteContext.batch_command  s;     4MZT4
0
 "#BCC77r.   c           	         X1S'   XAS'   U R                   R                  UU R                  UU R                  R                  U R                  R
                  U R                  U R                  R                  5        U$ )rY  opsnsInfo)r  rZ  r  r   r0  r1  r  r2  )r  r   r   op_docsns_docss        rB   r[  _ClientBulkWriteContext._start  sf     E
H,,LLIIII**JJII  	
 
r.   )r  rQ   r  rQ   r   r)   r  r=  r  r   r   r>  r  r   )r   r]  r  #list[tuple[str, Mapping[str, Any]]]r  	list[str]r@  zZtuple[int, Union[bytes, dict[str, Any]], list[Mapping[str, Any]], list[Mapping[str, Any]]])
r   r]  r   r=  r  r^  r  r^  r@  r]  r_  ra  s   @rB   r  r    s    cI

 
 "	

 
 #
 2
 
*8%8 88 	8
 
d8%  )	
 ) 
" r.   r  i  c                ,   U(       a  SOSnUR                  U5        UR                  S5        UR                  U 5        UR                  S5        UR                  5       nUR                  S5        UR                  S5        U H  nUR                  U5        M     UR                  5       nUR                  5       n	UR                  U5        UR                  [        X-
  5      5        UR                  U5        UR                  S5        UR                  5       nUR                  S5        UR                  S5        U H  n
UR                  U
5        M     UR                  5       n	UR                  U5        UR                  [        X-
  5      5        U	$ )Nr1   rs  r0   rt  s   ops s   nsInfo )rv  rw  r|  r   )command_encodedto_send_ops_encodedto_send_ns_encodedr}  r~  r   r  
op_encodedresume_locationr  
ns_encodeds              rB   _client_construct_op_msgr    s9    $',?EIIe IIgIIo IIgHHJMII!"IIj)
		* *hhjOXXZFHH]IIi./0HH_ IIgHHJMII!"IIm(
		* ) XXZFHH]IIi./0Mr.   c                r           SS jnUR                   nUR                  n	UR                  n
[        U SU5      nU(       d  U" S[	        U5      U[
        -   5        / SQnU R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U Vs0 s H  oX   _M	     nn[	        [        USU5      5      nU
[        U-   -
  n0 n/ n/ n/ n/ nSnSnSn[        X5       GHr  u  u  nnnUnUS	:X  a*  U(       d#  [	        [        US
   SU5      5      nU" UUU5        US:X  a,  SnU(       d#  [	        [        US   SU5      5      nU" UUU5        SnSnUU;  a  SU0n[	        U5      n U UU'   UU   UU'   [        USU5      n![	        U!5      n"U(       a  [        USU5      n#[	        U#5      nU(       d  U" UU"U[
        -   5        UU-   U"-   U-   n$U$U:  a  US:X  a  [        UU"U[
        -   5          OgUR                  U5        UR                  U!5        UU"-  nU(       a'  UR                  U5        UR                  W#5        UU-  nUS-  nUU	:X  d  GMs    O   [        UUUX65      n%UUU%4$ s  snf )z:Create a batched OP_MSG write for client-level bulk write.c                (    X:  a  [        XU5        g g r   )rq  )r  ro  r   s      rB   _check_doc_size_limits;_client_batched_op_msg_impl.<locals>._check_doc_size_limits  s    
 %g? r.   Fr5   )r5   
errorsOnlyorderedbypassDocumentValidationr~   letr   r6   rH   r9   r7   
updateModsNnsr,   )r  rQ   ro  r=  r   r=  r@  rB  )r   r(  r%  r   rJ   _COMMAND_OVERHEADrk   r{  _OP_MSG_OVERHEADziprq  r  )&rm   r  r  r}  r   r   r~  r  r   r(  r%  r  abridged_keysr   command_abridgedcommand_len_abridgedmax_doc_sequences_bytesns_infor  r  r  r  total_ops_lengthtotal_ns_lengthr  real_op_typeop_docrT  r  ro  ns_doc	ns_lengthnew_ns_indexop_doc_encoded	op_lengthns_doc_encodedr  r  s&                                         rB   _client_batched_op_msg_implr    s,   @@@ @ 
	@ %%M33++#GUD9O {C,@-RcBcd ;M{{-..78{{9Y'{{5U#5BC]cW\)]C}-=udKL /2BEY2YZG+-K*,J')&(O
C-0-H)v	8#}VJ-?MN&|X}M9$G}VL-A5$OP&|X}M	G#I&Fz?L!-GI "),w 'vud;'	*65$?NN+I "7I}GX7XY+o=	IIU55ax)'9mN_>_` 	6""">2I%f%%%n5y(Oq &&q .Iv &,.@#F 
F**] Ds   J4c           	     \    [        5       n[        XX#XEU5      u  pxn	UR                  5       Xx4$ )zDEncode the next batched client-level bulkWrite
operation as OP_MSG.
)r  r  r  )
rm   r  r  r}  r   r   r~  r  r  r  s
             rB   _client_encode_batched_op_msgr    s6     *C!<Zd"KQ <<>;22r.   c                    [        XX#XE5      u  pgnUR                  R                  c   e[        SXeR                  R                  5      u  pXXx4$ )zRCreate the next batched client-level bulkWrite operation
with OP_MSG, compressed.
r   )r  r   r  r   )rm   r  r  r}  r   r   r   r  r  r   r   s              rB   !_client_batched_op_msg_compressedr    sV     %BZd%!Dz 88''333dHH,H,HIOJK33r.   c           	     h   [        5       nUR                  [        5        UR                  S5        [        XX#XEU5      u  pxn	UR	                  S5        [        5       n
UR                  [        U
5      5        UR	                  S5        UR                  [        U	5      5        XR                  5       Xx4$ )z=OP_MSG implementation entry point for client-level bulkWrite.r  r   r   )r  rv  r  r  r|  rC   r   r  )rm   r  r  r}  r   r   r~  r  r  r  r   s              rB   _client_batched_op_msgr    s     *C IIhII12&AZd'#KV
 HHQKJIIi
#$HHQKIIi ||~{>>r.   c                    SU S'   SU ;   a  [        U S   R                  SS5      5      nOSnUR                  R                  (       a  [	        XX%X45      $ [        XX%X45      $ )zGCreate the next batched client-level bulkWrite
operation using OP_MSG.
adminr   r  r  r,   T)r  rk   r   r  r  r  )rm   r  r  r   r   r}  s         rB   r  r    sb     GEN 7>*..sA67
xx##0jW[aa!'zRRr.   c           	     Z    [        5       n[        XX#XEU5      u  pxUR                  5       U4$ )z:Encode the next batched insert, update, or delete command.)r  _batched_write_command_implr  )	rT  rl   rm   r   r   r   r~  rU  r  s	            rB   rf  rf    s0     *C,Y7RV]`aJG<<>7""r.   c                   UR                   nUR                  nU[        -   n	UR                  n
UR	                  [
        5        UR	                  U R                  S5      5        UR	                  [        5        UR	                  [        5        UR                  5       nUR	                  [        R                  " U5      5        UR                  SS5        UR                  5          UR	                  [        U   5        UR                  5       S-
  n/ nSnU GH#  n[!        U5      R                  S5      n[#        USU5      n[%        U5      U	:  nU(       a6  ['        [(        R+                  5       5      U   n[-        U[%        U5      U5        US	:  =(       a+    UR                  5       [%        U5      -   [%        U5      -   U
:  nX:  nU(       d  U(       a    OgUR	                  [.        5        UR	                  U5        UR	                  [        5        UR	                  U5        UR1                  U5        US	-  nGM&     UR	                  [2        5        UR                  5       nUR                  U5        UR	                  [5        UU-
  S	-
  5      5        UR                  U5        UR	                  [5        UU-
  5      5        UU4$ ! [         a    [        S5      Sef = f)
z(Create a batched OP_QUERY write command.utf8re  r-   ru  Nr   r   Fr,   )r   r(  r  r+  rv  r   encode_ZERO_8_SKIPLIMrw  r   r|  truncate_OP_MAPr   r   rQ   r   rJ   ry  r   rz  rq  _BSONOBJr{  _ZERO_16r   )rT  rl   rm   r   r   r   r~  r   r(  max_cmd_sizer+  command_start
list_startrU  r  r   r   r  r  r  enough_dataenough_documentsr  s                          rB   r  r    sM    %%M33 !#44L''N IIhIIiv&'IIgIIh HHJMIIdkk'"# HHROLLN<		')$%
 aJG
C#hoof%c5$/ E
\1JOO-.y9H%hE
MJQhYCHHJS$9CJ$F>#Y6*		(		#		'		%sq' . IIh XXZFHHZIIi+a/01HH]IIi./0F?O  <01t;<s   %K Kc                      \ rS rSrSrSr\R                  " S5      R                  r	Sr
SS jr S     SS jjrS\SS	4         SS
 jjrSS jrSS jr\SS j5       r\SS j5       rSrg)_OpReplyi?  z$A MongoDB OP_REPLY response message.)r   r   number_returnedr2   z<iqiir,   c                H    Xl         [        U5      U l        X0l        X@l        g r   )r   r   r   r  r2   )r  r   r   r  r2   s        rB   r  _OpReply.__init__G  s    
y)."r.   Nc                   U R                   S-  (       a'  Uc  [        S5      eSU4-  nSUSS.n[        USU5      eU R                   S-  (       a  [        R                  " U R
                  5      R                  5       nUR                  SS5        US	   R                  [        R                  5      (       a  [        US	   U5      eUR                  S
5      S:X  a.  Sn[        UR                  S	U5      UR                  S
5      U5      e[        SUR                  S	5      -  UR                  S
5      U5      eU R
                  (       a  U R
                  /$ / $ )ad  Check the response header from the database, without decoding BSON.

Check the response for errors and unpack.

Can raise CursorNotFound, NotPrimaryError, ExecutionTimeout, or
OperationFailure.

:param cursor_id: cursor_id we sent to get this response -
    used for raising an informative exception when we get cursor id not
    valid at server response.
r,   z"No cursor id for getMore operationzCursor not found, cursor id: %dr   +   )r\   rO   rX   r-   r\   z$errrX   2   zoperation exceeded time limitzdatabase error: %s)r   r    r   r   BSONr2   decode
setdefault
startswithr   LEGACY_ERRORr   rk   r   r   )r  r   user_fieldsr   errobjerror_objectdefault_msgs          rB   raw_response_OpReply.raw_responseM  sA    ::> #$HII 4ylBCb9F b&11ZZ!^!%4>>!:!A!A!CL##D!,F#..{/G/GHH%l6&:LII!!&)R/=& $$V[9<;K;KF;SUa  #$|'7'7'??  ( 
 >>NN##	r.   Fc                    U R                  U5        U(       a!  [        R                  " U R                  U5      $ [        R                  " U R                  X#5      $ )a  Unpack a response from the database and decode the BSON document(s).

Check the response for errors and unpack, returning a dictionary
containing the response data.

Can raise CursorNotFound, NotPrimaryError, ExecutionTimeout, or
OperationFailure.

:param cursor_id: cursor_id we sent to get this response -
    used for raising an informative exception when we get cursor id not
    valid at server response
:param codec_options: an instance of
    :class:`~bson.codec_options.CodecOptions`
:param user_fields: Response fields that should be decoded
    using the TypeDecoders from codec_options, passed to
    bson._decode_all_selective.
)r  r   
decode_allr2   _decode_all_selectiver  r   codec_optionsr  legacy_responses        rB   unpack_response_OpReply.unpack_responsey  sA    0 	)$??4>>=AA))$..-UUr.   c                N    U R                  US9nU R                  S:X  d   eUS   $ )Unpack a command response.r   r,   r   )r  r  )r  r   r   s      rB   command_response_OpReply.command_response  s2    ##-#@##q(((Awr.   c                    [         ez)Return the bytes of the command response.)NotImplementedErrorr"  s    rB   raw_command_response_OpReply.raw_command_response  s
     "!r.   c                    g)+Is the moreToCome bit set on this response?FrA   r"  s    rB   more_to_come_OpReply.more_to_come  s     r.   c                F    U R                  U5      u  p#pEUSS nU " X#XV5      $ )z%Construct an _OpReply from raw bytes.   N)UNPACK_FROM)clsr   r   r   r  r  r2   s          rB   unpack_OpReply.unpack  s/     03s/C,!H	5_@@r.   )r   r2   r   r  )r   r=  r   r=  r  r=  r2   bytes)NN)r   Optional[int]r  Optional[Mapping[str, Any]]r@  list[bytes]
r   r  r   r   r  r  r  r  r@  zlist[dict[str, Any]]r   r   r@  dict[str, Any])r@  r   r@  r  )r   r  r@  r  )rS   rC  rD  rE  rF  rG  structStructunpack_fromr  OP_CODEr  r  r;   r  r  r  rH  r  classmethodr  rI  rA   r.   rB   r  r  ?  s    .FI--(44KG# [_*&*<W*	*\ $(&D37 %V V $V 1	V
 V 
V:"
   A Ar.   r  c                      \ rS rSrSrSr\R                  " S5      R                  r	Sr
SrSrSrSS	 jrS
0 4     SS jjrS
\S
S4         SS jjrSS jrSS jr\SS j5       r\SS j5       rSrg
)_OpMsgi  z"A MongoDB OP_MSG response message.)r   r   r  payload_documentz<IBir   r,   r-   i   c                    Xl         X l        g r   r   r'  )r  r   r'  s      rB   r  _OpMsg.__init__  s    
 0r.   Nc                f    [         R                  " [        U R                  5      U[        5      nU/$ )zX
cursor_id is ignored
user_fields is used to determine which fields must not be decoded
)r   _decode_selectiver   r'  r   )r  r   r  inflated_responses       rB   r  _OpMsg.raw_response  s3     !22D112KAX
 """r.   Fc                V    U(       a   e[         R                  " U R                  X#5      $ )aF  Unpack a OP_MSG command response.

:param cursor_id: Ignored, for compatibility with _OpReply.
:param codec_options: an instance of
    :class:`~bson.codec_options.CodecOptions`
:param user_fields: Response fields that should be decoded
    using the TypeDecoders from codec_options, passed to
    bson._decode_all_selective.
)r   r  r'  r  s        rB   r  _OpMsg.unpack_response  s&    " #""))$*?*?\\r.   c                &    U R                  US9S   $ )r  r  r   )r  )r  r   s     rB   r  _OpMsg.command_response  s    ##-#@CCr.   c                    U R                   $ r
  )r'  r"  s    rB   r  _OpMsg.raw_command_response  s    $$$r.   c                F    [        U R                  U R                  -  5      $ )r  )r  r   MORE_TO_COMEr"  s    rB   r  _OpMsg.more_to_come  s     DJJ!2!2233r.   c                <   U R                  U5      u  p#nUS:w  aD  X R                  -  (       a  [        SUS 35      eX R                  -  (       a  [        SUS 35      eUS:w  a  [        SUS 35      e[	        U5      US-   :w  a  [        S5      eUSS nU " X%5      $ )	z#Construct an _OpMsg from raw bytes.r   z+Unsupported OP_MSG flag checksumPresent: 0xxzUnsupported OP_MSG flags: 0xz#Unsupported OP_MSG payload type: 0x   z$Unsupported OP_MSG reply: >1 sectionN)r  CHECKSUM_PRESENTr    r6  rJ   )r  r   r   first_payload_typefirst_payload_sizer'  s         rB   r  _OpMsg.unpack  s     9<8L5#5A:+++#&QRWXYQZ$[\\'''#&B5)$LMM""EFXYZE[ \]]s8)A-- FGGqr75++r.   r)  )r   r=  r'  r  )r   r  r  r  r@  r^  r  r  )r@  r  r  )r   r  r@  r&  )rS   rC  rD  rE  rF  rG  r   r!  r"  r  r#  r;  r6  EXHAUST_ALLOWEDr  r  r;   r  r  r  rH  r  r$  r  rI  rA   r.   rB   r&  r&    s    ,MI--'33KG LO1 $(35# # 1# 
!	#  $(&D37 %] ] $] 1	]
 ] 
](D% 4 4 , ,r.   r&  z5dict[int, Callable[[bytes], Union[_OpReply, _OpMsg]]]_UNPACK_REPLYc                      \ rS rSrSrSrSrS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rg)_Queryi
  zA query operation.)r   dbr   ntoskiprK   fieldsr   rL   r   r   r   r   r   r   clientr   _as_commandexhaustNc                    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        Xl        Xl        Xl        Xl        SU l        S U l        UU l        g )Nr   )r   rC  r   rD  rK   rE  r   rL   r   r   r   r   r   rF  r   r   rG  rH  )r  r   rC  r   rD  rK   rE  r   rL   r   r   r   r   r   rF  r   rH  s                    rB   r  _Query.__init__&  si    & 
		*.(
$",	AEr.   c                    S U l         g r   rG  r"  s    rB   reset_Query.resetL  
    r.   c                8    U R                    SU R                   3$ Nr  rC  r   r"  s    rB   rT  _Query.namespaceO      ''!DII;''r.   c                6   SnU R                   (       d  SnO\UR                  S:  a  SnOIU R                  R                  (       d.  [	        SU R                  R
                  UR                  4-  5      eUR                  U R                  U R                  5        U$ )NFTrc   zDread concern level of %s is not valid with a max wire version of %d.)	rH  r   r   ok_for_legacyr   r   validate_sessionrF  r   )r  r   use_find_cmds      rB   use_command_Query.use_commandR  s    ||L""a'L""00$1484E4E4K4KTMbMb3cd 
 	dkk4<<8r.   c                (    XR                   4U l        g r   rC  rG  r  r   s     rB   update_command_Query.update_commandb      <r.   c                T   U R                   b  U R                   $ SU R                  ;   n[        U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  5      nU(       a  SU l        SU0nUR                  U5        U R                  (       ae  U R                  R                  USU R                   U5        U(       d6  U R                  R"                  (       d  U R                  R%                  XA5        UR'                  X@R                  U R(                  5        U(       a  UR+                  U R(                  US9  X@R,                  4U l         U R                   $ )z.Return a find command document for this query.r   explainFr   )rG  rK   r   r   rE  rD  r   r   r   r   r   r   r   r   add_server_api	_apply_torL   r   _update_read_concernsend_cluster_timerF  apply_timeoutrC  )r  r   rh  rb  r   s        rB   
as_command_Query.as_commande  s;    '###		)/IIIIKKLLJJOOJJNNLL
 !DIc"CC <<LL""3t/C/CTJ4<<#>#>11#<sLL$++>t{{4<r.   c                   Xl         UR                  (       a  U R                  S-  nOU R                  nU R                  5       nU R                  nU(       aG  U R                  U5      S   n[        SUU R                  UU R                  UR                  S9u  pxpXxU	4$ U R                  S:H  =(       a    S=(       d    U R                  nU R                  (       a*  U(       a  [        U R                  U5      nOU R                  nUR                  (       a"  [        U[        5      (       d   e[!        Xa5      n[#        UUU R$                  UUU(       a  SOU R&                  U R                  UR                  S9$ )z:Get a query message, possibly setting the secondaryOk bit.r   r   r   r,   r-   N)rL   rG   r   rT  rK   ri  r   rC  r   r  r   r   r   	is_mongos
isinstancer
   rM   r   rD  rE  )r  rL   r   use_cmdr   r  rK   r   r   r   r  	ntoreturns               rB   get_message_Query.get_message  s4   
  /JJNEJJE^^yy??4(+D'."",,($JT D((
 OOq(.QA$//	::

I6	 JJ	>>dN3333-dDDLLD((	
 		
r.   )rG  r   r   rF  r   r   r   rC  rH  rE  r   r   r   rD  r   rL   r   rK   ) r   r=  rC  rQ   r   rQ   rD  r=  rK   Mapping[str, Any]rE  r  r   r   rL   r"   r   r=  r   r=  r   r&   r   r  r   r>  rF  r*   r   Optional[bool]rH  r  r@  rB  r@  rQ   r   r)   r@  r  r   r  r@  rB  Fr   r)   rh  r  r@  ztuple[dict[str, Any], str])rL   r"   r   r)   ro  r  r@  tuple[int, bytes, int])rS   rC  rD  rE  rF  rG  conn_mgrr   r  rM  rT  rY  r^  ri  rq  rI  rA   r.   rB   rB  rB  
  s&   I, HI$$ $ 	$
 $  $ ,$ $$ %$ $ $ "$ /$ 2$ %$  '!$" #$L ( ( @E% '% 8<% 	#% P X]2
*2
2E2
PT2
	2
 2
r.   rB  c                      \ rS rSrSrSrS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rg)_GetMorei  zA getmore operation.)rC  r   rp  r   r   r   rL   r   rF  r|  rG  rH  r~   r   c                    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        S U l
        Xl        Xl        g r   )rC  r   rp  r   r   rL   r   rF  r   r|  rG  rH  r~   )r  rC  r   rp  r   r   rL   r   rF  r   r|  rH  r~   s                rB   r  _GetMore.__init__  sK     	""*.!2 AEr.   c                    S U l         g r   rL  r"  s    rB   rM  _GetMore.reset  rO  r.   c                8    U R                    SU R                   3$ rQ  rR  r"  s    rB   rT  _GetMore.namespace  rT  r.   c                    SnU R                   (       d  SnOUR                  S:  a  SnUR                  U R                  U R                  5        U$ )NFTrc   )rH  r   rW  rF  r   )r  r   ro  s      rB   rY  _GetMore.use_command  sC    ||G""a'Gdkk4<<8r.   c                (    XR                   4U l        g r   r\  r]  s     rB   r^  _GetMore.update_command  r`  r.   c                   U R                   b  U R                   $ [        U R                  U R                  U R                  U R
                  U R                  U5      nU R                  (       a(  U R                  R                  USU R                  U5        UR                  U5        UR                  X0R                  U R                  5        U(       a  UR                  U R                  SS9  X0R                  4U l         U R                   $ )z1Return a getMore command document for this query.NFrc  )rG  r   r   r   rp  r   r~   r   re  rL   rd  rg  rF  rh  rC  )r  r   rh  r   s       rB   ri  _GetMore.as_command  s    
 '###3NNIINN""LL
 <<LL""3t/C/CTJC sLL$++>t{{5<r.   c           	        U R                  5       nUR                  nU(       a{  U R                  U5      S   nU R                  (       a"  U R                  (       a  [
        R                  nOSn[        XvU R                  SU R                  UR                  S9u  ppXU
4$ [        X@R                  U R                  U5      $ )zGet a getmore message.r   Nrl  )rT  r  ri  r|  rH  r&  r?  r   rC  r   r
  rp  r   )r  dummy0r   ro  r  r   rK   r   r   r   r   r  s               rB   rq  _GetMore.get_message!  s     ^^&&??4(+D}}..'.TWWdD,>,>DD\D\($JT D((^^T^^SAAr.   )rG  rF  r   r   r~   r|  r   rC  rH  r   rp  rL   r   N)rC  rQ   r   rQ   rp  r=  r   r=  r   r   rL   r"   r   r>  rF  r*   r   r  r|  r   rH  r  r~   r   ru  rv  rw  rx  ry  rz  )r  r   r   r)   ro  r  r@  z0Union[tuple[int, bytes, int], tuple[int, bytes]])rS   rC  rD  rE  rF  rG  r   r  rM  rT  rY  r^  ri  rq  rI  rA   r.   rB   r~  r~    s    I  D  	
  $ % 2 % )   : (	( @E ' 8< 	# 6 GLBB!4B?CB	9B Br.   r~  c                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )_RawBatchQueryi6  c                j   > [         TU ]  U5        UR                  S:  a  gU R                  (       d  ggNrc   TFrN  rY  r   rH  r  r   rR   s     rB   rY  _RawBatchQuery.use_command7  .    D!  A%r.   rA   rw  rS   rC  rD  rE  rY  rI  r`  ra  s   @rB   r  r  6       r.   r  c                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )_RawBatchGetMoreiB  c                j   > [         TU ]  U5        UR                  S:  a  gU R                  (       d  ggr  r  r  s     rB   rY  _RawBatchGetMore.use_commandC  r  r.   rA   rw  r  ra  s   @rB   r  r  B  r  r.   r  c                  `    \ rS rSr% SrS\S'   SS jr\SS j5       rSS jr	SS jr
SS	 jrS
rg)_CursorAddressiN  zEThe server address (host, port) of a cursor, with namespace property.r   _CursorAddress__namespacec                <    [         R                  X5      nX#l        U$ r   )tuple__new__r  )r  r0  rT  r  s       rB   r  _CursorAddress.__new__S  s    }}S*$r.   c                    U R                   $ )zThe namespace this cursor.)r  r"  s    rB   rT  _CursorAddress.namespaceX  s     r.   c                @    / U QU R                   P7R                  5       $ r   )r  __hash__r"  s    rB   r  _CursorAddress.__hash__]  s#     *$)(()3355r.   c                    [        U[        5      (       a7  [        U 5      [        U5      :H  =(       a    U R                  UR                  :H  $ [        $ r   )rn  r  r  rT  NotImplementedr  others     rB   __eq___CursorAddress.__eq__b  s:    e^,,;%,.T4>>U__3TTr.   c                    X:X  + $ r   rA   r  s     rB   __ne___CursorAddress.__ne__g  s      r.   )__namespaceN)r0  r'   rT  rQ   r@  r  rv  r?  )r  objectr@  r  )rS   rC  rD  rE  rF  __annotations__r  rH  rT  r  r  r  rI  rA   r.   rB   r  r  N  s3    O
    6

!r.   r  r?  )rK   r]  rL   r"   r@  r]  )rU   	Exceptionr@  r  )rl   rQ   rm   rs  rn   rs  r@  r  )NNN)r   rQ   rK   rs  r   z1Optional[Union[Mapping[str, Any], Iterable[str]]]r   r=  r   r=  r   r  r   r  r   r&   r   r  r   r>  r   rt  r@  r  )r   r  r   rQ   r   r  r   r  r~   zOptional[Any]r   r)   r@  r  )rl   r=  r   r  r   .Union[SnappyContext, ZlibContext, ZstdContext]r@  tuple[int, bytes])rl   r=  r   r  r@  r  )r   r=  rm   rs  r   rQ   r   !Optional[list[Mapping[str, Any]]]r   r   r@  ztuple[bytes, int, int])r   r=  rm   rs  r   rQ   r   r  r   r   r   r  r@  tuple[int, bytes, int, int])r   r=  rm   rs  r   rQ   r   r  r   r   r@  r  r   )r   r=  rm   r]  r   rQ   rL   zOptional[_ServerMode]r   r   r   4Union[SnappyContext, ZlibContext, ZstdContext, None]r@  r  )r   r=  r   rQ   r   r=  r   r=  r   rs  r   r  r   r   r@  ztuple[bytes, int])r   r=  r   rQ   r   r=  r   r=  r   rs  r   r  r   r   r   r  r@  r{  )r   r=  r   rQ   r   r=  r   r=  r   rs  r   r  r   r   r@  r{  )r   r=  r   rQ   r   r=  r   r=  r   rs  r   r  r   r   r   r  r@  r{  )r   rQ   r   r=  r   r=  r@  r  )
r   rQ   r   r=  r   r=  r   r  r@  r  )r   rQ   r   r=  r   r=  r@  r  )
r   rQ   r   r=  r   r=  r   r  r@  r  )rl   rQ   ro  r=  rp  r=  r@  r   )rl   r=  rm   rs  r   r^  r}  r  r   r   r   rK  r~  r  r@  #tuple[list[Mapping[str, Any]], int])rl   r=  rm   rs  r   r^  r}  r  r   r   r   rK  r@  %tuple[bytes, list[Mapping[str, Any]]])rl   r=  rm   rs  r   r^  r}  r  r   r   r   rK  r@  *tuple[int, bytes, list[Mapping[str, Any]]])rT  rQ   rl   r=  rm   r]  r   r^  r   r   r   rK  r@  r  )r  r  r  r  r  r  r}  r  r~  r  r@  r=  )rm   rs  r  r  r  r  r}  r  r   r   r   r  r~  r  r@  z<tuple[list[Mapping[str, Any]], list[Mapping[str, Any]], int])rm   rs  r  r  r  r  r}  r  r   r   r   r  r@  z>tuple[bytes, list[Mapping[str, Any]], list[Mapping[str, Any]]])rm   rs  r  r  r  r  r}  r  r   r   r   r  r@  Ctuple[int, bytes, list[Mapping[str, Any]], list[Mapping[str, Any]]])rm   r]  r  r  r  r  r   r   r   r  r@  r  )rT  rQ   rl   r=  rm   r]  r   r^  r   r   r   rK  r@  r  )rT  rQ   rl   r=  rm   r]  r   r^  r   r   r   rK  r~  r  r@  r  )rF  
__future__r   r  r=   r   ior   r  typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   
bson.int64r   bson.raw_bsonr   r   r   r   pymongo.hellor   pymongo.monitoringr   pymongor   _use_cImportErrorpymongo.errorsr   r   r   r   r   r   r   r    pymongo.read_preferencesr!   r"   pymongo.compression_supportr#   r$   r%   pymongo.read_concernr&   pymongo.typingsr'   r(   r)   r*   r+   r@   r?   r  _INSERT_UPDATE_DELETE_EMPTYr  r  r  r   r  r  r  r   r;   r  rC   rM   rV   rY   rr   r   r   r   r   r!  packr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _query_messager   r   r  r  r  _get_more_messager
  rx  r  rK  rc  rq  rl  r  r  r  r  rS  r  r  r  r  r  r  r  r  rf  r  r  r&  r#  r  r@  rB  r~  r  r  r  r  rA   r.   rB   <module>r     s   #    "
 
 
  < <   & .!F	 	 	 ASS0  		  


	
..1// 	
 CO!*C  ? 
0

"5@$O
!!.!8I!!J  #"
2 .204%)0
0
0 B0 	0
 0 0 0 0 +0 .0 #0 0f
  %	
   & "==499  +++&T++& }}W%** MM$$$	 --.33 ]]4 %%
444 4 ,	4
 4 4@/// / ,	/
 / 
8/ !/
=
=
= 
= ,	
=
 
= !
= 
$,, AE''%' ' +	'
 ' 
>' !'@  	
  0  >### # 	#
 # 0# # 
8# #$### # 	#
 # 0# # #" 
#22 AE  	
  0  
> ( --%**	[[[ [ 
8	[
 [[[),[9<[[ 
&88 AE		M	M	M 	M 
>		M
 	M  ^^[
 [
|4- 4n#!2 #0L&  AAA "A 
	A
 A 
A 
A )AH### "# 
	#
 # 
# +#" 
&==$$$ "$ 
	$
 $ 
$ 0$$/// "/ 
	/
 / 
/ 0/8 
//OEEE &E "	E
 E 
E 0E*:3 :z  --$- $- 
	-
 
- 	-`s+s+3s+ s+ 
	s+
 s+ 
!s+ 
s+ Bs+l3333 3 
	3
 3 
!3 D3&4434 4 
	4
 4 
!4 I4(??3? ? 
	?
 ? 
!? I?<S%S3S S 	S
 
!S IS.### &# "	#
 # 
# +# 
$-$K$K!JJJ &J "	J
 J 
J 
J )JZnA nAbQ, Q,j hoo
NNFMMHD t
 t
nrB rBj	V 		x 	!U !m8  Fs   T	 	TT