
    FCf9                     	   U d Z ddlmZ ddl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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
Z#ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 er<ddlm:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddl6mIZI ddlJmKZKmLZL dZMdZNdZOdZPdZQdZRd ZSd!ZTd"ZUd#ZVd$ZWd%ZXd&ZYePd'eQd(eRd)iZZd*d+d,d-Z[ ed./      Z\d0e]d1<   d~d2Z^	 	 	 	 	 	 dd3Z_dd4Z`	 	 	 	 	 	 	 	 dd5Zadd6d7d8d9d:Zbd;d<d=d>d?d@dAdBdCdDdDdEdFZc	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddGZd	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddHZe G dI dJ      Zf G dK dL      Zg G dM dNef      Zh G dO dPeg      Zi G dQ dRej      Zk ej                  dS      j                  ZndTZo	 	 	 	 	 	 	 	 ddUZp ej                  dV      j                  ZqddWZr ej                  dX      j                  Zs ej                  dY      j                  Zt ej                  dZ      j                  Zu	 	 	 	 	 	 	 	 	 	 	 	 dd[Zv	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd\Zw	 	 	 	 	 	 	 	 	 	 	 	 dd]Zxe#re"j                  Zx	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd^Zy	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd_Zz	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd`Z{	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddaZ|e#re"j                  Z|	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddbZ~ ej                  dc      j                  ZdddZ	 	 	 	 	 	 	 	 	 	 ddeZ	 	 	 	 	 	 	 	 ddfZe#re"j                  Z	 d	 	 	 	 	 	 	 	 	 ddgZ G dh di      ZdjZ G dk dle      ZddmZePdneQdoeRdpiZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddqZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddrZe#re"j                  Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddsZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddtZe#re"j                  Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dduZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddvZe#re"j                  Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddwZ G dx dy      Z G dz d{      Zej&                  ej(                  ej&                  ej(                  iZd|e]d}<   y# e$$ r dZ#Y w xY w)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_decode_selective_dict_to_bson_make_c_stringencode)Int64)_RAW_ARRAY_BSON_OPTIONSDEFAULT_RAW_BSON_OPTIONSRawBSONDocument_inflate_bson)	_cmessageTF)ConfigurationErrorCursorNotFoundDocumentTooLargeExecutionTimeoutInvalidOperationNotPrimaryErrorOperationFailureProtocolError)HelloCompat)_handle_reauth)_COMMAND_LOGGER_CommandStatusMessage
_debug_log)ReadPreference)WriteConcern)	timedelta)ClientSession)SnappyContextZlibContextZstdContext)MongoClient)_EventListeners)
Connection)ReadConcern)_ServerMode)_Address_DocumentOutii   i?                   s            s           s       s   documents     s   updates     s   deletes     	documentsupdatesdeletes)insertupdatedeletereplace)unicode_decode_error_handlerzCodecOptions[Mapping[str, Any]]_UNICODE_REPLACE_CODEC_OPTIONSc                 >    t        j                  t        t              S )z(Generate a pseudo random 32 bit integer.)randomrandint	MIN_INT32	MAX_INT32 r6   O/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/pymongo/message.py_randintrJ   r   s    >>)Y//r6   c                    |j                   }|j                  }|r8|t        j                  j                   k7  st	        |      dkD  rd| vrd| i} || d<   | S )z-Add $readPreference to spec when appropriate.r4   $query$readPreference)modedocumentr&   SECONDARY_PREFERREDlen)specread_preferencerN   rO   s       rI   _maybe_add_read_preferencerT   w   s`     D''H ;;@@@CMTUDU4d#D"*Kr6   c                F    t        |       | j                  j                  dS )z<Convert an Exception into a failure document for publishing.)errmsgerrtype)str	__class____name__)	exceptions    rI   _convert_exceptionr\      s    )n1D1D1M1MNNr6   c                   |j                  dd      }d|d}|j                  d|j                  dd            }|rG|j                  d      r|d	dd
id|d<   n*d|j                  dd      |d}d|v r|d   |d<   |g|d<   |S | dk(  rt        |d         |d<   |S | dk(  rbd|v rd|d   dg|d<   |S |j                  d      du r=|dk(  r8|d   d   }|d   j                  d|d   j                  d            }d|dg|d<   |S )z6Convert a legacy write result to write command format.nr   r4   )okr^   rV   err wtimeout@   T)rV   codeerrInfowriteConcernErrorrd      )indexrd   rV   re   writeErrorsr=   r:   r>   upserted)rh   _idupdatedExistingFr;   urk   q)getrQ   )		operationcommandresultaffectedresrV   errorr>   rk   s	            rI   _convert_write_resultrv      sU   
 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Jr6   rg             )tailableoplogReplaynoCursorTimeout	awaitDataallowPartialResultsfiltersorthintcommentmaxScan	maxTimeMSmaxmin	returnKeyshowRecordIdsnapshot)rL   z$orderbyz$hintz$commentz$maxScanz
$maxTimeMSz$maxz$minz
$returnKeyz$showRecordIdz$showDiskLocz	$snapshotc                h   d| i}d|v rr|j                  |j                         D cg c]  \  }}|t        v rt        |   |fn||f c}}       d|v r|j                  d       d|v r|j                  d       n||d<   |r||d<   |r||d<   |rt	        |      |d<   |d	k  rd
|d<   |r||d<   |j
                  r|	r|	j                  s|j                  |d<   |r||d<   |
|
|d<   |r>|j                  t        j                         D cg c]  \  }}||z  s|d
f c}}       |S c c}}w c c}}w )z!Generate a find command document.findrL   $explainrM   r   
projectionskiplimitr   TsingleBatch	batchSizereadConcern	collationallowDiskUse)	r>   items
_MODIFIERSpopabslevelin_transactionrO   _OPTIONS)collrR   r   r   r   
batch_sizeoptionsread_concernr   sessionallow_disk_usecmdkeyvalopts                  rI   _gen_find_commandr      sV    "4.C4

 !%

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

