
    _iS                    0   U d Z ddlmZ ddlZddlZddlZddlmZ ddl	m
Z
mZmZmZmZmZmZmZmZ ddlZddlmZmZmZ ddlmZ ddlmZmZmZmZ dd	lmZ dd
l m!Z! 	 ddl"m#Z# dZ$n# e%$ r dZ$Y nw xY wddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 e
rddl2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z= dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJeAdeBd eCd!iZKd"d#d$d%d&ZL ed'(          ZMd)eNd*<   dd-ZOdd2ZPdd6ZQdd7ZRdd=ZSdd>d?d@dAdBZTdCdDdEdFdGdHdIdJdKdLdLdMdNZU	 	 	 ddd_ZVddeZW ejX        df          jY        ZZdgZ[ddmZ\ ejX        dn          jY        Z]ddoZ^ ejX        dp          jY        Z_ ejX        dq          jY        Z` ejX        dr          jY        ZaddzZbdd|Zcdd}Zde$re#je        Zd	 dddZeddZfddZgddZhe$re#ji        Zh	 dddZj ejX        d          jY        ZkddZlddZmddZne$re#jo        Zn	 dddZpeAdeBdeCdiZq G d d          Zr G d der          Zs G d des          ZtddZudZvddZwddZxe$re#jx        ZxddZyddZze$re#jz        ZzddZ{ G d der          Z|dZ}ddZ~ddZddZddZddZddZddZe$re#j        ZddÄZ G dĄ dŦ          Z G dƄ dǦ          Zej        ej        ej        ej        iZdeNd<    G dʄ d˦          Z G d̄ dͦ          Z G d΄ de          Z G dЄ de          Z G d҄ deedf                   ZdS )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ops)insertupdatedelete	bulkWritereplace)unicode_decode_error_handlerzCodecOptions[Mapping[str, Any]]_UNICODE_REPLACE_CODEC_OPTIONSreturnintc                 @    t          j        t          t                    S )z(Generate a pseudo random 32 bit integer.)randomrandint	MIN_INT32	MAX_INT32 r.   2D:\Nbitz\venv\Lib\site-packages\pymongo/message.py_randintrF   t   s    >)Y///r.   specMutableMapping[str, Any]read_preferencer"   c                    |j         }|j        }|r5|t          j        j         k    st	          |          dk    rd| vrd| i} || d<   | S )z-Add $readPreference to spec when appropriate.r,   $query$readPreference)modedocumentr!   SECONDARY_PREFERREDlen)rG   rI   rM   rN   s       rE   _maybe_add_read_preferencerQ   y   sd     D'H  +;@@@CMMTUDUDU4d#D"*Kr.   	exception	Exceptiondict[str, Any]c                :    t          |           | j        j        dS )z<Convert an Exception into a failure document for publishing.)errmsgerrtype)str	__class____name__rR   s    rE   _convert_exceptionr\      s    )nn1D1MNNNr.   c                F    t          |           | j        | j        j        dS )zmConvert an Exception into a failure document for publishing,
    for use in client-level bulk write API.
    )rV   coderW   )rX   r^   rY   rZ   r[   s    rE   _convert_client_bulk_exceptionr_      s*    
 i..&/  r.   	operationrX   commandMapping[str, Any]resultc                |   |                     dd          }d|d}|                     d|                     dd                    }|rR|                     d          r|d	dd
id|d<   n1d|                     dd          |d}d|v r|d         |d<   |g|d<   |S | dk    rt          |d                   |d<   n| dk    r}d|v rd|d         dg|d<   ni|                     d          du rR|dk    rL|d         d         }|d                              d|d                              d                    }d|dg|d<   |S )z6Convert a legacy write result to write command format.nr   r,   )okre   rV   err wtimeout@   T)rV   r^   errInfowriteConcernErrorr^      )indexr^   rV   rk   writeErrorsr6   r2   r7   upserted)rn   _idupdatedExistingFr3   urq   q)getrP   )	r`   ra   rc   affectedresrV   errorr7   rq   s	            rE   _convert_write_resultry      s   
 zz#q!!H
"
"CZZ&**UB"7"788F 
::j!! 	28"R\^bQc'd'dC#$$  FA)>)>&QQEF""#))#4i "'CJHw{+,,C	h		)*6*3EFFGC
OO ZZ)**e33A Y'*F+//%)?)?@@C)*3778C
OJr.   rm             )tailableoplogReplaynoCursorTimeout	awaitDataallowPartialResultsfiltersorthintcommentmaxScan	maxTimeMSmaxmin	returnKeyshowRecordIdsnapshot)rK   z$orderbyz$hintz$commentz$maxScanz
$maxTimeMSz$maxz$minz
$returnKeyz$showRecordIdz$showDiskLocz	$snapshotcoll
projection1Optional[Union[Mapping[str, Any], Iterable[str]]]skiplimit
batch_sizeOptional[int]optionsread_concernr&   	collationOptional[Mapping[str, Any]]session Optional[_AgnosticClientSession]allow_disk_useOptional[bool]c                ,   d| i}d|v rd|                     d |                                D                        d|v r|                    d           d|v r|                    d           n||d<   |r||d<   |r||d<   |rt          |          |d	<   |d
k     rd|d<   |r||k    r|dz  }||d<   |j        r|	r|	j        s
|j        |d<   |r||d<   |
|
|d<   r8|                     fdt                                          D                        |S )z!Generate a find command document.findrK   c                L    g | ]!\  }}|t           v rt           |         |fn||f"S rD   )
_MODIFIERS).0keyvals      rE   
<listcomp>z%_gen_find_command.<locals>.<listcomp>   sH       C +.*;*;C#&&#s  r.   $explainrL   r   r   r   r   r   TsingleBatchr,   	batchSizereadConcernr   NallowDiskUsec                (    g | ]\  }}|z  
|d fS )TrD   )r   optr   r   s      rE   r   z%_gen_find_command.<locals>.<listcomp>
  s*    RRRHCGcMRS$KRRRr.   )r7   itemspopabslevelin_transactionrN   _OPTIONS)r   rG   r   r   r   r   r   r   r   r   r   cmds         `     rE   _gen_find_commandr      s    "4.C4

  $

  	
 	
 	
 GGJ##GG%&&&H '&L F &5zzG199!%C & J!OJ%K 37 3w/E 3)2M %$K!,N T

