+
    4O|j3w  ã            
      ó¦  a € 0 t $ R t^ RIHt ^ RIHt ^ RIHtHtH	t	H
t
HtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHtHtHtHt ^ R	IHt ^ R
IH t  ^ RI!H"t" ^ RI#H$t$  ! R R]4      t%]%! ]&! ^4      !  t']'PP                  ]'PR                  3t*R]+R&   ]]	],          .]	],          3,          t, ! R R4      t-]"P\                  ]'PR                  ]"P^                  ]'P`                  ]"Pb                  ]'Pd                  ]"Pf                  ]'Pd                  ]"Ph                  ]'Pd                  /t5R R lt6R R lt7R R lt8R R lt9R R lt:R R lt;R# ) zŒRepresent a deployment of MongoDB servers.

.. seealso:: This module is compatible with both the synchronous and asynchronous PyMongo APIs.
)Úannotations)Úsample)ÚAnyÚCallableÚListÚMappingÚMutableMappingÚ
NamedTupleÚOptionalÚcast©ÚMinKey)ÚObjectId)Úcommon)ÚConfigurationErrorÚPyMongoError)ÚPrimaryÚReadPreferenceÚ_AggWritePrefÚ_ServerMode)ÚServerDescription)Ú	Selection)ÚSERVER_TYPE)Ú_Addressc                  óT   € ] tR t^-t$ R]R&   R]R&   R]R&   R]R&   R]R&   R]R&   RtR	# )
Ú_TopologyTypeÚintÚSingleÚReplicaSetNoPrimaryÚReplicaSetWithPrimaryÚShardedÚUnknownÚLoadBalanced© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r#   ó    ÚUC:\Users\alokc\chatbot\backend\venv\Lib\site-packages\pymongo/topology_description.pyr   r   -   s#   ‡ ØƒKØÓØÓØƒLØƒLØ×r*   r   ztuple[int, int]ÚSRV_POLLING_TOPOLOGIESc                  óò  € ] tR t^?tR R ltR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R  l4       t]R! R" l4       t]R# R$ l4       t]R% R& l4       t]R' R( l4       tR) R* ltR7R, R- lltR8R. R/ llt]P:                  3R0 R1 lltR2 R3 ltR4 R5 lt R6t!R+# )9ÚTopologyDescriptionc               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )é   Útopology_typer   Úserver_descriptionsú!dict[_Address, ServerDescription]Úreplica_set_nameúOptional[str]Úmax_set_versionúOptional[int]Úmax_election_idúOptional[ObjectId]Útopology_settingsr   ÚreturnÚNoner#   )Úformats   "r+   Ú__annotate__Ú TopologyDescription.__annotate__@   sP   € ÷ 1ñ 1àð1ð ?ð1ð (ð	1ð
 'ð1ð ,ð1ð ð1ð 
ñ1r*   c                óø  € Wn         W0n        W n        W@n        WPn        \        V P                  P                  4       4      V n        W`n        RV n	        V P                   \        P                  8w  d   V P                  4        V P                  pV'       g
   RV n        R# \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d
   RV n        R# \!        R V 4       4      V n        R# )a›  Representation of a deployment of MongoDB servers.

:param topology_type: initial type
:param server_descriptions: dict of (address, ServerDescription) for
    all seeds
:param replica_set_name: replica set name or None
:param max_set_version: greatest setVersion seen from a primary, or None
:param max_election_id: greatest electionId seen from a primary, or None
:param topology_settings: a TopologySettings
Nc              3  ó<   "  € T F  qP                   R J x € K  	  R # 5i©N©Úlogical_session_timeout_minutes©Ú.0Úss   & r+   Ú	<genexpr>Ú/TopologyDescription.__init__.<locals>.<genexpr>l   s   é € ÐUÑDT¸q×2Ñ2°dÕ:ÓDTùs   ‚TFc              3  ó8   "  € T F  qP                   x € K  	  R # 5irB   rC   rE   s   & r+   rH   rI   o   s   é € ð +Ù;K°a×1Ö1Ó;Kùó   ‚)Ú_topology_typeÚ_replica_set_nameÚ_server_descriptionsÚ_max_set_versionÚ_max_election_idÚlistÚvaluesÚ_candidate_serversÚ_topology_settingsÚ_incompatible_errÚTOPOLOGY_TYPEr"   Ú_init_incompatible_errÚreadable_serversÚ_ls_timeout_minutesÚanyÚmin)Úselfr1   r2   r4   r6   r8   r:   rX   s   &&&&&&& r+   Ú__init__ÚTopologyDescription.__init__@   sÎ   € ð& ,ÔØ!1ÔØ$7Ô!Ø /ÔØ /ÔÜ"& t×'@Ñ'@×'GÑ'GÓ'IÓ"JˆÔð #4Ôð "&ˆÔØ×Ñ¤-×"<Ñ"<Ô<Ø×'Ñ'Ô)ð  ×0Ñ0ÐßØ'+ˆDÖ$ß‹SÑUÑDTÓU�S�SŠSÑUÑDTÓU×UÒUØ'+ˆDÖ$ä'*ñ +Ù;Kó+ó (ˆDÖ$r*   c               ó   € V ^8„  d   QhRR/# ©r0   r;   r<   r#   )r=   s   "r+   r>   r?   s   s   € ÷ -ñ -¨ñ -r*   c                óÞ  € V P                   P                  4        EFM  pVP                  '       g   K  VP                  RJ;'       d    VP                  \        P
                  8„  pVP                  RJ;'       d    VP                  \        P                  8  pV'       dY   RVP                  ^ ,          VP                  ^,          ;'       g    ^ VP                  \        P
                  3,          V n	        KÞ  V'       g   Kè  RVP                  ^ ,          VP                  ^,          ;'       g    ^ VP                  \        P                  \        P                  3,          V n	         R# 	  R# )z>Internal compatibility check for non-load balanced topologies.Nz]Server at %s:%d requires wire version %d, but this version of PyMongo only supports up to %d.zgServer at %s:%d reports wire version %d, but this version of PyMongo requires at least %d (MongoDB %s).)rN   rR   Úis_server_type_knownÚmin_wire_versionr   ÚMAX_SUPPORTED_WIRE_VERSIONÚmax_wire_versionÚMIN_SUPPORTED_WIRE_VERSIONÚaddressrU   ÚMIN_SUPPORTED_SERVER_VERSION)r\   rG   Úserver_too_newÚserver_too_olds   &   r+   rW   Ú*TopologyDescription._init_incompatible_errs   sC  € à×*Ñ*×1Ñ1×3ˆAØ×)×)Ð)Ùð ×"Ñ"¨$Ð.÷ Kð KØ×&Ñ&¬×)JÑ)JÑJð ð ×"Ñ"¨$Ð.÷ Kð KØ×&Ñ&¬×)JÑ)JÑJð ÷ ðAð Ÿ	™	 !�ØŸ	™	 !�×)Ð)¨Ø×*Ñ*Ü×9Ñ9ð	õð Ö&÷  ‘ðLð Ÿ	™	 !�ØŸ	™	 !�×)Ð)¨Ø×*Ñ*Ü×9Ñ9Ü×;Ñ;ðõð Ô&ò óW 4r*   c               ó   € V ^8„  d   QhRR/# r`   r#   )r=   s   "r+   r>   r?   ¢   s   € ÷ =ñ = $ñ =r*   c                óT   € V P                   '       d   \        V P                   4      hR# )z–Raise ConfigurationError if any server is incompatible.

