Ë
    Ü_Ëiæ  ã                  ó˜   — d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
mZ ddlmZ erddlmZ dZdd	„Zdd
„Zdd„ZdZ G d„ d«      Zy)zASupport for resolving hosts and options from mongodb+srv:// URIs.é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚOptionalÚUnion)ÚCONNECT_TIMEOUT)ÚConfigurationError©ÚresolverTc                 ó,   — 	 dd l } y# t        $ r Y yw xY w)Nr   TF)ÚdnsÚImportError)r   s    úc/var/www/pod-logistic/pod-api/venv/lib/python3.12/site-packages/pymongo/synchronous/srv_resolver.pyÚ_have_dnspythonr      s   € ðÛàøÜò Ùðús   ‚ ‡	’c                óF   — t        | t        «      r| j                  «       S | S )N)Ú
isinstanceÚbytesÚdecode)Útexts    r   Úmaybe_decoder   *   s   € Ü�$œÔØ�{‰{‹}ÐØ€Kó    c                 ón   — t         rddlm}  |j                  | i |¤ŽS ddlm}  |j                  | i |¤ŽS )Nr   r
   )Úasyncresolver)Ú_IS_SYNCr   r   Úresolver   )ÚargsÚkwargsr   r   s       r   Ú_resolver   1   s;   € ÝÝ àˆx×Ñ Ð0¨Ñ0Ð0å%à$ˆ}×$Ñ$ dÐ5¨fÑ5Ð5r   zdInvalid URI host: %s is not a valid hostname for 'mongodb+srv://'. Did you mean to use 'mongodb://'?c                  óV   — e Zd Z	 d	 	 	 	 	 	 	 d	d„Zd
d„Zdd„Z	 	 	 	 dd„Zdd„Zdd„Zy)Ú_SrvResolverc                óÆ  — || _         || _        |xs t        | _        |xs d| _        	 t        j                  |«       t        t        dz  «      ‚# t        $ r Y nw xY w	 | j                   j                  d«      }t        |«      dkD  r|dd  n|| _        n!# t        $ r t        t        |fz  «      d ‚w xY wt        | j                  «      | _        t        |«      | _        y )Nr   )zan IP addressú.é   é   )Ú_SrvResolver__fqdnÚ_SrvResolver__srvr   Ú_SrvResolver__connect_timeoutÚ_SrvResolver__srv_max_hostsÚ	ipaddressÚ
ip_addressr	   Ú_INVALID_HOST_MSGÚ
ValueErrorÚsplitÚlenÚ_SrvResolver__plistÚ	ExceptionÚ_SrvResolver__slenÚnparts)ÚselfÚfqdnÚconnect_timeoutÚsrv_service_nameÚsrv_max_hostsÚ
split_fqdns         r   Ú__init__z_SrvResolver.__init__C   sØ   € ð ˆŒØ%ˆŒ
Ø!0Ò!C´OˆÔØ,Ò1°ˆÔð	Ü× Ñ  Ô&Ü$Ô%6Ð9KÑ%KÓLÐLøÜò 	Ùð	úð	LØŸ™×*Ñ*¨3Ó/ˆJÜ-0°«_¸qÒ-@˜: a b™>ÀjˆD�LøÜò 	LÜ$Ô%6¸$¸Ñ%@ÓAÀtÐKð	Lúä˜$Ÿ,™,Ó'ˆŒÜ˜*“oˆ�s   ª'A Á	AÁAÁ!5B ÂB5c                ó¢  — ddl m} 	 t        | j                  d| j                  ¬«      }t        |«      dkD  rt        d«      ‚dj                  |D �cg c]  }dj                  |j                  «      ‘Œ c}«      j                  d	«      S # |j
                  |j                  f$ r Y y t        $ r}t        t        |«      «      |‚d }~ww xY wc c}w )
Nr   r
   ÚTXT©Úlifetimer$   z Only one TXT record is supportedó   &r   zutf-8)r   r   r   r%   r'   ÚNoAnswerÚNXDOMAINr0   r	   Ústrr.   ÚjoinÚstringsr   )r3   r   ÚresultsÚexcÚress        r   Úget_optionsz_SrvResolver.get_options\   s²   € Ý ð	8Ü˜tŸ{™{¨E¸D×<RÑ<RÔSˆGô ˆw‹<˜!ÒÜ$Ð%GÓHÐHØ—	‘	¸GÖD°S˜3Ÿ8™8 C§K¡KÕ0ÒDÓE×MÑMÈgÓVÐVøð ×!Ñ! 8×#4Ñ#4Ð5ò 	áÜò 	8Ü$¤S¨£XÓ.°CÐ7ûð	8üò Es#   ˆ"B
 Á"CÂ
