
    FCf                    &   U d Z ddlmZ ddlZddlZddlmZm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mZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z: erddl;m<Z< eefZ=de>d<   dZ?de?z  Z@de>d<   dZAdZBdZCdZDdZEd ZFd!ZGd"ZHd"ZId#ZJd$ZKd%ZLd&ZMd'ZNdZOdZPdZQd(e>d)<   dZRd(e>d*<   dZSd(e>d+<   d,ZTd-ZUd-ZVd.ZWd/e>d0<   d1ZXd/e>d2<   d3ZYd4ZZd5Z[dd6Z\dd7Z]ddd8Z^ej                  ej                  ej                  ej                  ej                  d9Zddd:Zedd;Zfdd<Zgdd=Zhdd>Zidd?Zjdd@ZkddAZlddBZmddCZnddDZoddEZpddFZqddGZrddHZsddIZtddJZuddKZvddLZwddMZxddNZyddOZzddPZ{ e|g dQ      Z}ddRZ~	 	 	 	 	 	 ddSZddTZddUZddVZddWZddXZddYZddZZdd[Zdd\Zdd]Zdd^Zdd_Z e|g d`      ZddaZddbZddcZdddZddeZdfdggiZdhe>di<   i djedkeydle~dmeldne(doetdpeedqerdreedseqdterduegdvekdwevdxemdyexdze{i d{emd|eed}eed~eedesdetdfeedeedeedeideidemdeedeedeodehde)eleheuedZde>d<   eeeeeeeheieeeezekeredZde>d<   eeewe/eememeeed
Zde>d<   dgdfiZde>d<   i Zde>d<   ej1                  e       ej3                         D ]  \  ZZeD ]  Zeevsee   ee<     ej;                         Zde>d<   ej1                  e       g dZde>d<    e|dlg      ZddZ	 d	 	 	 	 	 	 	 ddZddZ	 d	 	 	 	 	 ddZddZddZ e|g d      Z G d d      Z G d deeef         Zy)z9Functions and classes common to multiple pymongo modules.    )annotationsN)OrderedDictabc)get_close_matches)TYPE_CHECKINGAnyCallableIteratorMappingMutableMappingNoReturnOptionalSequenceTypeUnionoverload)unquote_plus)SON)UuidRepresentation)CodecOptionsDatetimeConversionTypeRegistry)RawBSONDocument)
MECHANISMS)OIDCCallback)validate_compressorsvalidate_zlib_compression_level)
DriverInfo)ConfigurationError)_validate_event_listeners)ReadConcern)_MONGOS_MODES_ServerMode)	ServerApi)DEFAULT_WRITE_CONCERNWriteConcernvalidate_boolean)ClientSessionzSequence[Type]ORDERED_TYPESi      intMAX_MESSAGE_SIZEi  z3.6      
         g      ?<   g      4@d   Optional[int]MAX_IDLE_TIME_MSMAX_IDLE_TIME_SECWAIT_QUEUE_TIMEOUT   T);   zSequence[int]COMMAND_NOT_FOUND_CODES)   i@  i@  UNAUTHORIZED_CODESi'  mongodbautoc                    | }d}| j                  d      }|dk7  r| d| t        | |dz   d       }}|j                  d      r|dd }||fS )z5Split a host:port string into (host, int(port)) pair.ii  :Nr0   [)rfindr+   