A server is incompatible if its wire protocol version range does not
overlap with PyMongo's.
N)rU   r   ©r\   s   &r+   Úcheck_compatibleÚ$TopologyDescription.check_compatible¢   s&   € ð ×!×!Ð!Ü$ T×%;Ñ%;Ó<Ð<ñ "r*   c               ó    € V ^8„  d   QhRRRR/# )r0   rg   r   r;   Úboolr#   )r=   s   "r+   r>   r?   «   s   € ÷ 4ñ 4 (ð 4¨tñ 4r*   c                	ó   € WP                   9   # rB   )rN   )r\   rg   s   &&r+   Ú
has_serverÚTopologyDescription.has_server«   s   € Ø×3Ñ3Ñ3Ð3r*   c               ó    € V ^8„  d   QhRRRR/# )r0   rg   r   r;   r.   r#   )r=   s   "r+   r>   r?   ®   s   € ÷ >ñ > Hð >Ð1Dñ >r*   c                óZ   € V P                   V,          P                  4       p\        W4      # )z;A copy of this description, with one server marked Unknown.)rN   Ú
to_unknownÚupdated_topology_description)r\   rg   Ú
unknown_sds   && r+   Úreset_serverÚ TopologyDescription.reset_server®   s&   € à×.Ñ.¨wÕ7×BÑBÓDˆ
Ü+¨DÓ=Ð=r*   c               ó   € V ^8„  d   QhRR/# )r0   r;   r.   r#   )r=   s   "r+   r>   r?   ³   s   € ÷ 
ñ 
Ð*ñ 
r*   c                ó<  € V P                   \        P                  8X  d   \        P                  pMV P                   pV P                   Uu/ uF  q"\        V4      bK  	  pp\        VVV P                  V P                  V P                  V P                  4      # u upi )z<A copy of this description, with all servers marked Unknown.)rL   rV   r   r   rN   r   r.   rM   rO   rP   rT   )r\   r1   rg   Úsdss   &   r+   ÚresetÚTopologyDescription.reset³   s’   € à×Ñ¤-×"EÑ"EÔEÜ)×=Ñ=‰Mà ×/Ñ/ˆMð CG×B[ÒB[Ó\ÑB[°wÔ)¨'Ó2Ò2ÑB[ˆÐ\ä"ØØØ×"Ñ"Ø×!Ñ!Ø×!Ñ!Ø×#Ñ#ó
ð 	
ùò ]s   ÁBc               ó   € V ^8„  d   QhRR/# )r0   r;   r3   r#   )r=   s   "r+   r>   r?   Æ   s   € ÷ 0ñ 0Ð%Fñ 0r*   c                ó6   € V P                   P                  4       # )zKdict of (address,
:class:`~pymongo.server_description.ServerDescription`).
)rN   Úcopyrn   s   &r+   r2   Ú'TopologyDescription.server_descriptionsÆ   s   € ð ×(Ñ(×-Ñ-Ó/Ð/r*   c               ó   € V ^8„  d   QhRR/# ©r0   r;   r   r#   )r=   s   "r+   r>   r?   Í   s   € ÷ #ñ #˜sñ #r*   c                ó   € V P                   # )zThe type of this topology.)rL   rn   s   &r+   r1   Ú!TopologyDescription.topology_typeÌ   s   € ð ×"Ñ"Ð"r*   c               ó   € V ^8„  d   QhRR/# ©r0   r;   Ústrr#   )r=   s   "r+   r>   r?   Ò   s   € ÷ :ñ : Cñ :r*   c                óD   € \         P                  V P                  ,          # )zEThe topology type as a human readable string.