C	Â'C	Â/CÃC	c                óÄ   — 	 t        d| j                  z   dz   | j                  z   d| j                  ¬«      }|S # t        $ r}|s‚ t        t        |«      «      |‚d }~ww xY w)NÚ_z._tcp.ÚSRVr<   )r   r&   r%   r'   r0   r	   rA   )r3   Úencapsulate_errorsrD   rE   s       r   Ú_resolve_uriz_SrvResolver._resolve_urij   se   € ð		8ÜØ�d—j‘jÑ  8Ñ+¨d¯k©kÑ9¸5È4×KaÑKaôˆGð ˆøô ò 	8Ù%àä$¤S¨£XÓ.°CÐ7ûð	8ús   ‚59 ¹	AÁAÁAc           	     ó‚  — | j                  |«      }|D �cg c]3  }t        |j                  j                  d¬«      «      |j                  f‘Œ5 }}|D ]�  }|d   j                  «       }| j                  |k(  r| j                  dk  rt        d«      ‚	 |j                  d«      dd  | j                   d  }| j                  |k7  sŒrt        d|d   › �«      ‚ | j                  r3t        j                  |t!        | j                  t#        |«      «      «      }||fS c c}w # t        $ r}t        d|d   › �«      |‚d }~ww xY w)	NT)Úomit_final_dotr   é   z=Invalid SRV host: return address is identical to SRV hostnamer"   r$   zInvalid SRV host: )rL   r   ÚtargetÚto_textÚportÚlowerr%   r2   r	   r-   r1   r0   r/   r(   ÚrandomÚsampleÚminr.   )	r3   rK   rD   rF   ÚnodesÚnodeÚsrv_hostÚnlistrE   s	            r   Ú_get_srv_response_and_hostsz(_SrvResolver._get_srv_response_and_hostsw   sQ  € ð ×#Ñ#Ð$6Ó7ˆð
 ö
àô ˜#Ÿ*™*×,Ñ,¸DÐ,ÓAÓBÀCÇHÁHÒMð
ˆð 
ð ò 	IˆDØ˜A‘w—}‘}“ˆHØ�{‰{˜hÒ&¨4¯;©;¸ª?Ü(ØSóð ðRØ Ÿ™ sÓ+¨A¨BÐ/°·±°°Ð?�ð �|‰|˜uÓ$Ü(Ð+=¸dÀ1¹g¸YÐ)GÓHÐHð	Ið ×ÒÜ—M‘M %¬¨T×-AÑ-AÄ3ÀuÃ:Ó)NÓOˆEØ˜ˆ~Ðùò)
øô ò RÜ(Ð+=¸dÀ1¹g¸YÐ)GÓHÈcÐQûðRús   –8DÂ"DÄ	D>Ä'D9Ä9D>c                ó.   — | j                  d«      \  }}|S )NT)r[   )r3   rI   rW   s      r   Ú	get_hostsz_SrvResolver.get_hosts“   s   € Ø×3Ñ3°DÓ9‰ˆˆ5Øˆr   c                ój   — | j                  d«      \  }}|j                  }|r|j                  nd}||fS )NFr   )r[   ÚrrsetÚttl)r3   rD   rW   r_   r`   s        r   Úget_hosts_and_min_ttlz"_SrvResolver.get_hosts_and_min_ttl—   s6   € Ø×9Ñ9¸%Ó@‰ˆ�Ø—‘ˆÙ ˆe�iŠi aˆØ�cˆzÐr   N)r   )r4   rA   r5   zOptional[float]r6   rA   r7   Úint)ÚreturnzOptional[str])rK   Úboolrc   úresolver.Answer)rK   rd   rc   z-tuple[resolver.Answer, list[tuple[str, Any]]])rc   zlist[tuple[str, Any]])rc   z!tuple[list[tuple[str, Any]], int])	Ú__name__Ú
__module__Ú__qualname__r9   rG   rL   r[   r]   ra   © r   r   r    r    B   s\   „ ð ð&àð&ð )ð&ð ð	&ð
 ó&ó2WóðØ"&ðà	6óó8ôr   r    )rc   rd   )r   zUnion[str, bytes]rc   rA   )r   r   r   r   rc   re   )Ú__doc__Ú
__future__r   r)   rT   Útypingr   r   r   r   Úpymongo.commonr   Úpymongo.errorsr	   r   r   r   r   r   r   r+   r    ri   r   r   ú<module>ro      sP   ðñ HÝ "ã Û ß 6Ó 6å *Ý -áÝà€óóó6ð(ð ÷Yò Yr   