startswith)nodehostportidxs       N/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/pymongo/common.pypartition_noderJ      s_    DD
**S/C
by$3ZT#')_!5dsAbz:    c                B    t        |       \  }}|j                         |fS )z6Split and normalize a node name from a hello response.)rJ   lower)rE   rF   rG   s      rI   
clean_noderN      s#    %JD$ ::<rK   c                X    d|  d}|r|ddj                  |       dz  }t        |      )z1Raise ConfigurationError with the given key name.Unknown option: .z Did you mean one of (, z:) or maybe a camelCase version of one? Refer to docstring.)joinr   )keysuggestionsmsgs      rI   raise_config_errorrW      s=    SE
#C'		+(>'??yzz
S
!!rK   )unspecifiedstandardpythonLegacy
javaLegacycsharpLegacyc                j    t        |t              r|dvrt        d|  d      |dk(  S t        | |      S )z8Validates that value is True, False, 'true', or 'false'.)truefalseThe value of z must be 'true' or 'false'r^   )
isinstancestr
ValueErrorr'   optionvalues     rI   validate_boolean_or_stringrg      sA    %))}VH4NOPPFE**rK   c                    t        |t              r|S t        |t              r	 t        |      S t	        d|  d      # t        $ r t        d|  d      dw xY w)zDValidates that 'value' is an integer (or basestring representation).r`   z must be an integerNWrong type for z, value must be an integerra   r+   rb   rc   	TypeErrorrd   s     rI   validate_integerrl      sl    %	E3		Tu: ofX-GH
II  	T}VH4GHItS	Ts	   
> Ac                F    t        | |      }|dk  rt        d|  d      |S )zFValidate that 'value' is a positive integer, which does not include 0.r   r`   z must be a positive integerrl   rc   re   rf   vals      rI   validate_positive_integerrq      s/    
65
)C
ax=0KLMMJrK   c                F    t        | |      }|dk  rt        d|  d      |S )z1Validate that 'value' is a positive integer or 0.r   r`   z must be a non negative integerrn   ro   s      rI   validate_non_negative_integerrs      s/    
65
)C
Qw=0OPQQJrK   c                X    ||S t        | |      }t        |      j                          |S )z1Validates that 'value' is file-like and readable.)validate_stringopencloserd   s     rI   validate_readablerx      s/    } FE*EKLrK   c                "    ||S t        | |      S )z4Validate that 'value' is a positive integer or None.rq   rd   s     rI   !validate_positive_integer_or_noner{      s    }$VU33rK   c                "    ||S t        | |      S )z9Validate that 'value' is a positive integer or 0 or None.)rs   rd   s     rI   %validate_non_negative_integer_or_noner}      s    }(77rK   c                D    t        |t              r|S t        d|  d      )z/Validates that 'value' is an instance of `str`.ri   z", value must be an instance of str)ra   rb   rk   rd   s     rI   ru   ru      s&    %
ofX-OP
QQrK   c                "    ||S t        | |      S )z@Validates that 'value' is an instance of `basestring` or `None`.)ru   rd   s     rI   validate_string_or_noner      s    }65))rK   c                    t        |t              r|S t        |t              r	 t        |      S t	        d|  d      # t        $ r |cY S w xY w)/Validates that 'value' is an integer or string.ri   z&, value must be an integer or a stringrj   rd   s     rI   validate_int_or_basestringr     sW    %	E3		u: ofX-ST
UU  	L	s   
> AAc                    t        |t              r|S t        |t              r	 t        |      }t	        | |      S t        d|  d      # t        $ r |cY S w xY w)r   ri   z3, value must be an non negative integer or a string)ra   r+   rb   rc   rs   rk   ro   s      rI   'validate_non_negative_int_or_basestringr     sc    %	E3		e*C -VS99
ofX-`a
bb  	L	s   A
 
AAc                    |  d}	 t        |      }d|cxk  rdk  sn t        |  d      |S # t        $ r t        |      dt        $ r t        |      dw xY w)zXValidates that 'value' is a float, or can be converted to one, and is
    positive.
    z must be an integer or floatNr   g    eAz1 must be greater than 0 and less than one billion)floatrc   rk   )re   rf   errmsgs      rI   validate_positive_floatr     sw     x34F*e u?s?F8#TUVVL  + d* *T)*s	   / *Ac                0    |dk(  s|dk(  ryt        | |      S )zgValidates that 'value' is 0 or a positive float, or can be converted to
    0 or a positive float.
    r   0r   rd   s     rI   validate_positive_float_or_zeror   0  s!     zUc\"6511rK   c                (    ||S t        | |      dz  S )cValidates a timeout specified in milliseconds returning
    a value in floating point seconds.
         @@r   rd   s     rI   validate_timeout_or_noner   9  s      }"651F::rK   c                V    |t        |  d      |dk(  s|dk(  ryt        | |      dz  S )zValidates a timeout specified in milliseconds returning
    a value in floating point seconds for the case where None is an error
    and 0 is valid. Setting the timeout to nothing in the URI string is a
    config error.
    z cannot be Noner   r   r   )r   r   rd   s     rI   validate_timeout_or_zeror   B  s=     } F8?!;<<zUc\"651F::rK   c                :    |
|dk(  s|dk(  ryt        | |      dz  S )zValidates a timeout specified in milliseconds returning
    a value in floating point seconds. value=0 and value="0" are treated the
    same as value=None which means unlimited timeout.
    Nr   r   r   r   rd   s     rI    validate_timeout_or_none_or_zeror   O  s*    
 }
esl"651F::rK   c                &    |yt        | |      dz  S )r   Nr   )r   rd   s     rI   validate_timeoutmsr   Y  s     }*659FBBrK   c                0    |dk(  s|dk(  ryt        | |      S )zBValidates maxStalenessSeconds according to the Max Staleness Spec.rA   z-1rz   rd   s     rI   validate_max_stalenessr   b  s    {etm$VU33rK   c                B    t        |t              st        |d      |S )zValidate a read preference.z is not a read preference.)ra   r#   rk   dummyrf   s     rI   validate_read_preferencer   j  s$    e[)5)#=>??LrK   c                2    |t         vrt        | d      |S )zValidate read preference mode for a MongoClient.

    .. versionchanged:: 3.5
       Returns the original ``value`` instead of the validated read preference
       mode.
    z is not a valid read preference)r"   rc   r   s     rI   validate_read_preference_moder   q  s$     M!E7"ABCCLrK   c                P    |t         vrt        |  dt        t                      |S )z&Validate the authMechanism URI option.z must be in )r   rc   tuplerd   s     rI   validate_auth_mechanismr   }  s+    JF8<j0A/BCDDLrK   c                l    	 t         |   S # t        $ r t        | dt        t                      dw xY w)z<Validate the uuid representation option selected in the URI.z3 is an invalid UUID representation. Must be one of N)_UUID_REPRESENTATIONSKeyErrorrc   r   r   s     rI   validate_uuid_representationr     sN    $U++ g *+,.
 		s    (3c                R   t        |t              s|g}g }|D ]n  }|dk(  r|j                  i        	 i }|j                  d      D ]-  }|j                  d      \  }}t	        |      |t	        |      <   / |j                  |       p |S # t
        $ r t        |d|        dw xY w)z5Parse readPreferenceTags if passed as a client kwarg. ,r@   z not a valid value for N)ra   listappendsplitr   	Exceptionrc   )namerf   tag_setstag_settagstagrT   rp   s           rI   validate_read_preference_tagsr     s    eT"H Tb=OOB	TD}}S) <99S>S*6s*;\#&'< OOD!T O  	T{*A$HItS	Ts   ABB&)SERVICE_NAMECANONICALIZE_HOST_NAMESERVICE_REALMAWS_SESSION_TOKENENVIRONMENTTOKEN_RESOURCEc           	        i }t        |t              st        |t              st        d      |j	                         D ]  \  }}t        |t              r|||<   t        |t
              rt        |      j                         ||<   I|dv rt        |t              r|||<   c|dv r!t        |t              st        d      |||<   t        d| dt        |              |S t        | |      }|j                  d      D ]o  }|j                  d      \  }}}|t        vr-d	|v rt        d
      t        | dt        t               d      |dk(  rt        ||      ||<   bt!        |      ||<   q |S )z!Validate authMechanismProperties.zCAuth mechanism properties must be given as a string or a dictionary)ALLOWED_HOSTS)OIDC_CALLBACKOIDC_HUMAN_CALLBACKz'callback must be an OIDCCallback objectz)Invalid type for auth mechanism property rR   r   r@   r   zPauth mechanism properties must be key:value pairs like AWS_SESSION_TOKEN:<token>z< is not a supported auth mechanism property. Must be one of rQ   r   )ra   rb   dictrc   itemsboolrM   r   r   typeru   r   	partition_MECHANISM_PROPSr   rg   r   )re   rf   propsrT   opt_rp   s          rI   "validate_auth_mechanism_propertiesr     s   EeS!%&bcc++- 	cJC%%"c
E4( Z--/c
))j.E"c
@@!%6$%NOO"c
 #LSEQSTXY^T_S`!abb	c FE*E{{3 +mmC(Q&&"c) E 
 % 6)*+1.  **3C=E#J%c*E#J'+* LrK   c                    d}	 t        |t        j                        }|st        |t              st        |  d      |S # t        $ r3 t	        |d      r$t        |j
                  t        j                        }Y ]w xY w)z#Validate the document_class option.F