.. versionadded:: 3.4
)rV   Ú_fieldsrL   rn   s   &r+   Útopology_type_nameÚ&TopologyDescription.topology_type_nameÑ   s   € ô ×$Ñ$ T×%8Ñ%8Õ9Ð9r*   c               ó   € V ^8„  d   QhRR/# )r0   r;   r5   r#   )r=   s   "r+   r>   r?   Ú   s   € ÷ &ñ & -ñ &r*   c                ó   € V P                   # )zThe replica set name.)rM   rn   s   &r+   r4   Ú$TopologyDescription.replica_set_nameÙ   s   € ð ×%Ñ%Ð%r*   c               ó   € V ^8„  d   QhRR/# ©r0   r;   r7   r#   )r=   s   "r+   r>   r?   ß   s   € ÷ %ñ % ñ %r*   c                ó   € V P                   # )z1Greatest setVersion seen from a primary, or None.)rO   rn   s   &r+   r6   Ú#TopologyDescription.max_set_versionÞ   ó   € ð ×$Ñ$Ð$r*   c               ó   € V ^8„  d   QhRR/# )r0   r;   r9   r#   )r=   s   "r+   r>   r?   ä   s   € ÷ %ñ %Ð!3ñ %r*   c                ó   € V P                   # )z1Greatest electionId seen from a primary, or None.)rP   rn   s   &r+   r8   Ú#TopologyDescription.max_election_idã   r˜   r*   c               ó   € V ^8„  d   QhRR/# r•   r#   )r=   s   "r+   r>   r?   é   s   € ÷ (ñ (°ñ (r*   c                ó   € V P                   # )z)Minimum logical session timeout, or None.)rY   rn   s   &r+   rD   Ú3TopologyDescription.logical_session_timeout_minutesè   s   € ð ×'Ñ'Ð'r*   c               ó   € V ^8„  d   QhRR/# ©r0   r;   úlist[ServerDescription]r#   )r=   s   "r+   r>   r?   î   s   € ÷ Yñ YÐ6ñ Yr*   c                ó†   € V P                   P                  4        Uu. uF  qP                  '       g   K  VNK  	  up# u upi )z)List of Servers of types besides Unknown.)rN   rR   rb   ©r\   rG   s   & r+   Úknown_serversÚ!TopologyDescription.known_serversí   s5   € ð  ×4Ñ4×;Ñ;Ô=ÓXÑ=�a×AWÕAW—�Ñ=ÑXÐXùÒXó   �>µ>c               ó   € V ^8„  d   QhRR/# ©r0   r;   rr   r#   )r=   s   "r+   r>   r?   ó   s   € ÷ \ñ \ 4ñ \r*   c                óÊ   € \         ;QJ d4    R V P                  P                  4        4       F  '       g   K   R# 	  R# ! R V P                  P                  4        4       4      # )z7Whether there are any Servers of types besides Unknown.c              3  óL   "  € T F  qP                   '       g   K  Vx € K  	  R # 5irB   )rb   rE   s   & r+   rH   Ú8TopologyDescription.has_known_servers.<locals>.<genexpr>õ   s   é € Ð[Ñ@˜×DZÕDZ—1’1Ó@ùs   ‚$š
$TF)rZ   rN   rR   rn   s   &r+   Úhas_known_serversÚ%TopologyDescription.has_known_serversò   sK   € ÷ ‹sÑ[˜d×7Ñ7×>Ñ>Ô@Ó[�sŒsÐ[ŠsÐ[ˆsÑ[˜d×7Ñ7×>Ñ>Ô@Ó[Ó[Ð[r*   c               ó   € V ^8„  d   QhRR/# r    r#   )r=   s   "r+   r>   r?   ø   s   € ÷ Pñ PÐ"9ñ Pr*   c                ó†   € V P                   P                  4        Uu. uF  qP                  '       g   K  VNK  	  up# u upi )zList of readable Servers.)rN   rR   Úis_readabler£   s   & r+   rX   Ú$TopologyDescription.readable_servers÷   s3   € ð  ×4Ñ4×;Ñ;Ô=ÓOÑ=�aÇÅ—�Ñ=ÑOÐOùÒOr¦   c               ó   € V ^8„  d   QhRR/# r    r#   )r=   s   "r+   r>   r?   ý   s   € ÷ 'ñ 'Ð#:ñ 'r*   c                ó   € V P                   # )z0List of Servers excluding deprioritized servers.)rS   rn   s   &r+   Úcandidate_serversÚ%TopologyDescription.candidate_serversü   s   € ð ×&Ñ&Ð&r*   c               ó   € V ^8„  d   QhRR/# r•   r#   )r=   s   "r+   r>   r?     s   € ÷ ñ  ]ñ r*   c                óf   € V P                   pV'       d   \        R V P                    4       4      # R# )z3Minimum of all servers' max wire versions, or None.c              3  ó8   "  € T F  qP                   x € K  	  R # 5irB   )re   rE   s   & r+   rH   Ú:TopologyDescription.common_wire_version.<locals>.<genexpr>  s   é € ÐFÑ3E¨a×)Ö)Ó3EùrK   N)r¤   r[   ©r\   Úserverss   & r+   Úcommon_wire_versionÚ'TopologyDescription.common_wire_version  s,   € ð ×$Ñ$ˆßÜÑF°4×3EÒ3EÓFÓFÐFár*   c               ó   € V ^8„  d   QhRR/# r‡   r#   )r=   s   "r+   r>   r?     s   € ÷ ;ñ ; Sñ ;r*   c                	ó.   € V P                   P                  # rB   )rT   Úheartbeat_frequencyrn   s   &r+   rÀ   Ú'TopologyDescription.heartbeat_frequency
  s   € à×&Ñ&×:Ñ:Ð:r*   c               ó   € V ^8„  d   QhRR/# r‡   r#   )r=   s   "r+   r>   r?     s   € ÷ 6ñ 6˜sñ 6r*   c                	ó.   € V P                   P                  # rB   )rT   Ú_srv_max_hostsrn   s   &r+   Úsrv_max_hostsÚ!TopologyDescription.srv_max_hosts  s   € à×&Ñ&×5Ñ5Ð5r*   c               ó    € V ^8„  d   QhRRRR/# )r0   Ú	selectionzOptional[Selection]r;   r¡   r#   )r=   s   "r+   r>   r?     s   € ÷ 
ñ 
Ð0Cð 
ÐH_ñ 
r*   c                	óÈ  € V'       g   . # . pVP                    FV  pVP                  f+   RVP                   RV  RVP                    2p\        V4      hVP	                  VP                  4       KX  	  \        V4      pV P                  P                  R,          pVP                    Uu. uF-  p\        \        VP                  4      V,
          V8:  g   K+  VNK/  	  up# u upi )Nzround_trip_time for server z is unexpectedly None: z, servers: g     @�@)
r2   Úround_trip_timerg   r   Úappendr[   rT   Úlocal_threshold_msr   Úfloat)r\   rÈ   Úround_trip_timesÚserverÚconfig_err_msgÚfastestÚ	thresholdrG   s   &&      r+   Ú_apply_local_thresholdÚ*TopologyDescription._apply_local_threshold  só   € ßØˆIØ(*ÐØ×3Ô3ˆFØ×%Ñ%Ò-Ø#>¸v¿~¹~Ð>NÐNeÐfjÐekÐkvð  xA÷  xUñ  xUð  wVð  "W�Ü(¨Ó8Ð8Ø×#Ñ# F×$:Ñ$:Ö;ñ	 4ô Ð&Ó'ˆØ×+Ñ+×>Ñ>ÀÕGˆ	ð ×2Ò2ó
á2�Ü”U˜A×-Ñ-Ó.°Õ8¸YÑF÷ ˆAÙ2ñ
ð 	
ùò 
s   Â)(CÃCNc               ó    € V ^8„  d   QhRRRR/# )r0   Údeprioritized_serversú!Optional[list[ServerDescription]]r;   r<   r#   )r=   s   "r+   r>   r?   $  s    € ÷ Eñ EØ%FðEà	ñEr*   c                ó  € V'       g   V P                   V n        R# V Uu0 uF  q"P                  kK  	  ppV P                    Uu. uF  pVP                  V9  g   K  VNK  	  ppT;'       g    V P                   V n        R# u upi u upi )zBFilter out deprioritized servers from a list of server candidates.N)r¤   rS   rg   )r\   rÖ   ÚsdÚdeprioritized_addressesrÏ   Úfiltereds   &&    r+   Ú_filter_serversÚ#TopologyDescription._filter_servers$  sˆ   € ÷ %Ø&*×&8Ñ&8ˆDÖ#á<QÓ&RÑ<Q°b§z¤zÑ<QÐ#Ð&Rð #×0Ò0óá0�FØ—>‘>Ð)@Ñ@÷ �Ù0ð ð ð
 '/×&DÐ&D°$×2DÑ2DˆDÖ#ùò 'Sùòs    BÁBÁBc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r0   Úselectorr   rg   zOptional[_Address]Úcustom_selectorzOptional[_ServerSelector]rÖ   r×   r;   r¡   r#   )r=   s   "r+   r>   r?   3  sD   € ÷ M6ñ M6àðM6ð $ðM6ð 3ð	M6ð
  AðM6ð 
!ñM6r*   c                ó\  € \        VR^ 4      '       dC   V P                  pV'       d/   WQP                  8  d   \        RWP                  V3,          4      h\	        V\
        4      '       d   VP                  V 4       V P                  \        P                  8X  d   . # V P                  \        P                  \        P                  39   d   V P                  # V'       d?   V P                  4       P                  V4      pV'       d   VP                  '       d   V.# . # V P!                  V4       V P                  \        P"                  8X  d¦   \%        V4      \&        J d“   V P(                   F9  pVP*                  \,        P.                  8X  g   K$  V.pV'       d	   V! V4      pVu # 	  V'       d@   V F9  pVP*                  \,        P.                  8X  g   K$  V.pV'       d	   V! V4      pVu # 	  . # \0        P2                  ! V 4      p	V P                  \        P4                  8w  dH   V! V	4      p	V	'       g8   V'       d0   V P!                  R4       \0        P2                  ! V 4      p	V! V	4      p	Ve*   V	'       d"   V	P7                  V! V	P                  4      4      p	V P9                  V	4      # )aD  List of servers matching the provided selector(s).

:param selector: a callable that takes a Selection as input and returns
    a Selection as output. For example, an instance of a read
    preference from :mod:`~pymongo.read_preferences`.
:param address: A server address to select.
:param custom_selector: A callable that augments server
    selection rules. Accepts a list of
    :class:`~pymongo.server_description.ServerDescription` objects and
    return a list of server descriptions that should be considered
    suitable for the desired operation.

.. versionadded:: 3.4
rc   zF%s requires min wire version %d, but topology's min wire version is %dN)Úgetattrr¼   rc   r   Ú
isinstancer   Úselection_hookr1   rV   r!   r   r"   r¤   r2   Úgetrb   rÜ   r   Útyper   rS   Úserver_typer   Ú	RSPrimaryr   Úfrom_topology_descriptionr    Úwith_server_descriptionsrÓ   )
r\   rß   rg   rà   rÖ   Ú	common_wvÚdescriptionrÙ   r   rÈ   s
   &&&&&     r+   Úapply_selectorÚ"TopologyDescription.apply_selector3  s.  € ô* �8Ð/°×3Ò3Ø×0Ñ0ˆIß˜Y×)BÑ)BÔBÜ(ð*Ø-5×7PÑ7PÐR[Ð,\õ]óð ô
 �h¤×.Ò.Ø×#Ñ# DÔ)à×Ñ¤×!6Ñ!6Ô6ØˆIØ×Ñ¤M×$8Ñ$8¼-×:TÑ:TÐ#UÔUà×%Ñ%Ð%ßà×2Ñ2Ó4×8Ñ8¸ÓAˆKß$/°K×4T×4TÐ4T�K�=Ð\ÐZ\Ð\à×ÑÐ2Ô3à×Ñ¤×!DÑ!DÔDÌÈhËÔ[bÓIbØ×-Ô-�Ø—>‘>¤[×%:Ñ%:Ö:Ø˜$�Cß&Ù-¨cÓ2˜Ø’Jñ .÷ %Û/�BØ—~‘~¬×)>Ñ)>Ö>Ø!˜d˜ß*Ù"1°#Ó"6˜CØ"š
ñ 0ð ˆIä×7Ò7¸Ó=ˆ	à×Ñ¤×!6Ñ!6Ô6Ù  Ó+ˆIç×!6Ø×$Ñ$ TÔ*Ü%×?Ò?ÀÓE�	Ù$ YÓ/�	ð Ò&¯9Ø!×:Ñ:Ù 	× =Ñ =Ó>óˆIð ×*Ñ*¨9Ó5Ð5r*   c               ó    € V ^8„  d   QhRRRR/# )r0   Úread_preferencer   r;   rr   r#   )r=   s   "r+   r>   r?   ‚  s   € ÷ 9ñ 9°;ð 9Ð\`ñ 9r*   c                ód   € \         P                  ! RV4       \        V P                  V4      4      # )a~  Does this topology have any readable servers available matching the
given read preference?

:param read_preference: an instance of a read preference from
    :mod:`~pymongo.read_preferences`. Defaults to
    :attr:`~pymongo.read_preferences.ReadPreference.PRIMARY`.

.. note:: When connected directly to a single server this method
  always returns ``True``.

.. versionadded:: 3.4
rð   )r   Úvalidate_read_preferencerZ   rí   )r\   rð   s   &&r+   Úhas_readable_serverÚ'TopologyDescription.has_readable_server‚  s+   € ô 	×'Ò'Ð(9¸?ÔKÜ�4×&Ñ& Ó7Ó8Ð8r*   c               ó   € V ^8„  d   QhRR/# r¨   r#   )r=   s   "r+   r>   r?   ’  s   € ÷ @ñ @ Tñ @r*   c                ó@   € V P                  \        P                  4      # )z©Does this topology have a writable server available?

.. note:: When connected directly to a single server this method
  always returns ``True``.

.. versionadded:: 3.4
)ró   r   ÚPRIMARYrn   s   &r+   Úhas_writable_serverÚ'TopologyDescription.has_writable_server’  s   € ð ×'Ñ'¬×(>Ñ(>Ó?Ð?r*   c               ó   € V ^8„  d   QhRR/# r‹   r#   )r=   s   "r+   r>   r?   œ  s   € ÷ 
ñ 
˜#ñ 
r*   c                	óÚ   € \        V P                  P                  4       R  R7      pRP                  V P                  P
                  V P                  P                  V P                  V4      # )c                ó   € V P                   # rB   )rg   )rÙ   s   &r+   Ú<lambda>Ú.TopologyDescription.__repr__.<locals>.<lambda>ž  s   € ÈBÏJÊJr*   )Úkeyz-<{} id: {}, topology_type: {}, servers: {!r}>)	ÚsortedrN   rR   r=   Ú	__class__r$   rT   Ú_topology_idr�   rº   s   & r+   Ú__repr__ÚTopologyDescription.__repr__œ  sY   € ä˜×2Ñ2×9Ñ9Ó;ÑAVÔWˆØ>×EÑEØ�N‰N×#Ñ#Ø×#Ñ#×0Ñ0Ø×#Ñ#Øó	
ð 	
r*   )	rS   rU   rY   rP   rO   rM   rN   rT   rL   rB   )NNN)"r$   r%   r&   r'   r]   rW   ro   rt   r{   r€   r2   Úpropertyr1   r�   r4   r6   r8   rD   r¤   r¬   rX   r´   r¼   rÀ   rÅ   rÓ   rÜ   rí   r   r÷   ró   rø   r  r)   r#   r*   r+   r.   r.   ?   se  † õ1õf-õ^=õ4õ>õ

õ&0ð ô#ó ð#ð ô:ó ð:ð ô&ó ð&ð ô%ó ð%ð ô%ó ð%ð ô(ó ð(ð ôYó ðYð ô\ó ð\ð ôPó ðPð ô'ó ð'ð ôó ðð ô;ó ð;ð ô6ó ð6õ
÷$E÷M6ð^ BP×AWÑAW÷ 9õ @÷
ñ 
r*   r.   c               ó$   € V ^8„  d   QhRRRRRR/# )r0   Útopology_descriptionr.   Úserver_descriptionr   r;   r#   )r=   s   "r+   r>   r>   ³  s)   € ÷ eñ eØ-ðeØCTðeàñer*   c                ó   € VP                   pV P                  pV P                  pV P                  pV P                  pVP
                  pV P                  4       pWV&   V\        P                  8X  du   VeI   WAP                  8w  d9   \        RP                  WAP                  4      4      p	VP                  V	R7      W‚&   \        \        P                  VVVVV P                  4      # V\        P                  8X  dŸ   V\        P                   \        P"                  39   dH   \%        V P                  P&                  4      ^8X  d   \        P                  pMDVP)                  V4       M2V\        P                  \        P*                  39  d   \,        V,          pV\        P.                  8X  d9   V\        P0                  \        P                  39  d   VP)                  V4       EM€V\        P2                  8X  d£   V\        P                   \        P0                  39   d   VP)                  V4       EM3V\        P4                  8X  d   \7        W„WV4      w  r4rVEMV\        P8                  \        P:                  \        P<                  39   d   \?        W„V4      w  r4MÉV\        P@                  8X  dµ   V\        P                   \        P0                  39   d   VP)                  V4       \C        V4      pMrV\        P4                  8X  d   \7        W„WV4      w  r4rVMLV\        P8                  \        P:                  \        P<                  39   d   \E        W„V4      pM\C        V4      p\        VVVVVV P                  4      # )aV  Return an updated copy of a TopologyDescription.

:param topology_description: the current TopologyDescription
:param server_description: a new ServerDescription that resulted from
    a hello call

Called after attempting (successfully or not) to call hello on the
server at server_description.address. Does not modify topology_description.
zeclient is configured to connect to a replica set named '{}' but this node belongs to a set named '{}')Úerror)#rg   r1   r4   r6   r8   rç   r2   rV   r   r   r=   rx   r.   rT   r!   r   Ú
StandaloneÚLoadBalancerÚlenÚseedsÚpopÚRSGhostÚ_SERVER_TYPE_TO_TOPOLOGY_TYPEr    ÚMongosr   rè   Ú_update_rs_from_primaryÚRSSecondaryÚ	RSArbiterÚRSOtherÚ!_update_rs_no_primary_from_memberr   Ú_check_has_primaryÚ#_update_rs_with_primary_from_member)
r  r  rg   r1   Úset_namer6   r8   rç   r   r
  s
   &&        r+   ry   ry   ³  sõ  € ð !×(Ñ(€Gð )×6Ñ6€MØ#×4Ñ4€HØ*×:Ñ:€OØ*×:Ñ:€OØ$×0Ñ0€Kð ×
2Ñ
2Ó
4€Cð &ˆ�Làœ×,Ñ,Ô,àÒ H×0SÑ0SÔ$SÜ&ðAßAGÁØ×AÑAóBóˆEð .×8Ñ8¸uÐ8ÓEˆC‰Lä"Ü× Ñ ØØØØØ ×3Ñ3ó
ð 	
ð œ×-Ñ-Ô-Øœ;×1Ñ1´;×3KÑ3KÐLÔLÜÐ'×:Ñ:×@Ñ@ÓAÀQÔFÜ -× 4Ñ 4‘ð —‘˜Õ Ø¤×!4Ñ!4´k×6IÑ6IÐ JÔJÜ9¸+ÕFˆMàœ×-Ñ-Ô-Øœ{×1Ñ1´;×3FÑ3FÐGÔGØ�G‰G�GÔùà	œ-×;Ñ;Ô	;Øœ;×1Ñ1´;×3EÑ3EÐFÔFØ�G‰G�GÖàœK×1Ñ1Ô1ÜJaØÐ1ÀOóKÑGˆ] o±ð œ[×4Ñ4´k×6KÑ6KÌ[×M`ÑM`ÐaÔaÜ&GØÐ1ó'Ñ#ˆMøð 
œ-×=Ñ=Ô	=Øœ;×1Ñ1´;×3EÑ3EÐFÔFØ�G‰G�GÔÜ.¨sÓ3‰MàœK×1Ñ1Ô1ÜJaØÐ1ÀOóKÑGˆ] o°ð œ[×4Ñ4´k×6KÑ6KÌ[×M`ÑM`ÐaÔaÜ?ÀÐOaÓb‰Mô /¨sÓ3ˆMô ØØØØØØ×/Ñ/óð r*   c               ó$   € V ^8„  d   QhRRRRRR/# )r0   r  r.   Úseedlistzlist[tuple[str, Any]]r;   r#   )r=   s   "r+   r>   r>     s$   € ÷ (ñ (Ø-ð(Ø9Nð(àñ(r*   c           	     óä  € V P                   \        9   g   Q hV P                  4       p\        VP	                  4       4      \        V4      8X  d   V # \        VP	                  4       4       F  pW19  g   K  VP                  V4       K  	  V P                  ^ 8w  dx   \        V4      \        VP	                  4       4      ,
          pV P                  \        V4      ,
          pV^ 8”  d*   \        \        V4      \        V\        V4      4      4      pM. pV F  pW29  g   K  \        V4      W#&   K  	  \        V P                   VV P                  V P                  V P                   V P"                  4      # )zÎReturn an updated copy of a TopologyDescription.

:param topology_description: the current TopologyDescription
:param seedlist: a list of new seeds new ServerDescription that resulted from
    a hello call
)r1   r,   r2   ÚsetÚkeysrQ   r  rÅ   r  r   r   r[   r   r.   r4   r6   r8   rT   )r  r  r   rg   Ú	new_hostsÚn_to_adds   &&    r+   Ú)_updated_topology_description_srv_pollingr"    s-  € ð  ×-Ñ-Ô1GÔGÐGÐGà
×
2Ñ
2Ó
4€Cô ˆ3�8‰8‹:ƒœ#˜h›-Ô'Ø#Ð#ô ˜Ÿ™›
Ö#ˆØÖ"Ø�G‰G�GÖñ $ð ×)Ñ)¨QÔ.Ü˜“M¤C¨¯©«
£OÕ3ˆ	Ø'×5Ñ5¼¸C»Õ@ˆØ�aŒ<Üœf YÓ/´°X¼sÀ9»~Ó1NÓO‰HàˆHãˆØÖÜ,¨WÓ5ˆC‹Lñ ô Ø×*Ñ*ØØ×-Ñ-Ø×,Ñ,Ø×,Ñ,Ø×/Ñ/óð r*   c               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )r0   r   ú+MutableMapping[_Address, ServerDescription]r4   r5   r  r   r6   r7   r8   r9   r;   z<tuple[int, Optional[str], Optional[int], Optional[ObjectId]]r#   )r=   s   "r+   r>   r>   F  sU   € ÷ UYñ UYØ	4ðUYà#ðUYð *ðUYð #ð	UYð
 (ðUYð BñUYr*   c                ó|  € Vf   VP                   pM9WP                   8w  d*   V P                  VP                  4       \        V 4      WV3# VP                  e   VP                  ^8  d¦   VP
                  VP                  3pW43pRV9  dT   RV9  dA   WV8  d;   VP                  \        RV RV 24      4      WP                  &   \        V 4      WV3# VP                  pVP
                  e"   Ve   VP
                  V8”  d   VP
                  pMËVP                  VP
                  3pWC3p\        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p\        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      pWx8  d;   VP                  \        RV RV 24      4      WP                  &   \        V 4      WV3# VP                  pVP
                  pV P                  4        Ff  p	V	P                  \        P                  J g   K#  V	P                  VP                  8w  g   K@  V	P                  \        R4      4      W	P                  &    M	  VP                   F  p
W 9  g   K  \        V
4      W
&   K  	  \!        V 4      VP                  ,
           F  pV P                  V4       K  	  \        V 4      WV3# )aO  Update topology description from a primary's hello response.

Pass in a dict of ServerDescriptions, current replica set name, the
ServerDescription we are processing, and the TopologyDescription's
max_set_version and max_election_id if any.

Returns (new topology type, new replica_set_name, new max_set_version,
new max_election_id).
Nz<primary marked stale due to electionId/setVersion mismatch, z is stale compared to c              3  ó@   "  € T F  qf   \        4       MTx € K  	  R # 5irB   r   ©rF   Úis   & r+   rH   Ú*_update_rs_from_primary.<locals>.<genexpr>t  ó   é € Ð![ÑHZÀ1ªi¤&¤(¸QÔ">ÓHZùó   ‚c              3  ó@   "  € T F  qf   \        4       MTx € K  	  R # 5irB   r   r'  s   & r+   rH   r)  u  r*  r+  z6primary marked stale due to discovery of newer primary)r4   r  rg   r  re   Úset_versionÚelection_idrx   r   ÚtuplerR   rç   r   rè   Ú	all_hostsr   r  )r   r4   r  r6   r8   Únew_election_tupleÚmax_election_tupleÚnew_election_safeÚmax_election_saferÏ   Únew_addressÚaddrs   &&&&&       r+   r  r  F  sÉ  € ð  ÒØ-×>Ñ>Ñà	×@Ñ@Ô	@ð 	�‰Ð"×*Ñ*Ô+Ü! #Ó&Ð(8È?ÐZÐZà×*Ñ*Ò2Ð6H×6YÑ6YÐ\^Ô6^Ø%7×%CÑ%CÐEW×EcÑEcÐ$dÐØ%4Ð$FÐØÐ)Ô)ØÐ-Ô-Ð2DÔ2Yà2D×2OÑ2OÜ ØVÐWiÐVjð  kAð  BTð  AUð  Vóó3�×.Ñ.Ñ/ô
 *¨#Ó.Ð0@ÐSbÐbÐbØ0×<Ñ<ˆOà×)Ñ)Ò5ØÒ#Ð'9×'EÑ'EÈÔ'Wà0×<Ñ<ˆOøà/×;Ñ;Ð=O×=[Ñ=[Ð[ÐØ,Ð=Ðß!œEÑ![ÑHZÓ![ŸE™EÑ![ÑHZÓ![Ó[Ðß!œEÑ![ÑHZÓ![ŸE™EÑ![ÑHZÓ![Ó[ÐØÔ0à.@×.KÑ.KÜØRÐSeÐRfÐf|ð  ~Pð  }Qð  Róó/ˆC×*Ñ*Ñ+ô
 & cÓ*Ð,<ÈÐ^Ð^à0×<Ñ<ˆOØ0×<Ñ<ˆOð —*‘*–,ˆà×Ñ¤+×"7Ñ"7Õ7Ø—‘Ð"4×"<Ñ"<Ö<ð #)×"3Ñ"3ÜÐUÓVó#ˆC—‘Ññ
 ñ ð *×3Ô3ˆØÖ!Ü0°Ó=ˆCÓñ 4ô
 �C“Ð-×7Ñ7×7Ð7ˆØ�‰�Žñ 8ô
 ˜sÓ#Ð%5ÈÐXÐXr*   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   r   r$  r4   r5   r  r   r;   r   r#   )r=   s   "r+   r>   r>   ž  s0   € ÷ #ñ #Ø	4ð#à#ð#ð *ð#ð 	ñ	#r*   c                ó  € Vf   Q hWP                   8w  d   V P                  VP                  4       MHVP                  '       d7   VP                  VP                  8w  d   V P                  VP                  4       \	        V 4      # )zÈRS with known primary. Process a response from a non-primary.

Pass in a dict of ServerDescriptions, current replica set name, and the
ServerDescription we are processing.

Returns new topology type.
)r4   r  rg   Úmer  )r   r4   r  s   &&&r+   r  r  ž  sp   € ð Ò'Ð'Ð'à×>Ñ>Ô>Ø�‰Ð"×*Ñ*Õ+Ø	×	×	Ð	Ð#5×#=Ñ#=ÐAS×AVÑAVÔ#VØ�‰Ð"×*Ñ*Ô+ô ˜cÓ"Ð"r*   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r0   r   r$  r4   r5   r  r   r;   ztuple[int, Optional[str]]r#   )r=   s   "r+   r>   r>   µ  s0   € ÷ +ñ +Ø	4ð+à#ð+ð *ð+ð ñ	+r*   c                ó†  € \         P                  pVf   VP                  pM.WP                  8w  d   V P                  VP                  4       W13# VP
                   F  pW@9  g   K  \        V4      W&   K  	  VP                  '       d7   VP                  VP                  8w  d   V P                  VP                  4       W13# )zâRS without known primary. Update from a non-primary's response.