0@RHCGcMS$KRSJ?: Ss   !D(

D.
D.
c                X    | |d}|r||d<   |||d<   ||j                   dk\  r||d<   |S )z$Generate a getMore command document.)getMore
collectionr   r   	   r   )max_wire_version)	cursor_idr   r   max_await_time_msr   connr   s          rI   _gen_get_more_commandr      sL     '0tDC%K$,Kt449 IJr6   c                      e Zd ZdZdZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZddZddZ	ddZ
	 d	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 dd	Zy)_QueryzA query operation.)flagsdbr   ntoskiprR   fieldscodec_optionsrS   r   r   namer   r   r   clientr   _as_commandexhaustNc                    || _         || _        || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        || _        || _        || _        d| _        d | _        || _        y )Nr   )r   r   r   r   rR   r   r   rS   r   r   r   r   r   r   r   r   r   r   )selfr   r   r   r   rR   r   r   rS   r   r   r   r   r   r   r   r   s                    rI   __init__z_Query.__init__-  s    & 
		*.(
$",	AEr6   c                    d | _         y Nr   r   s    rI   resetz_Query.resetS  
    r6   c                8    | j                    d| j                   S N.r   r   r   s    rI   	namespacez_Query.namespaceV      ''!DII;''r6   c                    d}| j                   sd}nV|j                  dk\  rd}nD| j                  j                  s.t	        d| j                  j
                  |j                  fz        |j                  | j                  | j                         |S )NFTrg   zDread concern level of %s is not valid with a max wire version of %d.)	r   r   r   ok_for_legacyr   r   validate_sessionr   r   )r   r   use_find_cmds      rI   use_commandz_Query.use_commandY  s    ||L""a'L""00$1484E4E4K4KTMbMb3cd 
 	dkk4<<8r6   c                   | j                   | j                   S d| j                  v }t        | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                        }|rd| _        d|i}| j                  }|j                  |       |r>|j                  |d| j                   |       |s|j"                  s|j%                  ||       |j'                  ||| j(                         | j(                  }|j*                  rG|j*                  j,                  s1|j*                  j/                  | j0                  || j2                        }|r|j5                  ||       || j0                  f| _         | j                   S )z.Return a find command document for this query.r   explainF)r   rR   r   r   r   r   r   r   r   r   r   r   r   r   add_server_api	_apply_torS   r   _update_read_concernsend_cluster_timer   
_encrypter_bypass_auto_encryptionencryptr   r   apply_timeout)r   r   r   r   r   r   r   s          rI   
as_commandz_Query.as_commandi  ss    '###		)/IIIIKKLLJJOOJJNNLL
 !DIc"C,,C c5$*>*>E7#9#9,,S$7sGT[[9V%6%6%N%N##++DGGS$:L:LMCvs+<r6   c           
        || _         |j                  r| j                  dz  }n| j                  }| j                         }| j                  }|rO| j                  |d      d   }t        d|| j                  || j                  |j                        \  }}}	}
|||	fS | j                  dk(  xr dxs | 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.   Tr   r   ctxr4   r5   N)rS   rN   r   r   rR   r   _op_msgr   r   compression_contextr   r   r   	is_mongos
isinstancer
   rT   _queryr   r   )r   rS   r   use_cmdr   nsrR   
request_idmsgsize_	ntoreturns               rI   get_messagez_Query.get_message  s?   
  /JJNEJJE^^yy??4t?<Q?D'."",,($JT1 sD((
 OOq(.QA$//	::

I6	 JJ	>>dN333-dODDLLD((	
 		
r6   ) r   intr   rX   r   rX   r   r   rR   Mapping[str, Any]r   Optional[Mapping[str, Any]]r   r   rS   r1   r   r   r   r   r   r0   r   r   r   Optional[ClientSession]r   r-   r   Optional[bool]r   boolreturnNoner   rX   r   r/   r   r   Fr   r/   r   r   r   ztuple[dict[str, Any], str])rS   r1   r   r/   r   r   r   tuple[int, bytes, int])rZ   
__module____qualname____doc__	__slots__conn_mgrr   r   r   r   r   r   r   rH   r6   rI   r   r     s   I, HI$$ $ 	$
 $  $ ,$ $$ %$ $ $ "$ /$ )$ $  '!$" #$L (" 7<* * /3* 	#* Z OT2
*2
2<2
GK2
	2
