
    hP                         d Z 	 ddlmZ dZddlmZ ddlmZ ddl	m
Z
 ddlmZ erd	 Znd
 Zd ZdZ G d de      Zy# e$ r dZY ;w xY w)zASupport for resolving hosts and options from mongodb+srv:// URIs.    )resolverTF)PY3)is_ip_address)CONNECT_TIMEOUT)ConfigurationErrorc                 F    t        | t              r| j                         S | S N)
isinstancebytesdecodetexts    R/var/www/html/eduruby.in/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                  v    t        t        d      rt        j                  | i |S t        j                  | i |S )Nresolve)hasattrr   r   query)argskwargss     r   _resolver   -   s6    x#000>>4*6**r   zdInvalid URI host: %s is not a valid hostname for 'mongodb+srv://'. Did you mean to use 'mongodb://'?c                   2    e Zd ZddZd Zd Zd Zd Zd Zy)	_SrvResolverNc                 j   || _         |xs t        | _        t        |      rt	        t
        dz        	 | j                   j                  d      dd  | _        t        | j                        | _
        | j                  dk  rt	        t
        |fz        y # t        $ r t	        t
        |fz        w xY w)N)zan IP address.      )_SrvResolver__fqdnr   _SrvResolver__connect_timeoutr   r   _INVALID_HOST_MSGsplit_SrvResolver__plist	Exceptionlen_SrvResolver__slen)selffqdnconnect_timeouts      r   __init__z_SrvResolver.__init__<   s    !0!CO $%69K%KLL	B;;,,S1!"5DL $,,';;?$%6$%@AA   	B$%6$%@AA	Bs   #B B2c                    	 t        | 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   r!   r"   r   NoAnswerNXDOMAINr&   r   strr'   joinstringsr   )r)   resultsexcress       r   get_optionsz_SrvResolver.get_optionsL   s    	/t{{ED<R<RSG w<!$%GHH		GDS388CKK0DEMMgVV !!8#4#45 	 	/$SX..	/ Es#   "B "C#C
)C
1CC
c                     	 t        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   r4   )r)   encapsulate_errorsr7   r8   s       r   _resolve_uriz_SrvResolver._resolve_uriX   sU    		/ 4;;.@V@VG   	/%$SX..	/s   %) 	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: )
r>   r   targetto_textportr$   r(   r&   r   r%   )r)   r=   r7   r9   nodesnodenlists          r   _get_srv_response_and_hostsz(_SrvResolver._get_srv_response_and_hostse   s    ##$67 Za
RU\#**,,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)rG   )r)   _rD   s      r   	get_hostsz_SrvResolver.get_hostsx   s    33D95r   c                 Z    | j                  d      \  }}||j                  j                  fS )NF)rG   rrsetttl)r)   r7   rD   s      r   get_hosts_and_min_ttlz"_SrvResolver.get_hosts_and_min_ttl|   s+    99%@gmm''''r   r	   )	__name__
__module____qualname__r,   r:   r>   rG   rJ   rN   r   r   r   r   r   ;   s"    B 
W&(r   r   N)__doc__dnsr   _HAVE_DNSPYTHONImportErrorbson.py3compatr   pymongo._ipaddressr   pymongo.commonr   pymongo.errorsr   r   r   r#   objectr   r   r   r   <module>r[      sg    HO  , * -
+( C(6 C(M  Os   > AA