RRRR0@0@RRRSSSJr.   	cursor_idmax_await_time_msOptional[Any]connr)   c                P    | |d}|r||d<   |||d<   ||j         dk    r||d<   |S )z$Generate a getMore command document.)getMore
collectionr   Nr   	   r   )max_wire_version)r   r   r   r   r   r   r   s          rE   _gen_get_more_commandr     sT     '0tDDC &%K$,Kt499 IJr.   z<iiiiiiB   databytesctx.Union[SnappyContext, ZlibContext, ZstdContext]tuple[int, bytes]c           
         |                     |          }t                      }t          t          t	          |          z   |dd| t	          |          |j                  }|||z   fS )zDTakes message data, compresses it, and adds an OP_COMPRESSED header.r   i  )compressrF   _pack_compression_header_COMPRESSION_HEADER_SIZErP   compressor_id)r`   r   r   
compressed
request_idheaders         rE   	_compressr   &  sh     d##JJ% 3z??2	D		 F v
***r.   z<iiiic                p    t                      }t          dt          |          z   |d|           }|||z   fS )ztTakes message data and adds a message header based on the operation.

    Returns the resultant message string.
    rz   r   )rF   _pack_headerrP   )r`   r   ridmessages       rE   __pack_messager   <  s9    
 **C2D		>39==G$r.   z<iz<IBz<Bflags
identifierdocs!Optional[list[Mapping[str, Any]]]optsCodecOptions[Any]tuple[bytes, int, int]c                   t          |d          }t          | d          }t          |          }d}|r|t          d          }	t	          |          }
fd|D             }t          |
          t          d |D                       z   dz   }t          |          }||z  }t          d |D                       }|||	||
g|}n||g}d	                    |          ||fS )
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   Nr,   c                2    g | ]}t          |d           S F)r   )r   docr   s     rE   r   z%_op_msg_no_header.<locals>.<listcomp>`  s%    HHHCc5$77HHHr.   c              3  4   K   | ]}t          |          V  d S NrP   r   r   s     rE   	<genexpr>z$_op_msg_no_header.<locals>.<genexpr>a  s(      !C!Cs#c((!C!C!C!C!C!Cr.      c              3  4   K   | ]}t          |          V  d S r   r   r   s     rE   r   z$_op_msg_no_header.<locals>.<genexpr>d  s(      <<3s88<<<<<<r.   r.   )	r   _pack_op_msg_flags_typerP   
_pack_byter   sum	_pack_intr   join)r   ra   r   r   r   encoded
flags_type
total_sizemax_doc_sizetype_onecstringencoded_docssizeencoded_sizer   s       `          rE   _op_msg_no_headerr   K  s    GUD11G(22JWJL 
%d&a== ,,HHHH4HHH7||c!C!Cl!C!C!CCCCaG d
<<|<<<<<GX|WT|TG$88D>>:|33r.   tuple[int, bytes, int, int]c                d    t          | ||||          \  }}}t          d||          \  }	}|	|||fS )zInternal OP_MSG message helper.  )r   r   )
r   ra   r   r   r   r   msgr   max_bson_sizer   s
             rE   _op_msg_compressedr   k  sF     &7ugzSWY]%^%^"C]sC((HCZ..r.   c                b    t          | ||||          \  }}}t          d|          \  }}	||	||fS )z*Internal compressed OP_MSG message helper.r   )r   r   )
r   ra   r   r   r   r   r   r   r   
op_messages
             rE   _op_msg_uncompressedr   y  sE     '8w
TXZ^&_&_#D*m+D$77J
z:}<<r.   dbnameOptional[_ServerMode]4Union[SnappyContext, ZlibContext, ZstdContext, None]c                n   ||d<   |d|vr|j         r
|j        |d<   t          t          |                    }	 t          |         }|                    |          }n# t          $ r d}d}Y nw xY w	 |rt          | |||||          |r|||<   S S t          | ||||          |r|||<   S S # |r|||<   w xY w)zGet a OP_MSG message.$dbNrL   rh   )	rM   rN   nextiter
_FIELD_MAPr   KeyErrorr   r   )	r   ra   r   rI   r   r   namer   r   s	            rE   _op_msgr    s$    GEN"'8'G'G 	B)8)AG%&WD%
{{:&&   
' 	S%eWj$cRR  	'"&GJ	' $E7JdKK  	'"&GJ	': 	'"&GJ&&&&s#   "A A.-A.2B+ B+ +	B4collection_namenum_to_skipnum_to_returnqueryfield_selectortuple[bytes, int]c                P   t          |d|          }|rt          |d|          }nd}t          t          |          t          |                    }	d                    t	          |           t          j        |          t	          |          t	          |          ||g          |	fS )zGet an OP_QUERY message.Fr.   )r   r   rP   r   r   bsonr   )
r   r  r  r  r	  r
  r   r   efsr   s
             rE   _query_implr    s     E5$//G NE488Gc#hh//M'""#O44+&&-((		
 		
 	 r.   tuple[int, bytes, int]c           	     d    t          | ||||||          \  }}	t          d||          \  }
}|
||	fS )z)Internal compressed query message helper.  )r  r   )r   r  r  r  r	  r
  r   r   op_queryr   r   r   s               rE   _query_compressedr    sL     *+}e^UY Hm x--HC]""r.   c           	     b    t          | ||||||          \  }}t          d|          \  }	}
|	|
|fS )zInternal query message helper.r  )r  r   )r   r  r  r  r	  r
  r   r  r   r   r   s              rE   _query_uncompressedr    sJ     *+}e^UY Hm dH--HC]""r.   c           
     \    |rt          | |||||||          S t          | ||||||          S )zGet a **query** message.)r  r  )r   r  r  r  r	  r
  r   r   s           rE   _queryr    sU      
 _k=%Y]_b
 
 	
 +}e^UY  r.   z<qc                    d                     t          t          j        |           t	          |          t          |          g          S )zGet an OP_GET_MORE message.r.   )r   _ZERO_32r  r   r   _pack_long_longr  r  r   s      rE   _get_more_implr    sD    8800m$$I&&		
  r.   c                B    t          dt          | ||          |          S )z+Internal compressed getMore message helper.  )r   r  r  r  r   r   s       rE   _get_more_compressedr!    s#     T>/=)TTVYZZZr.   c                @    t          dt          | ||                    S )z Internal getMore message helper.r  )r   r  r  s      rE   _get_more_uncompressedr#    s      $y Y YZZZr.   c                L    |rt          | |||          S t          | ||          S )zGet a **getMore** message.)r!  r#  r   s       rE   	_get_morer%  (  s3      T#O]IsSSS!/=)LLLr.   s
   documents s   updates s   deletes c                      e Zd ZdZdZd!dZed"d            Zed"d            Zed"d            Z	ed"d            Z