__origin__zg must be dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a subclass of collections.MutableMapping)
issubclassr   r   rk   hasattrr   r   )re   rf   
is_mappings      rI   validate_document_classr     s     JJs'9'9:
 j@h 5 5
 	

 L  J5,'#E$4$4c6H6HIJJs   A   9A<;A<c                R    |$t        |t              st        |  dt               |S )z"Validate the type_registry option.z must be an instance of )ra   r   rk   rd   s     rI   validate_type_registryr     s-    E<!@6(":<.IJJLrK   c                B    t        |t              st        |  d      |S )z!Validates that 'value' is a list.z must be a list)ra   r   rk   rd   s     rI   validate_listr     s#    eT"6(/233LrK   c                "    ||S t        | |      S )z)Validates that 'value' is a list or None.)r   rd   s     rI   validate_list_or_noner     s    }''rK   c                `    t        |t        j                  t        f      st	        |  d      y)z/Validates that 'value' is a list or a document.zu must either be a list or an instance of dict, bson.son.SON, or any other type that inherits from collections.MappingN)ra   r   r   r   rk   rd   s     rI   validate_list_or_mappingr   	  s6    eckk401h " "
 	
 2rK   c                T    t        |t        j                        st        |  d      y)z=Validate the type of method arguments that expect a document.zd must be an instance of dict, bson.son.SON, or any other type that inherits from collections.MappingN)ra   r   r   rk   rd   s     rI   validate_is_mappingr     s1    eS[[)h " "
 	
 *rK   c                `    t        |t        j                  t        f      st	        |  d      y)zEValidate the type of method arguments that expect a MongoDB document.z must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMappingN)ra   r   r   r   rk   rd   s     rI   validate_is_document_typer     s9    ec00/BCh ) )
 	
 DrK   c                |    ||S t        | |       t        |j                  d            dkD  rt        |  d      |S )zValidate the appname option.zutf-8   z must be <= 128 bytes)ru   lenencoderc   rd   s     rI   validate_appname_or_noner   (  sD    }FE"
5<< !C'F8#89::LrK   c                J    ||S t        |t              st        |  d      |S ) Validate the driver keyword arg.z" must be an instance of DriverInfo)ra   r   rk   rd   s     rI   validate_driver_or_noner   3  s.    }eZ(6("DEFFLrK   c                J    ||S t        |t              st        |  d      |S )z$Validate the server_api keyword arg.z! must be an instance of ServerApi)ra   r$   rk   rd   s     rI   validate_server_api_or_noner   <  s.    }eY'6("CDEELrK   c                @    ||S t        |      st        |  d      |S )z%Validates that 'value' is a callable.z must be a callable)callablerc   rd   s     rI   validate_is_callable_or_noner   E  s+    }E?F8#6788LrK   c                    t        d|        | rBt        | t              s1t        t	        |             }|j                  d      rt        d      yyy)z Validate a replacement document.replacement$z'replacement can not include $ operatorsN)r   ra   r   nextiterrD   rc   )r   firsts     rI   validate_ok_for_replacer   N  sN    {3:k?CT+&'C FGG ! D{rK   c                    t        d|        | st        d      t        | t               }t	        t        |             }|r|j                  d      st        d      yy)zValidate an update document.updatezupdate cannot be emptyr   z"update only works with $ operatorsN)r   rc   ra   r   r   r   rD   )r   is_documentr   s      rI   validate_ok_for_updater   X  s[    Xv.122 ..KfE5++C0=>> 1{rK   )strictreplaceignorec                P    |t         vrt        | dt        t                      |S )zAValidate the Unicode decode error handler option of CodecOptions.z< is an invalid Unicode decode error handler. Must be one of )_UNICODE_DECODE_ERROR_HANDLERSrc   r   r   s     rI   %validate_unicode_decode_error_handlerr   h  s:    22g 3457
 	

 LrK   c                Z    |(t        |t        j                        st        d|z        |S )zValidate the tzinfo optionz)%s must be an instance of datetime.tzinfo)ra   datetimetzinfork   r   s     rI   validate_tzinfor   s  s+    E8??!CCeKLLLrK   c                N    ||S ddl m} t        ||      st        |  d      |S )r   r   )AutoEncryptionOptsz* must be an instance of AutoEncryptionOpts)pymongo.encryption_optionsr   ra   rk   )re   rf   r   s      rI   %validate_auto_encryption_opts_or_noner   z  s2    }=e/06("LMNNLrK   c                    |t         j                  S t        |t              r-|j	                         rt        t        |            S t         |   S t        |t
              rt        |      S t        |  d      )z%Validate a DatetimeConversion string.z5 must be a str or int representing DatetimeConversion)r   DATETIMEra   rb   isdigitr+   rk   rd   s     rI   validate_datetime_conversionr    sh    }!***%==?%c%j11!%((	E3	!%((
vhST
UUrK   c                0    |dvrt        |  d|d      |S )z)Validate the serverMonitoringMode option.>   r>   pollstream=z7 is invalid. Must be one of "auto", "stream", or "poll")rc   rd   s     rI   validate_server_monitoring_moder    s0    ..hay WX
 	
 LrK   tlssslzdict[str, list[str]]URI_OPTIONS_ALIAS_MAPappnameauthmechanismauthmechanismproperties
authsourcecompressorsconnecttimeoutmsdirectconnectionheartbeatfrequencymsjournallocalthresholdmsmaxidletimemsmaxconnectingmaxpoolsizemaxstalenesssecondsreadconcernlevelreadpreferencereadpreferencetags
replicaset
retryreadsretrywritesloadbalancedserverselectiontimeoutmssockettimeoutmstlsallowinvalidcertificatestlsallowinvalidhostnames	tlscafiletlscertificatekeyfiletlscertificatekeyfilepasswordtlsdisableocspendpointchecktlsinsecurew
wtimeoutmszlibcompressionlevel)srvservicenamesrvmaxhosts	timeoutmsservermonitoringmode$dict[str, Callable[[Any, Any], Any]]URI_OPTIONS_VALIDATOR_MAP)connectdriver
server_apifsyncminpoolsize
tlscrlfiletz_awareunicode_decode_error_handleruuidrepresentationwaitqueuemultiplewaitqueuetimeoutmsdatetime_conversionNONSPEC_OPTIONS_VALIDATOR_MAP)
document_classtype_registryread_preferenceevent_listenersr   usernamepasswordserver_selectorauto_encryption_optsauthoidcallowedhostsKW_VALIDATORSzdict[str, str]INTERNAL_URI_OPTION_NAME_MAPzdict[str, tuple[str, str]]URI_OPTIONS_DEPRECATION_MAP
VALIDATORS)r  r  r  r  r!  r"  r=  z	list[str]TIMEOUT_OPTIONSc                b    t        | |      \  }}|t        vrt        d|  dt               | |fS )z,Validate optional authentication parameters.rP   z. Must be in )validate_AUTH_OPTIONSr   )re   rf   rM   s      rI   validate_auth_optionrQ  !  s=    FE*LE5M! #3F8=!XYY5=rK   c                l    |xs | }	 ||   S # t         $ r t        ||d      }t        | |       Y y w xY w)Ng?)cutoff)r   r   rW   )rT   
validators
normed_keyrU   s       rI   _get_validatorrV  )  sE     "sJ-*%% -'
JsK3,-s    #33c                \    t        | t        | j                               } || |      }| |fS )zGeneric validation function.rU  )rV  rL  rM   )re   rf   	validators      rI   rO  rO  4  s,    vzfllnMIfe$E5=rK   c                ~    t         t              rt               }d	d}d	 fd}n
i }d	d}d	d} j                         D ]4  \  }} ||      }	 t        |t        |      } |||      }	|	| ||      <   6 |S # t
        t        t        f$ r.}
|r!t        j                  t        |
      d       n Y d}
~
vd}
~
ww xY w)
aa  Validate each entry in options and raise a warning if it is not valid.
    Returns a copy of options with invalid entries removed.

    :param opts: A dict containing MongoDB URI options.
    :param warn: If ``True`` then warnings will be logged and
          invalid options will be ignored. Otherwise, invalid options will
          cause errors.
    c                    | S N xs    rI   get_normed_keyz-get_validated_options.<locals>.get_normed_keyJ      HrK   c                &    j                  |       S r\  )	cased_key)r_  optionss    rI   get_setter_keyz-get_validated_options.<locals>.get_setter_keyM  s    $$Q''rK   c                "    | j                         S r\  )rM   r^  s    rI   r`  z-get_validated_options.<locals>.get_normed_keyS  s    779rK   c                    | S r\  r]  r^  s    rI   re  z-get_validated_options.<locals>.get_setter_keyV  ra  rK   rX  r*   )