r6   r   c                      e Zd ZdZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZ		 d	 	 	 	 	 ddZ
	 d	 	 	 	 	 	 	 dd	Zy
)_GetMorezA getmore operation.)r   r   r   r   r   r   rS   r   r   r   r   r   r   r   c                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d | _
        || _        || _        y r   )r   r   r   r   r   rS   r   r   r   r   r   r   r   )r   r   r   r   r   r   rS   r   r   r   r   r   r   s                rI   r   z_GetMore.__init__  sc     	""*.!2 AEr6   c                    d | _         y r   r   r   s    rI   r   z_GetMore.reset  r   r6   c                8    | j                    d| j                   S r   r   r   s    rI   r   z_GetMore.namespace  r   r6   c                    d}| j                   sd}n|j                  dk\  rd}|j                  | j                  | j                         |S )NFTrg   )r   r   r   r   r   )r   r   r   s      rI   r   z_GetMore.use_command  sC    ||G""a'Gdkk4<<8r6   c                   | j                   | j                   S t        | j                  | j                  | j                  | j
                  | j                  |      }| j                  r(| j                  j                  |d| j                  |       |j                  |       |j                  || j                  | j                         | j                  }|j                  rG|j                  j                  s1|j                  j                  | j                   || j"                        }|r|j%                  |d       || j                   f| _         | j                   S )z1Return a getMore command document for this query.NF)r   )r   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   s        rI   r   z_GetMore.as_command  s   
 '###3NNIINN""LL
 <<LL""3t/C/CTJC sDLL$++>V%6%6%N%N##++DGGS$:L:LMCv40<r6   c                v   | j                         }|j                  }|rz| j                  |d      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.Tr   r   Nr   )r   r   r   r   r   _OpMsgEXHAUST_ALLOWEDr   r   r   	_get_morer   r   )r   dummy0r   r   r   r   rR   r   r   r   r   r   s               rI   r   z_GetMore.get_message+  s     ^^&&??4t?<Q?D}}..'.tTWWdD,>,>DD\D\($JT1 sD((T^^T^^SAAr6   N)r   rX   r   rX   r   r   r   r   r   r   rS   r1   r   r   r   r-   r   Optional[int]r   r   r   r   r   r   r   r   r   r   r   )r
  r   r   r/   r   r   r   z0Union[tuple[int, bytes, int], tuple[int, bytes]])rZ   r   r   r   r   r   r   r   r   r   r   r   rH   r6   rI   r   r     s    I  D  	
  $ % )  )   : (	 7<  /3 	# > >CBB!+B6:B	9Br6   r   c                        e Zd Zd fdZ xZS )_RawBatchQueryc                ^    t         |   |       |j                  dk\  ry| j                  syyNrg   TFsuperr   r   r   r   r   rY   s     rI   r   z_RawBatchQuery.use_commandA  .    D!  A%r6   r   rZ   r   r   r   __classcell__rY   s   @rI   r  r  @       r6   r  c                        e Zd Zd fdZ xZS )_RawBatchGetMorec                ^    t         |   |       |j                  dk\  ry| j                  syyr  r  r  s     rI   r   z_RawBatchGetMore.use_commandM  r  r6   r   r  r  s   @rI   r  r  L  r  r6   r  c                  N    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
y	)_CursorAddresszEThe server address (host, port) of a cursor, with namespace property.r   _CursorAddress__namespacec                @    t         j                  | |      }||_        |S r   )tuple__new__r  )clsaddressr   r   s       rI   r   z_CursorAddress.__new__]  s    }}S'*$r6   c                    | j                   S )zThe namespace this cursor.)r  r   s    rI   r   z_CursorAddress.namespaceb  s     r6   c                @    g | | j                   j                         S r   )r  __hash__r   s    rI   r%  z_CursorAddress.__hash__g  s#     *$)(()3355r6   c                    t        |t              r2t        |       t        |      k(  xr | j                  |j                  k(  S t        S r   )r   r  r  r   NotImplementedr   others     rI   __eq__z_CursorAddress.__eq__l  s7    e^,;%,.T4>>U__3TTr6   c                    | |k(   S r   rH   r(  s     rI   __ne__z_CursorAddress.__ne__q  s    5=  r6   N)r"  r2   r   rX   r   r  r   r   r   )r)  objectr   r   )rZ   r   r   r   __annotations__r   propertyr   r%  r*  r,  rH   r6   rI   r  r  X  s3    O
    6

!r6   r  z<iiiiiiB   c           
         |j                  |      }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  )compressrJ   _pack_compression_header_COMPRESSION_HEADER_SIZErQ   compressor_id)rp   datar   
compressedr   headers         rI   	_compressr:  y  s]     d#JJ% 3z?2	D	F v
***r6   z<iiiic                X    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.
    rw   r   )rJ   _pack_headerrQ   )rp   r7  ridmessages       rI   __pack_messager?    s2    
 *C2D	>39=G$r6   z<iz<IBz<Bc                   t        |d|      }t        | d      }t        |      }d}|r|}t        d      }	t	        |      }
|D cg c]  }t        |d|       }}t        |
      t        d |D              z   dz   }t        |      }||z  }t        d |D              }|||	||
g|}n||g}dj                  |      ||fS c c}w )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   r4   c              3  2   K   | ]  }t        |        y wr   rQ   .0docs     rI   	<genexpr>z$_op_msg_no_header.<locals>.<genexpr>  s     !Cs#c(!C   r   c              3  2   K   | ]  }t        |        y wr   rB  rC  s     rI   rF  z$_op_msg_no_header.<locals>.<genexpr>  s     <3s8<rG  r6   )	r   _pack_op_msg_flags_typerQ   
_pack_byter   sum	_pack_intr   join)r   rq   
identifierdocsoptsencoded
flags_type
total_sizemax_doc_sizetype_onecstringrE  encoded_docsr   encoded_sizer7  s                   rI   _op_msg_no_headerrY    s     GUD1G(2JWJLd&a= ,CGHCc5$7HH7|c!Cl!CCCaG d
<|<<GX|WT|TG$88D>:|33 Is   C c                T    t        | ||||      \  }}}t        d||      \  }	}|	|||fS )zInternal OP_MSG message helper.  )rY  r:  )
r   rq   rN  rO  rP  r   r   rS  max_bson_sizer=  s
             rI   _op_msg_compressedr]    s@     &7ugzSWY]%^"C]sC(HCZ..r6   c                R    t        | ||||      \  }}}t        d|      \  }}	||	||fS )z*Internal compressed OP_MSG message helper.r[  )rY  r?  )