d#dZd$dZd S )%_BulkWriteContextBasez]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codecdatabase_namerX   cmd_namer   r)   operation_idr>   r-  r   r   r   r.  r/  r   c	                4   || _         || _        || _        || _        |j        | _        || _        t          | j                 | _        t          j	        
                                | _        || _        t          |j                  | _        || _        || _        d S r   )r(  r   r)  r-  enabled_for_commandsr+  r  r  r*  datetimenowr,  r   boolcompression_contextr   r.  r/  )	selfr0  r1  r   r2  r-  r   r.  r/  s	            rE   __init__z_BulkWriteContextBase.__init__P  s     %	!
" 5		*
"+//11T566


r.   r=   c                    | j         j        S )z#A proxy for SockInfo.max_bson_size.)r   r   r9  s    rE   r   z#_BulkWriteContextBase.max_bson_sizeh  s     y&&r.   c                F    | j         r| j        j        dz
  S | j        j        S )z&A proxy for SockInfo.max_message_size.rz   )r   r   max_message_sizer<  s    rE   r>  z&_BulkWriteContextBase.max_message_sizem  s)     = 	39-22y))r.   c                    | j         j        S )z*A proxy for SockInfo.max_write_batch_size.)r   max_write_batch_sizer<  s    rE   r@  z*_BulkWriteContextBase.max_write_batch_sizeu  s     y--r.   c                    | j         S )z:The maximum size of a BSON command before batch splitting.)r   r<  s    rE   max_split_sizez$_BulkWriteContextBase.max_split_sizez  s     !!r.   r   replyr+   durationdatetime.timedeltaNonec                    | j                             ||| j        || j        j        | j        j        | j        | j        j        | j        	  	         dS )z Publish a CommandSucceededEvent.r0  N)	r-  publish_command_successr  r   addressserver_connection_idr)  
service_idr(  )r9  r   rC  rD  s       rE   _succeedz_BulkWriteContextBase._succeed  s[    ..III*JI , 	/ 
	
 
	
 
	
 
	
 
	
r.   failurec                    | j                             ||| j        || j        j        | j        j        | j        | j        j        | j        	  	         dS )zPublish a CommandFailedEvent.rH  N)	r-  publish_command_failurer  r   rJ  rK  r)  rL  r(  )r9  r   rN  rD  s       rE   _failz_BulkWriteContextBase._fail  s[    ..III*JI , 	/ 
	
 
	
 
	
 
	
 
	
r.   Nr0  rX   r1  rX   r   r)   r2  r>   r-  r   r   r   r.  r>   r/  r   r=   r>   )r   r>   rC  r+   rD  rE  r=   rF  )r   r>   rN  r+   rD  rE  r=   rF  )rZ   
__module____qualname____doc__	__slots__r:  propertyr   r>  r@  rB  rM  rQ  rD   r.   rE   r'  r'  >  s        ggI   0 ' ' ' X' * * * X* . . . X. " " " X"
 
 
 

 
 
 
 
 
r.   r'  c                  8     e Zd ZdZdZd fdZddZddZ xZS )_BulkWriteContextz]A wrapper around AsyncConnection/Connection for use with the collection-level bulk write API.rD   r0  rX   r1  r   r)   r2  r>   r-  r   r   r   r.  r/  r   c	           
     X    t                                          ||||||||           d S r   superr:  )
r9  r0  r1  r   r2  r-  r   r.  r/  rY   s
            rE   r:  z_BulkWriteContext.__init__  sC     			
 		
 		
 		
 		
r.   r   rH   r   list[Mapping[str, Any]]r=   Atuple[int, Union[bytes, dict[str, Any]], list[Mapping[str, Any]]]c                    | j         dz   }t          || j        ||| j        |           \  }}}|st	          d          |||fS )N.$cmdcannot do an empty bulk write)r(  _do_batched_op_msgr.  r/  r   )r9  r   r   	namespacer   r   to_sends          rE   batch_commandz_BulkWriteContext.batch_command  s^     L7*	#5t|S$
D$
 $
 
C  	D"#BCCC3''r.   r   c           	         ||| j         <   | j                            || j        || j        j        | j        j        | j        | j        j                   |S )Publish a CommandStartedEvent.)	r*  r-  publish_command_startr(  r   rJ  rK  r)  rL  )r9  r   r   r   s       rE   _startz_BulkWriteContext._start  sX     DJ,,LII*JI 	
 	
 	
 
r.   rR  )r   rH   r   r^  r=   r_  )r   rH   r   r>   r   r^  r=   rH   	rZ   rT  rU  rV  rW  r:  rf  rj  __classcell__rY   s   @rE   rZ  rZ    sp        ggI
 
 
 
 
 
,	( 	( 	( 	(       r.   rZ  c                  2    e Zd ZdZddZedd
            ZdS )_EncryptedBulkWriteContextrD   r   rH   r   r^  r=   3tuple[int, dict[str, Any], list[Mapping[str, Any]]]c                
   | j         dz   }t          || j        ||| j        |           \  }}|st	          d          |                    dd          dz   }t          t          |          |d          t                    }d||fS )Nra  rb  r0   r   r   )	r(  _encode_batched_write_commandr.  r/  r   rn   r   
memoryviewr   )r9  r   r   rd  r   re  	cmd_startoutgoings           rE   rf  z(_EncryptedBulkWriteContext.batch_command  s     L7*	4t|S$
D
 
W  	D"#BCCC IIgq))A-	 C!<>VWW8W$$r.   r>   c                    t           S )z Reduce the batch splitting size.)_MAX_SPLIT_SIZE_ENCr<  s    rE   rB  z)_EncryptedBulkWriteContext.max_split_size  s
     #"r.   N)r   rH   r   r^  r=   rp  rS  )rZ   rT  rU  rW  rf  rX  rB  rD   r.   rE   ro  ro    sM        I% % % % # # # X# # #r.   ro  doc_sizemax_sizer   c                Z    | dk    rt          d||fz            t          | d          )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   )r`   ry  rz  s      rE   _raise_document_too_larger|    sL    H "8,-
 
 	
 )JJJKKKr.   i    r^  ackr7  buf_BytesIO#tuple[list[Mapping[str, Any]], int]c                8   |j         }|j        }|j        }	|rdnd}
|                    |
           |                    d           |                    t	          |d|                     |                    d           |                                }|                    d           	 |                    t          |                     n# t          $ r t          d          dw xY wg }d}|D ]}t	          |d|          }t          |          }|                                |z   }|dk    o||	k    }| o||k    }|s|rJt          t                                                    |          }t          |t          |          |           ||	k    r n8|                    |           |                    |           |d	z  }||k    r n|                                }|                    |           |                    t!          ||z
                       ||fS )