stacklevelN)r_  rb   returnrb   )ra   _CaseInsensitiveDictionaryr   rV  r2  rc   rk   r   warningswarnrb   )rd  rl  validated_optionsr`  re  r   rf   rU  rY  	validatedexcs   `          rI   get_validated_optionsrp  ;  s     '5668		( 		 mmo F
U#C(
		F&s,ER\]I!#u-I =FnZ89F  I'9: 	c#h15 6	s   A::B<$B77B<c                .    | j                  dd| d      S )NescCollectionenxcol_.z.escgetencrypted_fieldsr   s     rI   _esc_coll_namerx  h  s    8D61FGGrK   c                .    | j                  dd| d      S )NecocCollectionrs  z.ecocrt  rv  s     rI   _ecoc_coll_namer{  l  s     0HTF%2HIIrK   )r*  wtimeoutr+  r6  jr  c                      e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d
dZedd       Zedd       ZddZedd       Z	ddZ
edd       Zy	)
BaseObjectzA base class that provides attributes and methods common
    to multiple pymongo classes.

    SHOULD NOT BE USED BY DEVELOPERS EXTERNAL TO MONGODB.
    c                   t        |t              st        d      || _        t        |t              st        |d      || _        t        |t              st        d      || _        t        |t              st        d      || _	        y )NzDcodec_options must be an instance of bson.codec_options.CodecOptionszR is not valid for read_preference. See pymongo.read_preferences for valid options.zGwrite_concern must be an instance of pymongo.write_concern.WriteConcernzDread_concern must be an instance of pymongo.read_concern.ReadConcern)