r   rq   rN  rO  rP  r7  rS  r\  r   
op_messages
             rI   _op_msg_uncompressedr`    s?     '8w
TXZ^&_#D*m+D$7J
z:}<<r6   c                P   ||d<   |d|vr|j                   r|j                  |d<   t        t        |            }	 t        |   }|j                  |      }	 |rt        | |||||      |r|||<   S S t        | ||||      |r|||<   S S # t        $ r d}d}Y Aw xY w# |r|||<   w w xY w)zGet a OP_MSG message.$dbNrM   ra   )	rN   rO   nextiter
_FIELD_MAPr   KeyErrorr]  r`  )	r   rq   dbnamerS   rP  r   r   rN  rO  s	            rI   r   r     s     GEN"'8'G)8)A)AG%&WD%
{{:&'%eWj$cR "&GJ  $E7JdK "&GJ   
 "&GJ s#   B B 1B BB
B%c                    t        |d|      }|rt        |d|      }nd}t        t        |      t        |            }	dj                  t	        |       t        |      t	        |      t	        |      ||g      |	fS )zGet an OP_QUERY message.Fr6   )r   r   rQ   rM  rL  r   )
r   collection_namenum_to_skipnum_to_returnqueryfield_selectorrP  rQ  efsr\  s
             rI   _query_implro    s     E5$/GNE48Gc#h/M'"/+&-(		
 	 r6   c           	     T    t        | ||||||      \  }}	t        d||      \  }
}|
||	fS )z)Internal compressed query message helper.  )ro  r:  )r   ri  rj  rk  rl  rm  rP  r   op_queryr\  r=  r   s               rI   _query_compressedrs    sD     *+}e^UYHm x-HC]""r6   c           	     R    t        | ||||||      \  }}t        d|      \  }	}
|	|
|fS )zInternal query message helper.rq  )ro  r?  )r   ri  rj  rk  rl  rm  rP  rr  r\  r=  r   s              rI   _query_uncompressedru  .  sB     *+}e^UYHm dH-HC]""r6   c           
     L    |rt        | |||||||      S t        | ||||||      S )zGet a **query** message.)rs  ru  )r   ri  rj  rk  rl  rm  rP  r   s           rI   r   r   C  sF      _k=%Y]_b
 	
 +}e^UY r6   z<qc                j    dj                  t        t        |       t        |      t	        |      g      S )zGet an OP_GET_MORE message.r6   )rM  _ZERO_32r   rL  _pack_long_longri  rk  r   s      rI   _get_more_implr{  Z  s3    88?+m$I&		
 r6   c                2    t        dt        | ||      |      S )z+Internal compressed getMore message helper.  )r:  r{  ri  rk  r   r   s       rI   _get_more_compressedr  f  s     T>/=)TVYZZr6   c                0    t        dt        | ||            S )z Internal getMore message helper.r}  )r?  r{  rz  s      rI   _get_more_uncompressedr  p  s     $y YZZr6   c                <    |rt        | |||      S t        | ||      S )zGet a **getMore** message.)r  r  r~  s       rI   r	  r	  {  s'     #O]IsSS!/=)LLr6   c                  >   e Zd ZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZe	dd       Z
e	dd       Ze	dd	       Ze	dd
       Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZe	 	 	 	 	 	 	 	 	 	 	 	 dd       Z	 	 	 	 	 	 	 	 ddZddZddZy)_BulkWriteContextzCA wrapper around Connection for use with write splitting functions.)db_namer   op_idr   fieldpublish
start_time	listenersr   r3  op_typecodecc	                @   || _         || _        || _        || _        |j                  | _        || _        t        | j                     | _        t        j                  j                         | _        || _        t        |j                        | _        || _        || _        y r   )r  r   r  r  enabled_for_commandsr  r   re  r  datetimenowr  r   r   r   r3  r  r  )	r   database_namecmd_namer   operation_idr  r   r  r  s	            rI   r   z_BulkWriteContext.__init__  s     %	!
" 55			*
"++//1T556
r6   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   )r   r   rO  r   r   r   to_sends          rI   __batch_commandz!_BulkWriteContext.__batch_command  sV     LL7*	#5t||S$

D$
 
C "#BCC3''r6   c                    | j                  ||      \  }}}| j                  |||||      }|j                  || j                         ||fS r   ) _BulkWriteContext__batch_commandwrite_command_process_responser   )r   r   rO  r   r   r   r  rr   s           rI   executez_BulkWriteContext.execute  sS     $(#7#7T#B 
C##CS'6J  6wr6   c                ^    | j                  ||      \  }}}| j                  |||d||       |S )Nr   )r  unack_write)r   r   rO  r   r   r   r  s          rI   execute_unackz_BulkWriteContext.execute_unack  s<     $(#7#7T#B 
C 	j#q'6Br6   c                .    | j                   j                  S )z#A proxy for SockInfo.max_bson_size.)r   r\  r   s    rI   r\  z_BulkWriteContext.max_bson_size  s     yy&&&r6   c                x    | j                   r| j                  j                  dz
  S | j                  j                  S )z&A proxy for SockInfo.max_message_size.rw   )r3  r   max_message_sizer   s    rI   r  z"_BulkWriteContext.max_message_size  s0     ==99--22yy)))r6   c                .    | j                   j                  S )z*A proxy for SockInfo.max_write_batch_size.)r   max_write_batch_sizer   s    rI   r  z&_BulkWriteContext.max_write_batch_size  s     yy---r6   c                    | j                   S )z:The maximum size of a BSON command before batch splitting.)r\  r   s    rI   max_split_sizez _BulkWriteContext.max_split_size  s     !!!r6   c                   t        j                  t        j                        rt	        t         |j
                  j                  t        j                  |t        t        |            | j                  ||| j                  j                  | j                  j                  | j                  j                  d   | j                  j                  d   | j                  j                          | j"                  r| j%                  |||      }	 | j                  j'                  ||      }t(        j(                  j+                         | j,                  z
  }|t/        | j0                  ||      }	nddi}	t        j                  t        j                        rt	        t         |j
                  j                  t        j2                  ||	t        t        |            | j                  ||| j                  j                  | j                  j                  | j                  j                  d   | j                  j                  d   | j                  j                          | j"                  r| j5                  ||	|       t(        j(                  j+                         | _        |S # t6        $ r}