zCreate a batched OP_MSG write.r1         r0   F   Unknown commandNr   r,   )r   r@  r>  writer   tell_OP_MSG_MAPr  r   rP   listr  keysr|  appendseekr   )r`   ra   r   r}  r   r   r~  r   r@  r>  r   size_locationre  idxr   value
doc_lengthnew_message_sizedoc_too_largeunacked_doc_too_largewrite_oplengths                         rE   _batched_op_msg_implr    sI    %M3+#&?,?EIIe IIgIImGUD11222 IIgHHJJMII!"""<		+i()))) < < <011t;< G
C  c5$//ZZ
88::
2qJ&69I&I %( HZ--G 	K1 	KJOO--..y9H%hE

MJJJ...E		%sq&&&E ' XXZZFHH]IIi.//000F?s   ) C
 
C%%tuple[bytes, list[Mapping[str, Any]]]c           	     z    t                      }t          | ||||||          \  }}|                                |fS )zOEncode the next batched insert, update, or delete operation
    as OP_MSG.
    )r  r  getvalue)	r`   ra   r   r}  r   r   r~  re  _s	            rE   _encode_batched_op_msgr  E  s>     **C%i$T3PSTTJGQ<<>>7""r.   *tuple[int, bytes, list[Mapping[str, Any]]]c                    t          | |||||          \  }}|j        j        J t          d||j        j                  \  }}	||	|fS )z]Create the next batched insert, update, or delete operation
    with OP_MSG, compressed.
    Nr   )r  r   r8  r   )
r`   ra   r   r}  r   r   r   re  r   r   s
             rE   _batched_op_msg_compressedr  Z  sX     +9gtS$PSTTMD'8'333dCH,HIIOJsG##r.   c           	        t                      }|                    t                     |                    d           t          | ||||||          \  }}|                    d           t                      }	|                    t          |	                     |                    d           |                    t          |                     |	|                                |fS )z"OP_MSG implementation entry point.         r   r   )r  r  _ZERO_64r  r  rF   r   r  )
r`   ra   r   r}  r   r   r~  re  r  r   s
             rE   _batched_op_msgr  l  s     **C IIhII1222*9gtS$PSUXYYOGV HHQKKKJIIi
##$$$HHQKKKIIi   s||~~w..r.   rd  c                   |                      dd          d         |d<   d|v r*t          |d                             dd                    }nd}|j        j        rt          ||||||          S t          ||||||          S )zRCreate the next batched insert, update, or delete operation
    using OP_MSG.
    .r,   r   r   writeConcernwT)splitr7  ru   r   r8  r  r  )rd  r`   ra   r   r   r   r}  s          rE   rc  rc    s     __S!,,Q/GEN  7>*..sA6677
x# T))WdCsSSS9gtS$DDDr.   c                  8     e Zd ZdZdZd fdZd dZd!dZ xZS )"_ClientBulkWriteContextzYA wrapper around AsyncConnection/Connection for use with the client-level bulk write API.rD   r0  rX   r1  r   r)   r2  r>   r-  r   r   r   r/  r   c           
     X    t                                          ||||||d|           d S )Nr   r\  )	r9  r0  r1  r   r2  r-  r   r/  rY   s	           rE   r:  z _ClientBulkWriteContext.__init__  sC     			
 		
 		
 		
 		
r.   r   rH   
operations#list[tuple[str, Mapping[str, Any]]]
namespaces	list[str]r=   Ztuple[int, Union[bytes, dict[str, Any]], list[Mapping[str, Any]], list[Mapping[str, Any]]]c                j    t          |||| j        |           \  }}}}|st          d          ||||fS )Nrb  )_client_do_batched_op_msgr/  r   )r9  r   r  r  r   r   to_send_ops
to_send_nss           rE   rf  z%_ClientBulkWriteContext.batch_command  sS     4MZT4
 4
0
Cj  	D"#BCCC3Z77r.   r   op_docsr^  ns_docsc           	         ||d<   ||d<   | j                             || j        || j        j        | j        j        | j        | j        j                   |S )rh  r5   nsInfo)r-  ri  r(  r   rJ  rK  r)  rL  )r9  r   r   r  r  s        rE   rj  z_ClientBulkWriteContext._start  s_     E
H,,LII*JI 	
 	
 	
 
r.   )r0  rX   r1  rX   r   r)   r2  r>   r-  r   r   r   r/  r   )r   rH   r  r  r  r  r=   r  )
r   rH   r   r>   r  r^  r  r^  r=   rH   rk  rm  s   @rE   r  r    sp        ccI
 
 
 
 
 
*8 8 8 8       r.   r  i  command_encodedto_send_ops_encodedlist[bytes]to_send_ns_encodedc                   |rdnd}|                     |           |                     d           |                     |            |                     d           |                                }|                     d           |                     d           |D ]}|                     |           |                                }|                                }	|                    |           |                     t          |	|z
                       |                    |           |                     d           |                                }|                     d           |                     d           |D ]}
|                     |
           |                                }	|                    |           |                     t          |	|z
                       |	S )Nr1   r  r0   r  s   ops s   nsInfo )r  r  r  r   )r  r  r  r}  r~  r   r  
op_encodedresume_locationr  
ns_encodeds              rE   _client_construct_op_msgr    s    $'?,?EIIe IIgIIo IIgHHJJMII!"""IIj)  
		*hhjjOXXZZFHH]IIi.//000HH_ IIgHHJJMII!"""IIm(  
		*XXZZFHH]IIi.//000Mr.   r  r  r  r  <tuple[list[Mapping[str, Any]], list[Mapping[str, Any]], int]c                    dd}|j         }|j        }	|j        }
t           d	|          }|s" |d
t	          |          |t
          z              g d}                     d          r|                    d                                d          r|                    d                                d          r|                    d            fd|D             }t	          t          |d	|                    }|
t          |z   z
  }i }g }g }g }g }d}d}d}t          ||          D ]\  \  }}}|}|dk    r3|s1t	          t          |d         d	|                    } ||||           |dk    r5d}|s1t	          t          |d         d	|                    } ||||           d}d}||vrd|i}t	          |          }|||<   ||         ||<   t          |d	|          } t	          |           }!|r t          |d	|          }"t	          |"          }|s |||!|t
          z              ||z   |!z   |z   }#|#|k    r!|dk    rt          ||!|t
          z               no|                    |           |                    |            ||!z  }|r/|                    |           |                    |"           ||z  }|dz  }||	k    r nt          |||||          }$|||$fS )z:Create a batched OP_MSG write for client-level bulk write.r.  rX   ry  r>   r   r=   rF  c                8    ||k    rt          | ||           d S d S r   )r|  )r.  ry  r   s      rE   _check_doc_size_limitsz;_client_batched_op_msg_impl.<locals>._check_doc_size_limits  s/    
 e%gx????? r.   Fr9   )r9   
errorsOnlyorderedbypassDocumentValidationr   letc                "    i | ]}||         S rD   rD   )r   r   ra   s     rE   
<dictcomp>z/_client_batched_op_msg_impl.<locals>.<dictcomp>6  s    CCCcWS\CCCr.   r   r6   rN   r:   r7   
updateModsNnsr,   )r.  rX   ry  r>   r   r>   r=   rF  )r   r@  r>  r   rP   _COMMAND_OVERHEADru   r  _OP_MSG_OVERHEADzipr|  r  )%ra   r  r  r}  r   r   r~  r  r   r@  r>  r  abridged_keyscommand_abridgedcommand_len_abridgedmax_doc_sequences_bytesns_infor  r  r  r  total_ops_lengthtotal_ns_lengthr  real_op_typeop_docrd  r.  ry  ns_doc	ns_lengthnew_ns_indexop_doc_encoded	op_lengthns_doc_encodedr  r  s%   `                                    rE   _client_batched_op_msg_implr    s   @ @ @ @ %M3+#GUD99O  e{C,@,@-RcBcddd ;::M{{-.. 97888{{9 (Y'''{{5 $U###CCCC]CCC}-=udKKLL /2BEY2YZG+-K*,J')&(O
C-0Z-H-H 8 8)v	8## N}VJ-?MMNN&&|X}MMM9$$G N}VL-A5$OOPP&&|X}MMM	G##I&Fz??L!-GI "),w 'vud;;''	 	,*65$??NN++I  	Z""7I}GX7XYYY+o=	IIU555axx)'9mN_>_```E 	6""""">222I% 	)f%%%%%n555y(Oq &&&E ' &,.@#s F 
F**r.   >tuple[bytes, list[Mapping[str, Any]], list[Mapping[str, Any]]]c           	     ~    t                      }t          | ||||||          \  }}}	|                                ||fS )zLEncode the next batched client-level bulkWrite
    operation as OP_MSG.
    )r  r  r  )