ra   r   rk   _BaseObject__codec_optionsr#   _BaseObject__read_preferencer&   _BaseObject__write_concernr!   _BaseObject__read_concern)selfcodec_optionsrB  write_concernread_concerns        rI   __init__zBaseObject.__init__{  s     -6bcc,/;7"% &  
 "1-6Y   -,4bcc*rK   c                    | j                   S )zdRead only access to the :class:`~bson.codec_options.CodecOptions`
        of this instance.
        )r  r  s    rI   r  zBaseObject.codec_options  s    
 ###rK   c                    | j                   S )zRead only access to the :class:`~pymongo.write_concern.WriteConcern`
        of this instance.

        .. versionchanged:: 3.0
          The :attr:`write_concern` attribute is now read only.
        )r  r  s    rI   r  zBaseObject.write_concern  s     ###rK   c                B    |r|j                   rt        S | j                  S )zBRead only access to the write concern of this instance or session.)in_transactionr%   r  r  sessions     rI   _write_concern_forzBaseObject._write_concern_for  s!     w--((!!!rK   c                    | j                   S )zRead only access to the read preference of this instance.

        .. versionchanged:: 3.0
          The :attr:`read_preference` attribute is now read only.
        )r  r  s    rI   rB  zBaseObject.read_preference  s     %%%rK   c                Z    |r|j                         xs | j                  S | j                  S )zDRead only access to the read preference of this instance or session.)_txn_read_preferencer  r  s     rI   _read_preference_forzBaseObject._read_preference_for  s-     //1KT5K5KK%%%rK   c                    | j                   S )zRead only access to the :class:`~pymongo.read_concern.ReadConcern`
        of this instance.

        .. versionadded:: 3.2
        )r  r  s    rI   r  zBaseObject.read_concern  s     """rK   N)
r  r   rB  r#   r  r&   r  r!   ri  None)ri  r   )ri  r&   )r  Optional[ClientSession]ri  r&   )ri  r#   )r  r  ri  r#   )ri  r!   )__name__
__module____qualname____doc__r  propertyr  r  r  rB  r  r  r]  rK   rI   r  r  t  s    +#+ %+ $	+
 "+ 
+: $ $ $ $" & && # #rK   r  c                      e Zd ZddZddZddZddZddZddZddZ	ddZ
dd	ZdddZddZd dZd!dZedd"d       Zed#d       Zdd$dZd%dZddZy
)&rj  c                T    i | _         i | _        | j                  t        |i |       y r\  )%_CaseInsensitiveDictionary__casedkeys _CaseInsensitiveDictionary__datar   r   )r  argskwargss      rI   r  z#_CaseInsensitiveDictionary.__init__  s'    +-&(D$)&)*rK   c                :    |j                         | j                  v S r\  )rM   r  r  rT   s     rI   __contains__z'_CaseInsensitiveDictionary.__contains__  s    yy{dkk))rK   c                ,    t        | j                        S r\  )r   r  r  s    rI   __len__z"_CaseInsensitiveDictionary.__len__  s    4;;rK   c                (    d | j                   D        S )Nc              3      K   | ]  }|  y wr\  r]  ).0rT   s     rI   	<genexpr>z6_CaseInsensitiveDictionary.__iter__.<locals>.<genexpr>  s     00s   )r  r  s    rI   __iter__z#_CaseInsensitiveDictionary.__iter__  s    0t//00rK   c                t    t        | D ci c]  }| j                  |   | j                  |   ! c}      S c c}w r\  )rb   r  r  )r  ks     rI   __repr__z#_CaseInsensitiveDictionary.__repr__  s3    FAD$$Q'Q7FGGFs   $5c                `    |j                         }|| j                  |<   || j                  |<   y r\  rM   r  r  )r  rT   rf   lc_keys       rI   __setitem__z&_CaseInsensitiveDictionary.__setitem__  s+    #& #FrK   c                <    | j                   |j                            S r\  )r  rM   r  s     rI   __getitem__z&_CaseInsensitiveDictionary.__getitem__  s    {{399;''rK   c                X    |j                         }| j                  |= | j                  |= y r\  r  )r  rT   r  s      rI   __delitem__z&_CaseInsensitiveDictionary.__delitem__  s'    V$KKrK   c                    t        |t        j                        st        S t	        |       t	        |      k7  ry|D ]  }| |   ||   k7  s y y)NFT)ra   r   r   NotImplementedr   r  otherrT   s      rI   __eq__z!_CaseInsensitiveDictionary.__eq__  sP    %-!!t9E
" 	CCyE#J&	 rK   Nc                V    | j                   j                  |j                         |      S r\  )r  ru  rM   r  rT   defaults      rI   ru  z_CaseInsensitiveDictionary.get  s    {{syy{G44rK   c                    |j                         }| j                  j                  |d         | j                  j                  |g|i |S r\  )rM   r  popr  )r  rT   r  r  r  s        rI   r  z_CaseInsensitiveDictionary.pop  sB    VT*t{{v7777rK   c                z    | j                   j                         \  }}| j                  j                  |      }||fS r\  )r  popitemr  r  )r  r  rc  rf   s       rI   r  z"_CaseInsensitiveDictionary.popitem  s8     ,,446	'%rK   c                l    | j                   j                          | j                  j                          y r\  )r  clearr  r  s    rI   r  z _CaseInsensitiveDictionary.clear  s$     rK   c                     y r\  r]  r  s      rI   
setdefaultz%_CaseInsensitiveDictionary.setdefault      rK   c                     y r\  r]  r  s      rI   r  z%_CaseInsensitiveDictionary.setdefault	  r  rK   c                    |j                         }|| v r| j                  |   S || j                  |<   || j                  |<   |S r\  )rM   r  r  )r  rT   r  r  s       rI   r  z%_CaseInsensitiveDictionary.setdefault  sF    $;;;v&&'*DV$")DKKNrK   c                    t        |t              r|D ]  }||   | |j                  |      <    y |D ]
  }||   | |<    y r\  )ra   rj  rc  r  s      rI   r   z!_CaseInsensitiveDictionary.update  sQ    e78 8-23ZU__S)*8  '!#JS	'rK   c                <    | j                   |j                            S r\  )r  rM   r  s     rI   rc  z$_CaseInsensitiveDictionary.cased_key  s    		,,rK   )r  r   r  r   )rT   rb   ri  r   )ri  r+   )ri  zIterator[str])ri  rb   )rT   rb   rf   r   ri  r  )rT   rb   ri  r   )rT   rb   ri  r  )r  r   ri  r   r\  )rT   rb   r  Optional[Any]ri  r   )rT   rb   r  r   r  r   ri  r   )ri  tuple[str, Any])ri  r  )rT   rb   r  r  ri  r  )rT   rb   r  r   ri  r   )rT   rb   r  r  ri  r  )r  Mapping[str, Any]ri  r  )r  r  r  r  r  r  r  r  r  r  r  r  ru  r  r  r  r   r  r   rc  r]  rK   rI   rj  rj    s{    +
* 1H$
( 
	58
 
    '-rK   rj  )rE   rb   ri  ztuple[str, int]r\  )rT   rb   rU   Optional[list]ri  r   )re   rb   rf   r   ri  r   )re   rb   rf   r   ri  r+   )re   rb   rf   r   ri  Optional[str])re   rb   rf   r   ri  r4   )re   rb   rf   r   ri  rb   )re   rb   rf   r   ri  Union[int, str])re   r   rf   r   ri  r  )re   rb   rf   r   ri  r   )re   rb   rf   r   ri  Optional[float])re   r   rf   r   ri  r  )r   r   rf   r   ri  r#   )r   r   rf   r   ri  r+   )r   rb   rf   r   ri  zlist[dict[str, str]])re   rb   rf   r   ri  zdict[str, Union[bool, str]])re   rb   rf   r   ri  z2Union[Type[MutableMapping], Type[RawBSONDocument]])re   r   rf   r   ri  zOptional[TypeRegistry])re   rb   rf   r   ri  r   )re   r   rf   r   ri  r  )re   r   rf   r   ri  r  )re   rb   rf   r   ri  r  )re   r   rf   r   ri  zOptional[DriverInfo])re   r   rf   r   ri  zOptional[ServerApi])re   r   rf   r   ri  zOptional[Callable])r   r  ri  r  )r   r   ri  r  )r   r   rf   rb   ri  rb   )r   r   rf   r   ri  zOptional[datetime.tzinfo])re   r   rf   r   ri  r  )re   r   rf   r   ri  zOptional[DatetimeConversion])re   rb   rf   rb   ri  rb   )re   rb   rf   r   ri  r  )rT   rb   rT  r1  rU  r  ri  r	   )T)rd  r  rl  r   ri  zMutableMapping[str, Any])rw  r  r   rb   ri  r   )r  
__future__r   r   rk  collectionsr   r   difflibr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   urllib.parser   bsonr   bson.binaryr   bson.codec_optionsr   r   r   bson.raw_bsonr   pymongo.authr   pymongo.auth_oidcr   pymongo.compression_supportr   r   pymongo.driver_infor   pymongo.errorsr   pymongo.monitoringr    pymongo.read_concernr!   pymongo.read_preferencesr"   r#   pymongo.server_apir$   pymongo.write_concernr%   r&   r'   pymongo.client_sessionr(   r)   __annotations__MAX_BSON_SIZEr,   MIN_WIRE_VERSIONMAX_WIRE_VERSIONMAX_WRITE_BATCH_SIZEMIN_SUPPORTED_SERVER_VERSIONMIN_SUPPORTED_WIRE_VERSIONMAX_SUPPORTED_WIRE_VERSIONHEARTBEAT_FREQUENCYKILL_CURSOR_FREQUENCYEVENTS_QUEUE_FREQUENCYSERVER_SELECTION_TIMEOUTMIN_HEARTBEAT_INTERVALMIN_SRV_RESCAN_INTERVALCONNECT_TIMEOUTMAX_POOL_SIZEMIN_POOL_SIZEMAX_CONNECTINGr5   r6   r7   LOCAL_THRESHOLD_MSRETRY_WRITESRETRY_READSr:   r<   _MAX_END_SESSIONSSRV_SERVICE_NAMESERVER_MONITORING_MODErJ   rN   rW   UNSPECIFIEDSTANDARDPYTHON_LEGACYJAVA_LEGACYCSHARP_LEGACYr   rg   rl   rq   rs   rx   r{   r}   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	frozensetr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r2  r?  rI  rJ  rK  r   r   optnamealiasesaliascopyrL  rM  rP  rQ  rV  rO  rp  rx  r{  WRITE_CONCERN_OPTIONSr  rb   rj  r]  rK   rI   <module>r     s    @ "   ( %    &  * M M ) # * + - 8 , ? ( W W4!$k 2~ 2 M) # )     %                    #' - & $( = ' %) M (     */  . %7 M 6       	" &11"++&44$00&44 +	J48R*	V
c&2;
;;C4		* 	 +\7*(


H
? "++J!K 	V 
E7/ + 'C''C,'C A'C /	'C
 ''C 8'C 2'C 4'C )'C 7'C -'C .'C 8'C 1'C /'C  3!'C" 7#'C$ )%'C& ,''C( -)'C* .+'C,  8-'C. 7/'C0 
%1'C2 "#=3'C4  :5'C6 "7'C8 .9'C: $%<;'C< "#=='C> -?'C@ 	0A'CB /C'CD ;E'CF &0#;M'C ? 'X *%-'0#*$I6>27G C & .+/0''3A)73 $ 
50 n 	; 7 	     !> ?-335 RGW R11/H/Q%e,RR 4M3Q3Q3S
0 S 
  -    456 ]a-	->-LY-- .2**&***ZHJ
 ""Z[ S# S#lU-S!9 U-rK   