
    hf                         d Z 	 ddlmZ dZddlmZ ddlmZ ddl	m
Z
 erd Znd	 Z G d
 de      Zy# e$ r dZY 0w xY w)zASupport for resolving hosts and options from mongodb+srv:// URIs.    )resolverTF)PY3)CONNECT_TIMEOUT)ConfigurationErrorc                 F    t        | t              r| j                         S | S N)
isinstancebytesdecodetexts    W/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/pymongo/srv_resolver.pymaybe_decoder       s    dE";;=     c                     | S r    r   s    r   r   r   %   s    r   c                   2    e Zd ZddZd Zd Zd Zd Zd Zy)	_SrvResolverNc                    || _         |xs t        | _        	 | j                   j                  d      dd  | _        t        | j                        | _        | j                  dk  rt        d|      y # t
        $ r t        d|      w xY w)N.   zInvalid URI host:    )	_SrvResolver__fqdnr   _SrvResolver__connect_timeoutsplit_SrvResolver__plist	Exceptionr   len_SrvResolver__slen)selffqdnconnect_timeouts      r   __init__z_SrvResolver.__init__*   s    !0!CO	G;;,,S1!"5DL $,,';;?$t%EFF   	G$t%EFF	Gs   #A3 3Bc                    	 t        j                  | j                  d| j                        }t        |      dkD  rt        d      dj                  |D cg c]  }dj                  |j                         c}      j                  d      S # t         j                  t         j
                  f$ r Y y t        $ r}t        t        |            d }~ww xY wc c}w )NTXTlifetimer   z Only one TXT record is supported   &r   zutf-8)r   queryr   r   NoAnswerNXDOMAINr   r   strr   joinstringsr   )r    resultsexcress       r   get_optionsz_SrvResolver.get_options7   s    	/nnT[[%.2.D.DFG w<!$%GHHII@sxx,@A66D	 !!8#4#45 	 	/$SX..	/
 As#   ,B "C#C3C;CCc                     	 t        j                  d| j                  z   d| j                        }|S # t        $ r}|s t        t        |            d }~ww xY w)Nz_mongodb._tcp.SRVr&   )r   r)   r   r   r   r   r,   )r    encapsulate_errorsr/   r0   s       r   _resolve_uriz_SrvResolver._resolve_uriF   s[    	/nn%5%CU.2.D.DFG   	/%$SX..	/s   /3 	AAAc                    | j                  |      }|D cg c]3  }t        |j                  j                  d            |j                  f5 }}|D ]H  }	 |d   j                  d      dd  | j                   d  }| j                  |k7  s9t        d|d          ||fS c c}w # t        $ r t        d|d         w xY w)NT)omit_final_dotr   r   r   zInvalid SRV host: )
r6   r   targetto_textportr   r   r   r   r   )r    r5   r/   r1   nodesnodenlists          r   _get_srv_response_and_hostsz(_SrvResolver._get_srv_response_and_hostsR   s    ##$67
   #**,,D,ABCHHM   
  	NDNQc*12.|}= ||u$(47)LMM	N ~   N(47)LMMNs   8B!%B&&Cc                 .    | j                  d      \  }}|S )NT)r?   )r    _r<   s      r   	get_hostsz_SrvResolver.get_hostse   s    33D95r   c                 Z    | j                  d      \  }}||j                  j                  fS )NF)r?   rrsetttl)r    r/   r<   s      r   get_hosts_and_min_ttlz"_SrvResolver.get_hosts_and_min_ttli   s+    99%@gmm''''r   r   )	__name__
__module____qualname__r#   r2   r6   r?   rB   rF   r   r   r   r   r   )   s!    G
&(r   r   N)__doc__dnsr   _HAVE_DNSPYTHONImportErrorbson.py3compatr   pymongo.commonr   pymongo.errorsr   r   objectr   r   r   r   <module>rR      sV    HO  * - 
B(6 B(+  Os   3 ==