ra   r  r  r}  r   r   r~  r  r  r  s
             rE   _client_encode_batched_op_msgr    sI     **C!<ZdC" "KQ <<>>;
22r.   Ctuple[int, bytes, list[Mapping[str, Any]], list[Mapping[str, Any]]]c                    t          | |||||          \  }}}|j        j        J t          d||j        j                  \  }	}
|	|
||fS )zZCreate the next batched client-level bulkWrite operation
    with OP_MSG, compressed.
    Nr   )r  r   r8  r   )ra   r  r  r}  r   r   r   r  r  r   r   s              rE   !_client_batched_op_msg_compressedr    sd     %BZdC% %!D+z 8'333dCH,HIIOJsK33r.   c           	        t                      }|                    t                     |                    d           t          | ||||||          \  }}}	|                    d           t                      }
|                    t          |
                     |                    d           |                    t          |	                     |
|                                ||fS )z=OP_MSG implementation entry point for client-level bulkWrite.r  r   r   )r  r  r  r  r  rF   r   r  )ra   r  r  r}  r   r   r~  r  r  r  r   s              rE   _client_batched_op_msgr    s     **C IIhII1222&AZdC' '#KV
 HHQKKKJIIi
##$$$HHQKKKIIi   s||~~{J>>r.   c                    d| d<   d| v r*t          | d                             dd                    }nd}|j        j        rt	          | |||||          S t          | |||||          S )zOCreate the next batched client-level bulkWrite
    operation using OP_MSG.
    adminr   r  r  r,   T)r7  ru   r   r8  r  r  )ra   r  r  r   r   r}  s         rE   r  r    s     GEN  7>*..sA6677
x# b0*jRUW[]`aaa!':z3cRRRr.   c           	     z    t                      }t          | ||||||          \  }}|                                |fS )z:Encode the next batched insert, update, or delete command.)r  _batched_write_command_implr  )	rd  r`   ra   r   r   r   r~  re  r  s	            rE   rs  rs    s@     **C,Y	7DRVX[]`aaJGQ<<>>7""r.   c                   |j         }|j        }|t          z   }	|j        }
|                    t
                     |                    |                     d                     |                    t                     |                    t                     |	                                }|                    t          j        |                     |                    dd           |                                 	 |                    t          |                    n# t          $ r t          d          dw xY w|	                                dz
  }g }d}|D ]W}t!          |                              d          }t#          |d|          }t%          |          |	k    }|rJt'          t(                                                    |         }t-          |t%          |          |           |d	k    o7|	                                t%          |          z   t%          |          z   |
k    }||k    }|s|r nz|                    t.                     |                    |           |                    t                     |                    |           |                    |           |d	z  }Y|                    t2                     |	                                }|                    |           |                    t5          ||z
  d	z
                       |                    |           |                    t5          ||z
                       ||fS )