t(        j(                  j+                         | j,                  z
  }t9        |
t:              r"t/        | j0                  ||
j<                        }n(t9        |
t>              r|
j<                  }ntA        |
      }t        j                  t        j                        rt	        t         |j
                  j                  t        jB                  ||t        t        |            | j                  ||| j                  j                  | j                  j                  | j                  j                  d   | j                  j                  d   | j                  j                   t9        |
t:                     | j"                  r!| j,                  J | jE                  |||        d}
~
ww xY w# t(        j(                  j+                         | _        w xY w)zAA proxy for Connection.unack_write that handles event publishing.r   r4   clientIdr>  rq   commandNamedatabaseName	requestIdoperationIddriverConnectionIdserverConnectionId
serverHost
serverPort	serviceIdNr_   r  r>  
durationMSreplyr  r  r  r  r  r  r  r  r  r  r>  r  failurer  r  r  r  r  r  r  r  r  isServerSideError)#r#   isEnabledForloggingDEBUGr%   _topology_settings_topology_idr$   STARTEDrc  rd  r  r   idserver_connection_idr"  
service_idr  _startr  r  r  r  rv   r   	SUCCEEDED_succeed	Exceptionr   r   detailsr   r\   FAILED_fail)r   r   r   r   rT  rO  r   rr   durationr  excr  s               rI   r  z_BulkWriteContext.unack_write  s@    ''622??-55 cO!\\$&#'99<<#'99#A#A99,,Q/99,,Q/)).. <<++c:t4C:	6YY**3=F((,,.@H!-diifE q	"//>'!'!:!:!G!G 5 ? ?#+#$(cO%)\\",$.+/99<<+/99+I+I#'99#4#4Q#7#'99#4#4Q#7"&))"6"6  ||j%:@ '//335DOA  	((,,.@H#/0(=diickk(ZC1++,S1++GMM:##66CC188'# $T#Y!%( *'+yy||'+yy'E'E#yy003#yy003"ii22&06F&G" ||222

:w9;	> '//335DOs&   E,J 
Q#F*QQQ %Q:c                ~   ||| j                   <   t        j                  t        j                        rt        t        |j                  j                  t        j                  |t        t        |            | j                  ||| j                  j                  | j                  j                  | j                  j                   d   | j                  j                   d   | j                  j"                         | j$                  r| j'                  |||       	 | j                  j)                  ||| j*                        }t,        j,                  j/                         | j0                  z
  }t        j                  t        j                        rt        t        |j                  j                  t        j2                  ||t        t        |            | j                  ||| j                  j                  | j                  j                  | j                  j                   d   | j                  j                   d   | j                  j"                         | j$                  r| j5                  |||       t,        j,                  j/                         | _        |S # t6        $ ru}t,        j,                  j/                         | j0                  z
  }t9        |t:        t<        f      r|j>                  }	ntA        |      }	t        j                  t        j                        rt        t        |j                  j                  t        jB                  ||	t        t        |            | j                  ||| j                  j                  | j                  j                  | j                  j                   d   | j                  j                   d   | j                  j"                  t9        |t<                     | j$                  r| jE                  ||	|        d}~ww xY w# t,        j,                  j/                         | _        w xY w)zCA proxy for SocketInfo.write_command that handles event publishing.r   r4   r  r  r  N)#r  r#   r  r  r  r%   r  r  r$   r  rc  rd  r  r   r  r  r"  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r\   r  r  )
r   r   r   r   rO  r   r  r  r  r  s
             rI   r  z_BulkWriteContext.write_command@  s    DJJ''622??-55 cO!\\$&#'99<<#'99#A#A99,,Q/99,,Q/)).. <<KKZ.3	6II++JTZZHE((,,.@H++GMM:##66CC1;;' $T#Y!%( *'+yy||'+yy'E'E#yy003#yy003"ii22  ||j%:< '//335DO=  	((,,.@H#1ABC(+,S1++GMM:##66CC188'# $T#Y!%( *'+yy||'+yy'E'E#yy003#yy003"ii22&06F&G$ ||

:w97	: '//335DOs&   EJ 
PE0PPP %P<c           	        ||| j                   <   | j                  j                  || j                  || j                  j
                  | j                  j                  | j                  | j                  j                         |S )zPublish a CommandStartedEvent.)	r  r  publish_command_startr  r   r"  r  r  r  )r   r   r   rO  s       rI   r  z_BulkWriteContext._start  se     DJJ,,LLIIII**JJII  	
 
r6   c                    | j                   j                  ||| j                  || j                  j                  | j                  j
                  | j                  | j                  j                  | j                  	       y)z Publish a CommandSucceededEvent.r  N)	r  publish_command_successr   r   r"  r  r  r  r  )r   r   r  r  s       rI   r  z_BulkWriteContext._succeed  s^    ..IIIIII**JJII  ,, 	/ 
	
r6   c                    | j                   j                  ||| j                  || j                  j                  | j                  j
                  | j                  | j                  j                  | j                  	       y)zPublish a CommandFailedEvent.r  N)	r  publish_command_failurer   r   r"  r  r  r  r  )r   r   r  r  s       rI   r  z_BulkWriteContext._fail  s^    ..IIIIII**JJII  ,, 	/ 
	
r6   N)r  rX   r  rX   r   r/   r  r   r  r.   r   r)   r  r   r  r   )r   MutableMapping[str, Any]rO  list[Mapping[str, Any]]r   *tuple[int, bytes, list[Mapping[str, Any]]]r   r  rO  r  r   r-   r   z1tuple[Mapping[str, Any], list[Mapping[str, Any]]]r   r  rO  r  r   r-   r   r  r-  )r   r  r   r   r   bytesrT  r   rO  r  r   r-   r   r   )r   r  r   r   r   r  rO  r  r   r-   r   dict[str, Any])r   r  r   r   rO  r  r   r  )r   r   r  r3   r  r(   r   r   )r   r   r  r3   r  r(   r   r   )rZ   r   r   r   r   r   r  r  r  r0  r\  r  r  r  r  r"   r  r  r  r  rH   r6   rI   r  r    s   MI  	
  #   0	(+	(3J	(	3	(+3JT_	:
