Ë
    Ü_ËiÏ  ã                  óì   — d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddlmZ erddlmZ ddlmZ  e	d«      Zeeef   Zee   Z G 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„Zdd„Zy)zFCriteria to select some ServerDescriptions from a TopologyDescription.é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚMappingÚOptionalÚSequenceÚTypeVarÚcast)ÚSERVER_TYPE)ÚServerDescription)ÚTopologyDescriptionÚTc                  ó�   — e Zd ZdZedd„«       Z	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Ze	dd„«       Z
e	dd„«       Ze	dd„«       Zdd	„Zdd
„Zy)Ú	Selectionz.Input or output of a server selector function.c                ó²   — |j                   }d }|D ]#  }|j                  t        j                  k(  sŒ!|} n t	        ||j                   |j
                  |«      S ©N)Úcandidate_serversÚserver_typer   Ú	RSPrimaryr   Úcommon_wire_version)ÚclsÚtopology_descriptionr   ÚprimaryÚsds        ú[/var/www/pod-logistic/pod-api/venv/lib/python3.12/site-packages/pymongo/server_selectors.pyÚfrom_topology_descriptionz#Selection.from_topology_description#   sc   € à0×BÑBÐØˆØ#ò 	ˆBØ�~‰~¤×!6Ñ!6Ó6Ø�Ùð	ô
 Ø Ø ×2Ñ2Ø ×4Ñ4Øó	
ð 	
ó    c                ó<   — || _         || _        || _        || _        y r   )r   Úserver_descriptionsr   r   )Úselfr   r   r   r   s        r   Ú__init__zSelection.__init__3   s#   € ð %9ˆÔ!Ø#6ˆÔ ØˆŒØ#6ˆÕ r   c                óZ   — t        | j                  || j                  | j                  «      S r   )r   r   r   r   )r    r   s     r   Úwith_server_descriptionsz"Selection.with_server_descriptions?   s,   € ÜØ×%Ñ%Ð':¸D×<TÑ<TÐVZ×VbÑVbó
ð 	
r   c                ób   — t        | «      }|j                  rt        |j                  d„ ¬«      S y )Nc                ó6   — t        t        | j                  «      S r   )r
   ÚfloatÚlast_write_date)r   s    r   ú<lambda>z>Selection.secondary_with_max_last_write_date.<locals>.<lambda>H   s   € ÄÄUÈB×L^ÑL^Ó@_€ r   )Úkey)Úsecondary_server_selectorr   Úmax)r    Úsecondariess     r   Ú"secondary_with_max_last_write_datez,Selection.secondary_with_max_last_write_dateD   s3   € Ü/°Ó5ˆØ×*Ò*ÜØ×/Ñ/Ñ5_ôð ð r   c                óZ   — | j                   r| j                   gng }| j                  |«      S r   )r   r#   )r    Ú	primariess     r   Úprimary_selectionzSelection.primary_selectionL   s&   € à&*§l¢l�T—\‘\‘N¸ˆ	Ø×,Ñ,¨YÓ7Ð7r   c                ó.   — | j                   j                  S r   )r   Úheartbeat_frequency©r    s    r   r2   zSelection.heartbeat_frequencyQ   s   € à×(Ñ(×<Ñ<Ð<r   c                ó.   — | j                   j                  S r   )r   Útopology_typer3   s    r   r5   zSelection.topology_typeU   s   € à×(Ñ(×6Ñ6Ð6r   c                ó,   — t        | j                  «      S r   )Úboolr   r3   s    r   Ú__bool__zSelection.__bool__Y   s   € Ü�D×,Ñ,Ó-Ð-r   c                ó    — | j                   |   S r   )r   )r    Úitems     r   Ú__getitem__zSelection.__getitem__\   s   € Ø×'Ñ'¨Ñ-Ð-r   N)r   r   Úreturnr   )r   r   r   úlist[ServerDescription]r   zOptional[int]r   úOptional[ServerDescription])r   r=   r<   r   )r<   r>   )r<   r   )r<   Úint)r<   r7   )r:   r?   r<   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r!   r#   r-   Úpropertyr0   r2   r5   r8   r;   © r   r   r   r       s’   „ Ù8àò
ó ð
ð
7à1ð
7ð 5ð
7ð +ð	
7ð
 -ó