z(Create a batched OP_QUERY write command.utf8rr  r-   r  Nr   r   Fr,   )r   r@  r  rB  r  r  encode_ZERO_8_SKIPLIMr  r  r  truncate_OP_MAPr  r   rX   r   rP   r  r  r  r|  _BSONOBJr  _ZERO_16r   )rd  r`   ra   r   r   r   r~  r   r@  max_cmd_sizerB  command_start
list_startre  r  r   r   r  r  r  enough_dataenough_documentsr  s                          rE   r  r    s    %M3 !#44L'N IIhIIiv&&'''IIgIIh HHJJMIIdk'""### HHROOOLLNNN<		')$%%%% < < <011t;< aJG
C  #hhoof%%c5$// E

\1 	KJOO--..y9H%hE

MJJJQhYCHHJJS$9CJJ$F>#Y"66 	* 	E		(		#		'		%sq IIh XXZZFHHZIIi+a/00111HH]IIi.//000F?s   < D D8c                      e Zd ZdZdZ ej        d          j        ZdZ	d!dZ
	 d"d#dZdeddfd$dZd%dZd&dZed'd            Zed(d             ZdS ))_OpReplyz$A MongoDB OP_REPLY response message.)r   r   number_returnedr2   z<iqiir,   r   r>   r   r  r2   bytes | memoryviewc                X    || _         t          |          | _        || _        || _        d S r   )r   r   r   r  r2   )r9  r   r   r  r2   s        rE   r:  z_OpReply.__init__K  s-     
y))."r.   Nr   user_fieldsr   r=   list[bytes | memoryview]c                   | j         dz  r.|t          d          d|fz  }d|dd}t          |d|          | j         dz  r	t          j        | j                                                  }|                    d	d           |d
                             t          j
                  rt          |d
         |          |                    d          dk    r:d}t          |                    d
|          |                    d          |          t          d|                    d
          z  |                    d          |          | j        r| j        gS g S )a  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,   Nz"No cursor id for getMore operationzCursor not found, cursor id: %dr   +   )rf   rV   r^   r-   rf   z$errr^   2   zoperation exceeded time limitzdatabase error: %s)r   r    r   r  BSONr2   decode
setdefault
startswithr   LEGACY_ERRORr   ru   r   r   )r9  r   r  r   errobjerror_objectdefault_msgs          rE   raw_responsez_OpReply.raw_responseS  sz    :> 	 #$HIII 4ylBCb99F b&111Z!^ 	+/9T^+D+D+K+K+M+ML##D!,,,F#..{/GHH %l6&:LIII!!&))R//=& $$V[99<;K;KF;S;SUa   #$|'7'7'?'??  ((  
 > 	$N##	r.   Fcodec_optionsr   legacy_responser7  list[dict[str, Any]]c                    |                      |           |rt          j        | j        |          S t          j        | j        ||          S )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r9  r   r  r  r  s        rE   unpack_responsez_OpReply.unpack_response  sL    0 	)$$$ 	B?4>=AAA)$.-UUUr.   rT   c                X    |                      |          }| j        dk    sJ |d         S )Unpack a command response.r  r,   r   )r  r  )r9  r  r   s      rE   command_responsez_OpReply.command_response  s5    ##-#@@#q((((Awr.   r   c                    t           z)Return the bytes of the command response.)NotImplementedErrorr<  s    rE   raw_command_responsez_OpReply.raw_command_response  s
     "!r.   c                    dS )+Is the moreToCome bit set on this response?FrD   r<  s    rE   more_to_comez_OpReply.more_to_come  s	     ur.   r   c                f    |                      |          \  }}}}|dd         } | ||||          S )z%Construct an _OpReply from raw bytes.   N)UNPACK_FROM)clsr   r   r   r  r  r2   s          rE   unpackz_OpReply.unpack  sA     03s/C/C,y!_H	s5)_i@@@r.   )r   r>   r   r>   r  r>   r2   r  )NN)r   r   r  r   r=   r  
r   r   r  r   r  r   r  r7  r=   r  r  r   r=   rT   )r=   r   r=   r7  )r   r  r=   r  )rZ   rT  rU  rV  rW  structStructunpack_fromr!  OP_CODEr:  r  r<   r  r  r  rX  r  classmethodr#  rD   r.   rE   r  r  C  s       ..FI&-((4KG# # # # [_* * * * *\ $(+I37 %V V V V V:   " " " "
    X A A A [A A Ar.   r  c                      e Zd ZdZdZ ej        d          j        ZdZ	dZ
dZdZd"dZdi fd#dZdeddfd$dZd%dZd&dZed'd            Zed(d!            ZdS ))_OpMsgz"A MongoDB OP_MSG response message.)r   r   r  payload_documentz<IBir   r,   r-   i   r   r>   r.  r  c                "    || _         || _        d S r   )r   r.  )r9  r   r.  s      rE   r:  z_OpMsg.__init__  s    
 0r.   Nr   r   r  r   r=   r^  c                b    t          j        t          | j                  |t                    }|gS )zp
        cursor_id is ignored
        user_fields is used to determine which fields must not be decoded
        )r  _decode_selectiver   r.  r   )r9  r   r  inflated_responses       rE   r  z_OpMsg.raw_response  s5     !2D122KAX
 
 """r.   Fr  r   r  r7  r  c                @    |rJ t          j        | j        ||          S )a~  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        rE   r  z_OpMsg.unpack_response  s)    " #""")$*?P[\\\r.   rT   c                :    |                      |          d         S )r  r  r   )r  )r9  r  s     rE   r  z_OpMsg.command_response  s    ##-#@@CCr.   c                    | j         S r  )r.  r<  s    rE   r  z_OpMsg.raw_command_response  s    $$r.   c                :    t          | j        | j        z            S )r  )r7  r   MORE_TO_COMEr<  s    rE   r  z_OpMsg.more_to_come  s     DJ!22333r.   r   c                \   |                      |          \  }}}|dk    r:|| j        z  rt          d|d          || j        z  rt          d|d          |dk    rt          d|d          t	          |          |dz   k    rt          d          |dd         } | ||          S )	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    r7  rP   )r"  r   r   first_payload_typefirst_payload_sizer.  s         rE   r#  z_OpMsg.unpack  s     9<8L8L5!#5A::s++ ]#$[RW$[$[$[\\\s'' N#$L5$L$L$LMMM"" \FX \ \ \]]]s88)A--- FGGGqrr7s5*+++r.   )r   r>   r.  r  )r   r   r  r   r=   r^  r$  r%  )r=   r  r&  )r   r  r=   r-  )rZ   rT  rU  rV  rW  r'  r(  r)  r!  r*  r;  r7  EXHAUST_ALLOWEDr:  r  r<   r  r  r  rX  r  r+  r#  rD   r.   rE   r-  r-    s       ,,MI&-''3KG LO1 1 1 1 $(35# # # # #  $(+I37 %] ] ] ] ](D D D D% % % % 4 4 4 X4 , , , [, , ,r.   r-  zBdict[int, Callable[[bytes | memoryview], Union[_OpReply, _OpMsg]]]_UNPACK_REPLYc                  ^    e Zd ZdZdZdZdZd1dZd2d"Zd3d#Z	d4d&Z
d5d)Z	 d6d7d-Z	 d6d8d0ZdS )9_QueryzA query operation.)r   dbr   ntoskiprG   fieldsr  rI   r   r   r  r   r   r   clientr   _as_commandexhaustNr   r>   rB  rX   r   rC  rG   rb   rD  r   r  r   rI   r"   r   r   r   r&   r   r   r   rE  r*   r   r   rG  r7  c                   || _         || _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        || _        || _        d| _        d | _        || _        d S )Nr   )r   rB  r   rC  rG   rD  r  rI   r   r   r   r   r   rE  r   r  rF  rG  )r9  r   rB  r   rC  rG   rD  r  rI   r   r   r   r   r   rE  r   rG  s                    rE   r:  z_Query.__init__,  s    & 
		*.(
$",	AEr.   r=   rF  c                    d | _         d S r   rF  r<  s    rE   resetz_Query.resetR      r.   c                $    | j          d| j         S Nr  rB  r   r<  s    rE   rd  z_Query.namespaceU      '''DI'''r.   r   r)   c                    d}| j         sd}n=|j        dk    rd}n/| j        j        s#t	          d| j        j        |j        fz            |                    | j        | j                   |S )NFTrm   zDread concern level of %s is not valid with a max wire version of %d.)	rG  r   r   ok_for_legacyr   r   validate_sessionrE  r   )r9  r   use_find_cmds      rE   use_commandz_Query.use_commandX  s    | 		LL"a''LL"0 	$1484E4KTMb3cd  
 	dk4<888r.   r   rT   c                "    || j         f| _        d S r   rB  rF  r9  r   s     rE   update_commandz_Query.update_commandh      <r.   Fapply_timeouttuple[dict[str, Any], str]c                `   | j         | j         S d| j        v }t          | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j                  }|rd| _        d|i}|                    |           | j        rK| j                            |d| j        |           |s'| j        j        s| j                            ||           |                    || j        | j                   |r|                    | j        |           || j        f| _         | j         S )z.Return a find command document for this query.Nr   explainFr   )rF  rG   r   r   rD  rC  r   r   r   r   r   r   r   r  add_server_api	_apply_torI   r   _update_read_concernsend_cluster_timerE  r[  rB  )r9  r   r[  r^  r   s        rE   