+
3J
T_
	 
 ' ' * * . . " "W%W W 	W
 W &W W 
%Wr P%P P 	P
 &P P 
P Pd+9<D[	! 

r6   r  i    c                  f    e Zd ZdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 d	dZed
d       Zy)_EncryptedBulkWriteContextrH   c                    | j                   dz   }t        || j                  ||| j                  |       \  }}|st	        d      |j                  dd      dz   }t        t        |      |d  t              }||fS )Nr  r  r8   r   r   )	r  _encode_batched_write_commandr  r  r   rh   r   
memoryviewr   )r   r   rO  r   r   r  	cmd_startoutgoings           rI   r  z*_EncryptedBulkWriteContext.__batch_command  s     LL7*	4t||S$

D
W "#BCC IIgq)A-	 C!<>VW  r6   c                    | j                  ||      \  }}| j                  j                  | j                  || j                  | j
                  |      }||fS )N)r   r   r   ))_EncryptedBulkWriteContext__batch_commandr   rq   r  r  r   )r   r   rO  r   batched_cmdr  rr   s          rI   r  z"_EncryptedBulkWriteContext.execute  sX      $33C>W$(II$5$5LL+TZZ^d %6 %
 wr6   c                    | j                  ||      \  }}| j                  j                  | j                  |t	        d      | j
                  |       |S )Nr   )w)write_concernr   r   )r  r   rq   r  r'   r   )r   r   rO  r   r  r  s         rI   r  z(_EncryptedBulkWriteContext.execute_unack  sU      $33C>W		LL&+LL 	 	
 r6   c                    t         S )z Reduce the batch splitting size.)_MAX_SPLIT_SIZE_ENCr   s    rI   r  z)_EncryptedBulkWriteContext.max_split_size  s
     #"r6   N)r   r  rO  r  r   z.tuple[dict[str, Any], list[Mapping[str, Any]]]r  r  r-  )	rZ   r   r   r   r  r  r  r0  r  rH   r6   rI   r  r    s    I!+!3J!	7!+3JT_	:+3JT_	  # #r6   r  c                H    | dk(  rt        d||fz        t        | d      )z-Internal helper for raising DocumentTooLarge.r=   zfBSON document too large (%d bytes) - the connected server supports BSON document sizes up to %d bytes.z command document too large)r   )rp   doc_sizemax_sizes      rI   _raise_document_too_larger    s@    H "8,-
 	
 ).IJKKr6   s
   documents s   updates s   deletes c                   |j                   }|j                  }|j                  }	|rdnd}
|j                  |
       |j                  d       |j                  t	        |d|             |j                  d       |j                         }|j                  d       	 |j                  t        |           g }d}|D ]  }t	        |d|      }t        |      }|j                         |z   }|dk(  xr ||	kD  }| xr ||kD  }|s|r6t        t        j                               |    }t        |t        |      |       ||	kD  r n0|j                  |       |j                  |       |d	z  }||k(  s n |j                         }|j                  |       |j                  t!        ||z
               ||fS # t        $ r t        d      dw xY w)
zCreate a batched OP_MSG write.r9   s      r8   F   Unknown commandNr   r4   )r\  r  r  writer   tell_OP_MSG_MAPrf  r   rQ   listre  keysr  appendseekrL  )rp   rq   rO  ackrP  r   bufr\  r  r  r   size_locationr  idxrE  value
doc_lengthnew_message_sizedoc_too_largeunacked_doc_too_largewrite_oplengths                         rI   _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   F1 1Gc           	     b    t               }t        | ||||||      \  }}|j                         |fS )zOEncode the next batched insert, update, or delete operation
    as OP_MSG.
    )_BytesIOr  getvalue)	rp   rq   rO  r  rP  r   r  r  r   s	            rI   _encode_batched_op_msgr  R  s7     *C%i$T3PSTJGQ<<>7""r6   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.
    r[  )r  r   r   r:  )
rp   rq   rO  r  rP  r   r7  r  r   r   s
             rI   _batched_op_msg_compressedr
  g  s\     +9gtS$PSTMD'88''333dCHH,H,HIOJsG##r6   c           	     p   t               }|j                  t               |j                  d       t        | ||||||      \  }}|j	                  d       t               }	|j                  t        |	             |j	                  d       |j                  t        |             |	|j                         |fS )z"OP_MSG implementation entry point.s         r   r   )r  r  _ZERO_64r  r  rJ   rL  r  )
rp   rq   rO  r  rP  r   r  r  r  r   s
             rI   _batched_op_msgr  y  s     *C IIhII12*9gtS$PSUXYOGV HHQKJIIi
#$HHQKIIi s||~w..r6   c                    | j                  dd      d   |d<   d|v rt        |d   j                  dd            }nd}|j                  j                  rt        ||||||      S t        ||||||      S )zRCreate the next batched insert, update, or delete operation
    using OP_MSG.
    r   r4   r   rb  writeConcernr  T)splitr   ro   r   r   r
  r  )r   rp   rq   rO  rP  r   r  s          rI   r  r    s}     __S!,Q/GEN 7>*..sA67