7ó
ó
ð ò8ó ð8ð ò=ó ð=ð ò7ó ð7ó.ô.r   r   c                ó   — | S r   rF   ©Ú	selections    r   Úany_server_selectorrJ   `   s   € ØÐr   c                óx   — | j                  | j                  D �cg c]  }|j                  sŒ|‘Œ c}«      S c c}w r   )r#   r   Úis_readable©rI   Úss     r   Úreadable_server_selectorrO   d   ó2   € Ø×-Ñ-Ø×1Ñ1ÖCˆq°Q·]³]ŠÒCóð ùÚCó   š7¬7c                óx   — | j                  | j                  D �cg c]  }|j                  sŒ|‘Œ c}«      S c c}w r   )r#   r   Úis_writablerM   s     r   Úwritable_server_selectorrT   j   rP   rQ   c                óš   — | j                  | j                  D �cg c]"  }|j                  t        j                  k(  sŒ!|‘Œ$ c}«      S c c}w r   )r#   r   r   r   ÚRSSecondaryrM   s     r   r*   r*   p   s=   € Ø×-Ñ-Ø×1Ñ1Ö^ˆq°Q·]±]Äk×F]ÑF]Ó5]ŠÒ^óð ùÚ^ó
   š"A½Ac                óš   — | j                  | j                  D �cg c]"  }|j                  t        j                  k(  sŒ!|‘Œ$ c}«      S c c}w r   )r#   r   r   r   Ú	RSArbiterrM   s     r   Úarbiter_server_selectorrZ   v   s=   € Ø×-Ñ-Ø×1Ñ1Ö\ˆq°Q·]±]Äk×F[ÑF[Ó5[ŠÒ\óð ùÚ\rW   c                ó2   — t        | «      xs t        | «      S )z6Like PrimaryPreferred but doesn't use tags or latency.)rT   r*   rH   s    r   Ú"writable_preferred_server_selectorr\   |   s   € ä# IÓ.ÒVÔ2KÈIÓ2VÐVr   c                ó’   ‡ — dˆ fd„}|j                  |j                  D �cg c]  } ||j                  «      sŒ|‘Œ c}«      S c c}w )zäAll servers matching one tag set.

    A tag set is a dict. A server matches if its tags are a superset:
    A server tagged {'a': '1', 'b': '2'} matches the tag set {'a': '1'}.

    The empty tag set {} matches any server.
    c                óR   •— ‰j                  «       D ]  \  }}|| vs	| |   |k7  sŒ y y)NFT)Úitems)Úserver_tagsr)   ÚvalueÚtag_sets      €r   Ú
tags_matchz(apply_single_tag_set.<locals>.tags_matchŠ   s8   ø€ Ø!Ÿ-™-›/ò 	‰JˆC�Ø˜+Ñ%¨°SÑ)9¸UÓ)BÙð	ð r   )r`   zMapping[str, Any]r<   r7   )r#   r   Útags)rb   rI   rc   rN   s   `   r   Úapply_single_tag_setre   �   s?   ø€ õð ×-Ñ-Ø×1Ñ1ÖHˆq±ZÀÇÁÕ5GŠÒHóð ùÚHs
   ¡A¹Ac                óV   — | D ]  }t        ||«      }|sŒ|c S  |j                  g «      S )aN  All servers match a list of tag sets.

    tag_sets is a list of dicts. The empty tag set {} matches any server,
    and may be provided at the end of the list as a fallback. So
    [{'a': 'value'}, {}] expresses a preference for servers tagged
    {'a': 'value'}, but accepts any server if none matches the first
    preference.
    )re   r#   )Útag_setsrI   rb   Úwith_tag_sets       r   Úapply_tag_setsri   –   s;   € ð ò  ˆÜ+¨G°YÓ?ˆÚØÒð ð
 ×-Ñ-¨bÓ1Ð1r   c                ó,   — t        | t        |«      «      S )z2All near-enough secondaries matching the tag sets.)ri   r*   ©rg   rI   s     r   Ú#secondary_with_tags_server_selectorrl   §   s   € ä˜(Ô$=¸iÓ$HÓIÐIr   c                ó,   — t        | t        |«      «      S )z.All near-enough members matching the tag sets.)ri   rO   rk   s     r   Ú member_with_tags_server_selectorrn   ¬   s   € ä˜(Ô$<¸YÓ$GÓHÐHr   N)rI   r   r<   r   )rI   r   r<   r   )rb   ÚTagSetrI   r   r<   r   )rg   ÚTagSetsrI   r   r<   r   ) rC   Ú
__future__r   Útypingr   r   r   r   r   r	   r
   Úpymongo.server_typer   Úpymongo.server_descriptionr   Úpymongo.topology_descriptionr   r   Ústrro   rp   r   rJ   rO   rT   r*   rZ   r\   re   ri   rl   rn   rF   r   r   ú<module>rw      s†   ðñ MÝ "ç Q× QÑ Qå +áÝ<Ý@ñ ˆCƒL€Ø	��c�Ñ	€Ø
�6Ñ
€÷=.ñ =.ó@óóóóóWó
ó*2ó"Jô
Ir   