as_commandz_Query.as_commandk  sD    '##	)/IIKLJOJNL
 
  	#!DIc"CC   < 	=L""3t/CTJJJ =4<#> =11#t<<<sDL$+>>> 	5t{444<r.   use_cmdr  c           
     <   || _         |j        r| j        dz  }n| j        }|                                 }| j        }|rI|                     |          d         }t          d|| j        || j        |j	                  \  }}}	}
|||	fS | j
        dk    rdp| j
        }| j        r|rt          | j        |          }n| j        }|j        r't          |t                    sJ t!          ||          }t#          ||| j        |||rdn| j        | j        |j	                  S )z:Get a query message, possibly setting the secondaryOk bit.r   r   r   r,   r-   N)rI   rM   r   rd  rG   rd  r  rB  r  r8  r   r   r   	is_mongos
isinstancer
   rQ   r  rC  rD  )r9  rI   r   re  r   r  rG   r   r   r   r  	ntoreturns               rE   get_messagez_Query.get_message  s]   
  / 	JNEEJE^^y 
	)??4((+D'.",( ( ($JT1 sD((
 Oq(.QA$/	: 	' '
I66		 J	> 	EdN33333-dODDDL,DD(	
 	
 	
 		
r.   ) r   r>   rB  rX   r   rX   rC  r>   rG   rb   rD  r   r  r   rI   r"   r   r>   r   r>   r   r&   r   r   r   r   rE  r*   r   r   rG  r7  r=   rF  r=   rX   r   r)   r=   r7  r   rT   r=   rF  r   r   r)   r[  r7  r=   r\  )rI   r"   r   r)   re  r7  r=   r  )rZ   rT  rU  rV  rW  conn_mgrr   r:  rK  rd  rU  rY  rd  rk  rD   r.   rE   rA  rA    s        I, HI$ $ $ $L       ( ( ( (    ( ( ( ( @E%  %  %  %  % P X]2
 2
 2
 2
 2
 2
 2
r.   rA  c                  Z    e Zd ZdZdZdZd-dZd.dZd/dZd0d Z	d1d#Z
	 d2d3d'Z	 d2d4d+Zd,S )5_GetMorezA getmore operation.)rB  r   rj  r   r   r  rI   r   rE  rq  rF  rG  r   r   rB  rX   r   rj  r>   r   r  r   rI   r"   r   r   rE  r*   r   r   rq  r   rG  r7  r   c                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d | _
        || _        || _        d S r   )rB  r   rj  r   r  rI   r   rE  r   rq  rF  rG  r   )r9  rB  r   rj  r   r  rI   r   rE  r   rq  rG  r   s                rE   r:  z_GetMore.__init__  sg     	""*.!2 AEr.   r=   rF  c                    d | _         d S r   rJ  r<  s    rE   rK  z_GetMore.reset  rL  r.   c                $    | j          d| j         S rN  rO  r<  s    rE   rd  z_GetMore.namespace  rP  r.   r   r)   c                x    d}| j         sd}n|j        dk    rd}|                    | j        | j                   |S )NFTrm   )rG  r   rS  rE  r   )r9  r   re  s      rE   rU  z_GetMore.use_command  sJ    | 	GG"a''Gdk4<888r.   r   rT   c                "    || j         f| _        d S r   rW  rX  s     rE   rY  z_GetMore.update_command
  rZ  r.   Fr[  r\  c                   | j         | j         S t          | j        | j        | j        | j        | j        |          }| j        r"| j                            |d| j	        |           |
                    |           |                    || j        | j                   |r|                    | j        d           || j        f| _         | j         S )z1Return a getMore command document for this query.NFr_  )rF  r   r   r   rj  r   r   r   ra  rI   r`  rc  rE  r[  rB  )r9  r   r[  r   s       rE   rd  z_GetMore.as_command  s    
 '##3NIN"L
 
 < 	KL""3t/CTJJJC   sDL$+>>> 	6t{555<r.   dummy0re  0Union[tuple[int, bytes, int], tuple[int, bytes]]c                @   |                                  }|j        }|rf|                     |          d         }| j        r| j        rt
          j        }nd}t          ||| j        d| j	        |j                  \  }}	}
}||	|
fS t          || j        | j        |          S )zGet a getmore message.r   Nrg  )rd  r8  rd  rq  rG  r-  r>  r  rB  r  r%  rj  r   )r9  rz  r   re  r  r   rG   r   r   r   r   r  s               rE   rk  z_GetMore.get_message'  s     ^^& 		)??4((+D}  .'.tTWdD,>DD\( ( ($JT1 sD((T^T^SAAAr.   N)rB  rX   r   rX   rj  r>   r   r>   r  r   rI   r"   r   r   rE  r*   r   r   rq  r   rG  r7  r   r   rl  rm  rn  ro  r   rp  )rz  r   r   r)   re  r7  r=   r{  )rZ   rT  rU  rV  rW  r  r:  rK  rd  rU  rY  rd  rk  rD   r.   rE   rs  rs    s        I  D   :       ( ( ( (	 	 	 	( ( ( ( @E         6 GLB B B B B B Br.   rs  c                        e Zd Zd fdZ xZS )_RawBatchQueryr   r)   r=   r7  c                v    t                                          |           |j        dk    rdS | j        sdS dS Nrm   TFr]  rU  r   rG  r9  r   rY   s     rE   rU  z_RawBatchQuery.use_command=  B    D!!! A%%4 	4ur.   rn  rZ   rT  rU  rU  rl  rm  s   @rE   r~  r~  <  =                 r.   r~  c                        e Zd Zd fdZ xZS )_RawBatchGetMorer   r)   r=   r7  c                v    t                                          |           |j        dk    rdS | j        sdS dS r  r  r  s     rE   rU  z_RawBatchGetMore.use_commandI  r  r.   rn  r  rm  s   @rE   r  r  H  r  r.   r  c                  V    e Zd ZU dZded<   dd	Zedd
            ZddZddZ	ddZ
dS )_CursorAddresszEThe server address (host, port) of a cursor, with namespace property.r   _CursorAddress__namespacerJ  r'   rd  rX   r=   c                J    t                               | |          }||_        |S r   )tuple__new__r  )r"  rJ  rd  r9  s       rE   r  z_CursorAddress.__new__Y  s"    }}S'**$r.   c                    | j         S )zThe namespace this cursor.)r  r<  s    rE   rd  z_CursorAddress.namespace^  s     r.   r>   c                >    g | | j         R                                 S r   )r  __hash__r<  s    rE   r  z_CursorAddress.__hash__c  s&     *$)())33555r.   otherobjectr7  c                    t          |t                    r0t          |           t          |          k    o| j        |j        k    S t          S r   )ri  r  r  rd  NotImplementedr9  r  s     rE   __eq__z_CursorAddress.__eq__h  s@    e^,, 	U;;%,,.T4>U_3TTr.   c                    | |k     S r   rD   r  s     rE   __ne__z_CursorAddress.__ne__m  s    5=  r.   N)rJ  r'   rd  rX   r=   r  rm  rS  )r  r  r=   r7  )rZ   rT  rU  rV  __annotations__r  rX  rd  r  r  r  rD   r.   rE   r  r  T  s         OO   
       X 6 6 6 6
   
! ! ! ! ! !r.   r  .rS  )rG   rH   rI   r"   r=   rH   )rR   rS   r=   rT   )r`   rX   ra   rb   rc   rb   r=   rT   )NNN)r   rX   rG   rb   r   r   r   r>   r   r>   r   r   r   r   r   r&   r   r   r   r   r   r   r=   rT   )r   r   r   rX   r   r   r   r   r   r   r   r)   r=   rT   )r`   r>   r   r   r   r   r=   r   )r`   r>   r   r   r=   r   )r   r>   ra   rb   r   rX   r   r   r   r   r=   r   )r   r>   ra   rb   r   rX   r   r   r   r   r   r   r=   r   )r   r>   ra   rb   r   rX   r   r   r   r   r=   r   r   )r   r>   ra   rH   r   rX   rI   r   r   r   r   r   r=   r   )r   r>   r  rX   r  r>   r  r>   r	  rb   r
  r   r   r   r=   r  )r   r>   r  rX   r  r>   r  r>   r	  rb   r
  r   r   r   r   r   r=   r  )r   r>   r  rX   r  r>   r  r>   r	  rb   r
  r   r   r   r=   r  )r   r>   r  rX   r  r>   r  r>   r	  rb   r
  r   r   r   r   r   r=   r  )r  rX   r  r>   r   r>   r=   r   )