xx##))WdCsSS9gtS$DDr6   c           	     b    t               }t        | ||||||      \  }}|j                         |fS )z:Encode the next batched insert, update, or delete command.)r  _batched_write_command_implr  )	r   rp   rq   rO  rP  r   r  r  r   s	            rI   r  r    s9     *C,Y	7DRVX[]`aJGQ<<>7""r6   c                ~   |j                   }|j                  }|t        z   }	|j                  }
|j	                  t
               |j	                  | j                  d             |j	                  t               |j	                  t               |j                         }|j	                  t        |             |j                  dd       |j                          	 |j	                  t        |          |j                         dz
  }g }d}|D ]  }t        |      j                  d      }t!        |d|      }t#        |      |	kD  }|r6t%        t&        j)                               |   }t+        |t#        |      |       |d	k\  xr+ |j                         t#        |      z   t#        |      z   |
k\  }||k\  }|s|r ne|j	                  t,               |j	                  |       |j	                  t               |j	                  |       |j/                  |       |d	z  } |j	                  t0               |j                         }|j                  |       |j	                  t3        ||z
  d	z
               |j                  |       |j	                  t3        ||z
               ||fS # t        $ r t        d      dw xY w)
z(Create a batched OP_QUERY write command.utf8r5   r  Nr   r   Fr4   )r\  r  _COMMAND_OVERHEADr  r  rx  r   _ZERO_8_SKIPLIMr  r  truncate_OP_MAPrf  r   rX   r   rQ   r  re  r  r  _BSONOBJr  _ZERO_16rL  )r   rp   rq   rO  rP  r   r  r\  r  max_cmd_sizer  command_start
list_startr  r  rE  r   r  r   r  enough_dataenough_documentsr  s                          rI   r  r    sP    %%M33 !#44L''N IIhIIiv&'IIgIIh HHJMIIfWo 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6*		(		#		'		%sq'. IIh XXZFHHZIIi+a/01HH]IIi./0F?O  <01t;<s   J& &J<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y)_OpReplyz$A MongoDB OP_REPLY response message.)r   r   number_returnedr:   z<iqiir4   c                N    || _         t        |      | _        || _        || _        y r   )r   r   r   r$  r:   )r   r   r   r$  r:   s        rI   r   z_OpReply.__init__  s$    
y)."r6   Nc                   | j                   dz  r&|t        d      d|fz  }d|dd}t        |d|      | j                   dz  rt        j                  | j
                        j                         }|j                  dd       |d	   j                  t        j                        rt        |d	   |      |j                  d
      dk(  r.d}t        |j                  d	|      |j                  d
      |      t        d|j                  d	      z  |j                  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.
        r4   z"No cursor id for getMore operationzCursor not found, cursor id: %dr   +   )r_   rV   rd   r5   r_   z$errrd   2   zoperation exceeded time limitzdatabase error: %s)r   r    r   bsonBSONr:   decode
setdefault
startswithr!   LEGACY_ERRORr   ro   r   r   )r   r   user_fieldsr   errobjerror_objectdefault_msgs          rI   raw_responsez_OpReply.raw_response  s>    ::> #$HII 4ylBCb9F b&11ZZ!^!%4>>!:!A!A!CL##D!,F#..{/G/GH%l6&:LII!!&)R/=& $$V[9<;K;KF;SUa  #$|'7'7'??  ( 
 >>NN##	r6   Fc                    | j                  |       |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.
        )r3  r)  
decode_allr:   _decode_all_selectiver   r   r   r/  legacy_responses        rI   unpack_responsez_OpReply.unpack_responseK  sC    0 	)$??4>>=AA))$..-UUr6   c                R    | j                  |      }| j                  dk(  sJ |d   S )Unpack a command response.r   r4   r   )r9  r$  )r   r   rO  s      rI   command_responsez_OpReply.command_responseh  s2    ##-#@##q(((Awr6   c                    t         z)Return the bytes of the command response.)NotImplementedErrorr   s    rI   raw_command_responsez_OpReply.raw_command_responsen  s
     "!r6   c                     y)+Is the moreToCome bit set on this response?FrH   r   s    rI   more_to_comez_OpReply.more_to_comes  s     r6   c                N    | j                  |      \  }}}}|dd } | ||||      S )z%Construct an _OpReply from raw bytes.   N)UNPACK_FROM)r!  r   r   r   r   r$  r:   s          rI   unpackz_OpReply.unpackx  s7     03s/C,y!_H	5)_i@@r6   )r   r   r   r   r$  r   r:   r  )NN)r   r  r/  r   r   zlist[bytes]
r   r  r   r   r/  r   r8  r   r   zlist[dict[str, Any]]r   r   r   r  )r   r   r   r   )r   r  r   r#  )rZ   r   r   r   r   structStructunpack_fromrG  OP_CODEr   r3  rB   r9  r=  rA  r0  rD  classmethodrH  rH   r6   rI   r#  r#    s    .FI&--(44KG# [_*&*<W*	*\ $(&D37 %V V $V 1	V
 V 
