o
    Åîï]f  ã                   @   s~   d Z z
ddlmZ dZW n ey   dZY nw ddlmZ ddlmZ ddl	m
Z
 er1dd	„ Znd
d	„ ZG dd„ deƒZdS )zASupport for resolving hosts and options from mongodb+srv:// URIs.é    )ÚresolverTF)ÚPY3)ÚCONNECT_TIMEOUT)ÚConfigurationErrorc                 C   s   t | tƒr	|  ¡ S | S ©N)Ú
isinstanceÚbytesÚdecode©Útext© r   úF/var/www/html/env/lib/python3.10/site-packages/pymongo/srv_resolver.pyÚmaybe_decode    s   
r   c                 C   s   | S r   r   r
   r   r   r   r   %   s   c                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )Ú_SrvResolverNc                 C   sp   || _ |pt| _z| j  d¡dd … | _W n ty#   td|f ƒ‚w t| jƒ| _| jdk r6td|f ƒ‚d S )NÚ.é   zInvalid URI host: %sé   )	Ú_SrvResolver__fqdnr   Ú_SrvResolver__connect_timeoutÚsplitÚ_SrvResolver__plistÚ	Exceptionr   ÚlenÚ_SrvResolver__slen)ÚselfÚfqdnÚconnect_timeoutr   r   r   Ú__init__*   s   
ÿ
ÿz_SrvResolver.__init__c              
   C   s†   zt j| jd| jd�}W n t jt jfy   Y d S  ty+ } ztt|ƒƒ‚d }~ww t	|ƒdkr6tdƒ‚d 
dd„ |D ƒ¡ d¡S )	NÚTXT©Úlifetimer   z Only one TXT record is supportedó   &c                 S   s   g | ]}d   |j¡‘qS )ó    )ÚjoinÚstrings©Ú.0Úresr   r   r   Ú
<listcomp>C   s    z,_SrvResolver.get_options.<locals>.<listcomp>zutf-8)r   Úqueryr   r   ÚNoAnswerÚNXDOMAINr   r   Ústrr   r#   r	   )r   ÚresultsÚexcr   r   r   Úget_options7   s    

ÿ€ÿÿÿz_SrvResolver.get_optionsc              
   C   sJ   zt jd| j d| jd�}W |S  ty$ } z	|s‚ tt|ƒƒ‚d }~ww )Nz_mongodb._tcp.ÚSRVr   )r   r)   r   r   r   r   r,   )r   Úencapsulate_errorsr-   r.   r   r   r   Ú_resolve_uriF   s   ÿú€ûz_SrvResolver._resolve_uric              	   C   sŽ   |   |¡}dd„ |D ƒ}|D ]4}z|d  d¡dd … | j d … }W n ty3   td|d f ƒ‚w | j|krBtd|d f ƒ‚q||fS )Nc                 S   s$   g | ]}t |jjd d�ƒ|jf‘qS )T)Úomit_final_dot)r   ÚtargetÚto_textÚportr%   r   r   r   r(   V   s    ÿÿz<_SrvResolver._get_srv_response_and_hosts.<locals>.<listcomp>r   r   r   zInvalid SRV host: %s)r2   r   r   r   r   r   )r   r1   r-   ÚnodesÚnodeÚnlistr   r   r   Ú_get_srv_response_and_hostsR   s   
þ&ÿ
ÿz(_SrvResolver._get_srv_response_and_hostsc                 C   s   |   d¡\}}|S )NT)r:   )r   Ú_r7   r   r   r   Ú	get_hostse   s   z_SrvResolver.get_hostsc                 C   s   |   d¡\}}||jjfS )NF)r:   ÚrrsetÚttl)r   r-   r7   r   r   r   Úget_hosts_and_min_ttli   s   z"_SrvResolver.get_hosts_and_min_ttlr   )	Ú__name__Ú
__module__Ú__qualname__r   r/   r2   r:   r<   r?   r   r   r   r   r   )   s    
r   N)Ú__doc__Údnsr   Ú_HAVE_DNSPYTHONÚImportErrorÚbson.py3compatr   Úpymongo.commonr   Úpymongo.errorsr   r   Úobjectr   r   r   r   r   Ú<module>   s   ÿ