r  rX   r  r>   r   r>   r   r   r=   r   )r  rX   r  r>   r   r>   r=   r   )
r  rX   r  r>   r   r>   r   r   r=   r   )r`   rX   ry  r>   rz  r>   r=   r   )r`   r>   ra   rb   r   r^  r}  r7  r   r   r   rZ  r~  r  r=   r  )r`   r>   ra   rb   r   r^  r}  r7  r   r   r   rZ  r=   r  )r`   r>   ra   rb   r   r^  r}  r7  r   r   r   rZ  r=   r  )rd  rX   r`   r>   ra   rH   r   r^  r   r   r   rZ  r=   r  )r  r   r  r  r  r  r}  r7  r~  r  r=   r>   )ra   rb   r  r  r  r  r}  r7  r   r   r   r  r~  r  r=   r  )ra   rb   r  r  r  r  r}  r7  r   r   r   r  r=   r  )ra   rb   r  r  r  r  r}  r7  r   r   r   r  r=   r  )ra   rH   r  r  r  r  r   r   r   r  r=   r  )rd  rX   r`   r>   ra   rH   r   r^  r   r   r   rZ  r=   r  )rd  rX   r`   r>   ra   rH   r   r^  r   r   r   rZ  r~  r  r=   r  )rV  
__future__r   r5  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+   rC   rB   r  _INSERT_UPDATE_DELETE_EMPTYr  r  r  r  r  r  r  r  r<   r  rF   rQ   r\   r_   ry   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%  r  r'  rZ  ro  r|  rx  r  r  r  r  rc  r  r  r  r  r  r  r  r  rs  r  r  r-  r*  r#  r?  rA  rs  r~  r  r  r  rD   r.   rE   <module>r     s)
     # " " " " "    " " " " " "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  < < < < < < < < < <                  & % % % % % . . . . . .!!!!!!FF   FFF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 A @ @ @ @ @ @ @ 	SSSSSSSSSS000000              		  


	
..1// 	 
 CO,!*C C C     
0 0 0 0
   $O O O O
   ! ! ! !J   #" 
2 .204%)4 4 4 4 4n   & )6=449  + + + +& v}W%%*    FM$$	'&-..3 V]4  %
4 4 4 4@/ / / /
= 
= 
= 
= 
 -$, AE' ' ' ' '@   ># # # #$# # # #" 
 3#2 AE    (  &-%%*	 	 	 	[ [ [ [[ [ [ [ 
 9&8 AE		M 	M 	M 	M 	M  ^^[
 [
 [
 [
 [
 [
 [
 [
|4 4 4 4 4- 4 4 4n# # # # #!2 # # #0L L L L&  A A A AH# # # #" 
 >&=$ $ $ $$/ / / /8 
 0/OE E E E*: : : : :3 : : :z  - - - -`s+ s+ s+ s+l3 3 3 3&4 4 4 4(? ? ? ?<S S S S.# # # # 
 L$-$K!J J J JZpA pA pA pA pA pA pA pAfQ, Q, Q, Q, Q, Q, Q, Q,j ho
NFMU    t
 t
 t
 t
 t
 t
 t
 t
nrB rB rB rB rB rB rB rBj	 	 	 	 	V 	 	 		 	 	 	 	x 	 	 	! ! ! ! !U38_ ! ! ! ! !s   A( (A21A2