V:"
   A Ar6   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y	)r  z"A MongoDB OP_MSG response message.)r   r   r$  payload_documentz<IBir[  r4   r5   i   c                     || _         || _        y r   )r   rR  )r   r   rR  s      rI   r   z_OpMsg.__init__  s    
 0r6   Nc                P    t        t        | j                        |t              }|gS )zp
        cursor_id is ignored
        user_fields is used to determine which fields must not be decoded
        )r   r   rR  r   )r   r   r/  inflated_responses       rI   r3  z_OpMsg.raw_response  s-     .D112KAX
 """r6   Fc                L    |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)  r6  rR  r7  s        rI   r9  z_OpMsg.unpack_response  s)    " #""))$*?*?P[\\r6   c                ,    | j                  |      d   S )r;  r<  r   )r9  )r   r   s     rI   r=  z_OpMsg.command_response  s    ##-#@CCr6   c                    | j                   S r?  )rR  r   s    rI   rA  z_OpMsg.raw_command_response  s    $$$r6   c                F    t        | j                  | j                  z        S )rC  )r   r   MORE_TO_COMEr   s    rI   rD  z_OpMsg.more_to_come  s     DJJ!2!2233r6   c                *   | j                  |      \  }}}|dk7  r<|| j                  z  rt        d|d      || j                  z  rt        d|d      |dk7  rt        d|d      t	        |      |dz   k7  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)rG  CHECKSUM_PRESENTr    rZ  rQ   )r!  r   r   first_payload_typefirst_payload_sizerR  s         rI   rH  z_OpMsg.unpack  s     9<8L5!#5A:s+++#&QRWXYQZ$[\\s'''#&B5)$LMM""EFXYZE[ \]]s8)A-- FGGqr75*++r6   )r   r   rR  r  )r   r  r/  r   r   r  rI  rJ  )r   r  rK  )r   r  r   r  )rZ   r   r   r   r   rL  rM  rN  rG  rO  r^  rZ  r  r   r3  rB   r9  r=  rA  r0  rD  rP  rH  rH   r6   rI   r  r    s    ,MI&--'33KG LO1 $(35# # 1# 
!	#  $(&D37 %] ] $] 1	]
 ] 
](D% 4 4 , ,r6   r  z5dict[int, Callable[[bytes], Union[_OpReply, _OpMsg]]]_UNPACK_REPLYr-  )rR   r  rS   r1   r   r  )r[   r  r   r  )rp   rX   rq   r   rr   r   r   r  )NNN)r   rX   rR   r   r   z1Optional[Union[Mapping[str, Any], Iterable[str]]]r   r   r   r   r   r  r   r  r   r0   r   r   r   r   r   r   r   r  )r   r  r   rX   r   r  r   r  r   zOptional[Any]r   r/   r   r  )rp   r   r7  r  r   .Union[SnappyContext, ZlibContext, ZstdContext]r   tuple[int, bytes])rp   r   r7  r  r   rc  )r   r   rq   r   rN  rX   rO  !Optional[list[Mapping[str, Any]]]rP  r   r   ztuple[bytes, int, int])r   r   rq   r   rN  rX   rO  rd  rP  r   r   rb  r   tuple[int, bytes, int, int])r   r   rq   r   rN  rX   rO  rd  rP  r   r   re  r   )r   r   rq   r  rg  rX   rS   zOptional[_ServerMode]rP  r   r   4Union[SnappyContext, ZlibContext, ZstdContext, None]r   re  )r   r   ri  rX   rj  r   rk  r   rl  r   rm  r   rP  r   r   ztuple[bytes, int])r   r   ri  rX   rj  r   rk  r   rl  r   rm  r   rP  r   r   rb  r   r   )r   r   ri  rX   rj  r   rk  r   rl  r   rm  r   rP  r   r   r   )r   r   ri  rX   rj  r   rk  r   rl  r   rm  r   rP  r   r   rf  r   r   )ri  rX   rk  r   r   r   r   r  )
ri  rX   rk  r   r   r   r   rb  r   rc  )ri  rX   rk  r   r   r   r   rc  )
ri  rX   rk  r   r   r   r   rf  r   rc  )rp   rX   r  r   r  r   r   r   )rp   r   rq   r   rO  r  r  r   rP  r   r   r  r  r  r   #tuple[list[Mapping[str, Any]], int])rp   r   rq   r   rO  r  r  r   rP  r   r   r  r   %tuple[bytes, list[Mapping[str, Any]]])rp   r   rq   r   rO  r  r  r   rP  r   r   r  r   r  )r   rX   rp   r   rq   r  rO  r  rP  r   r   r  r   r  )r   rX   rp   r   rq   r  rO  r  rP  r   r   r  r   rh  )r   rX   rp   r   rq   r  rO  r  rP  r   r   r  r  r  r   rg  )r   
__future__r   r  r  rD   rL  ior   r  typingr   r   r   r   r	   r
   r   r   r   r)  r   r   r   r   r   
bson.int64r   bson.raw_bsonr   r   r   r   pymongor   _use_cImportErrorpymongo.errorsr   r   r   r   r   r   r   r    pymongo.hellor!   pymongo.helpersr"   pymongo.loggerr#   r$   r%   pymongo.read_preferencesr&   pymongo.write_concernr'   r(   pymongo.client_sessionr)   pymongo.compression_supportr*   r+   r,   pymongo.mongo_clientr-   pymongo.monitoringr.   pymongo.poolr/   pymongo.read_concernr0   r1   pymongo.typingsr2   r3   rG   rF   r  _INSERT_UPDATE_DELETE_EMPTYr  r  r  rx  r  r  r  re  rB   r/  rJ   rT   r\   rv   r   r   r   r   r   r   r  r  r  r  rM  packr4  r5  r:  r<  r?  rL  rI  rJ  rY  r]  r`  r   ro  rs  ru  _query_messager   ry  r{  r  r  _get_more_messager	  r  r  r  r  r  r  r  r
  r  r  r  r  r#  r  rO  rH  ra  rH   r6   rI   <module>r     s	   #     "
 
 
  W W  !F	 	 	 & * M M 3 ."4SS02'046		  


	
..1//
 $yIN
BN!*C  ? 
0

"5@$O
!!.!8I!!J  #"
2 .2'+%)0
0
0 B0 	0
 0 0 0 0 +0 %0 #0 0f
  %	
   &v
 v
rsB sBl	V 		x 	!U !: )6==499  +++&T++& v}}W%** FMM$$$	'&--.33 V]]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v
 v
z	  +#!2 +#\L& ^^AAA "A 
	A
 A 
A 
A )AH### "# 
	#
 # 
# +#" 
&==$$$ "$ 
	$
 $ 
$ 0$$/// "/ 
	/
 / 
/ 0/8 
//OEEE &E "	E
 E 
E 0E0### &# "	#
 # 
# +# 
$-$K$K!JJJ &J "	J
 J 
J 
J )JZnA nAbQ, Q,j hoo
NNFMMHD 4  Fs   Q2 2Q=<Q=