Pass in a dict of ServerDescriptions, current replica set name, and the
ServerDescription we are processing.

Returns (new topology type, new replica_set_name).
)rV   r   r4   r  rg   r0  r   r9  )r   r4   r  r1   rg   s   &&&  r+   r  r  µ  s¬   € ô "×5Ñ5€MØÒØ-×>Ñ>Ñà	×@Ñ@Ô	@Ø�‰Ð"×*Ñ*Ô+ØÐ.Ð.ð &×/Ô/ˆØÖÜ,¨WÓ5ˆC‹Lñ 0ð ××ÐÐ!3×!;Ñ!;Ð?Q×?TÑ?TÔ!TØ�‰Ð"×*Ñ*Ô+àÐ*Ð*r*   c               ó    € V ^8„  d   QhRRRR/# )r0   r   z$Mapping[_Address, ServerDescription]r;   r   r#   )r=   s   "r+   r>   r>   Õ  s   € ÷ 1ñ 1Ð@ð 1ÀSñ 1r*   c                ó²   € V P                  4        F4  pVP                  \        P                  8X  g   K$  \        P
                  u # 	  \        P                  # )z‹Current topology type is ReplicaSetWithPrimary. Is primary still known?

Pass in a dict of ServerDescriptions.

Returns new topology type.
)rR   rç   r   rè   rV   r   r   )r   rG   s   & r+   r  r  Õ  s@   € ð �Z‰ZŽ\ˆØ�=‰=œK×1Ñ1Ö1Ü ×6Ñ6Ò6ñ ô ×0Ñ0Ð0r*   N)<Ú__conditional_annotations__Ú__doc__Ú
__future__r   Úrandomr   Útypingr   r   r   r   r   r	   r
   r   Úbson.min_keyr   Úbson.objectidr   Úpymongor   Úpymongo.errorsr   r   Úpymongo.read_preferencesr   r   r   r   Úpymongo.server_descriptionr   Úpymongo.server_selectorsr   Úpymongo.server_typer   Úpymongo.typingsr   r   ÚrangerV   r!   r    r,   r(   Ú_ServerSelectorr.   r  rè   r   r  r   r  r  r  ry   r"  r  r  r  r  )r>  s   @r+   Ú<module>rN     s-  øðôõ #å ÷	÷ 	ó 	õ  Ý "Ý ß ;ß XÓ XÝ 8Ý .Ý +Ý $ô�Jô ñ ™u Q›xÑ(€ð ,9×+@Ñ+@À-×BWÑBWÐ*XÐ ˜Ó Xð ˜DÐ!2Õ3Ð4°dÐ;LÕ6MÐMÕN€÷e
ñ e
ðV ×Ñ˜×-Ñ-Ø×Ñ˜=×>Ñ>Ø×Ñ˜]×>Ñ>Ø×Ñ˜=×<Ñ<Ø×Ñ˜×:Ñ:ð!Ð õeõP(õVUYõp#õ.+÷@1r*   