
    @6iW              
           d Z ddlmZ ddlmZ ddlZddlmZmZ ddl	m
Z
  G d d	      Ze
d
d
d
ddedededefd       Zy)zDomain.    )environ)PathN)OptionalSet   )	validatorc                   |    e Zd ZU dZdZeee      ed<   h dZ	e	j                  d       ed        Zedefd       Zy)	_IanaTLDz*Read IANA TLDs, and optionally cache them.N_full_cache>
   BRDEFRITJPRUUKCOMNETORGONIONc              #      K   t        t              j                  j                  d      j	                         5 }t        |      }|D ]  }|j                           	 d d d        y # 1 sw Y   y xY ww)Nz_tld.txt)r   __file__parentjoinpathopennextstrip)clstld_f_lines       T/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/validators/domain.py	_retrievez_IanaTLD._retrieve   sa     (^""++J7<<> 	#%UA #jjl"#	# 	# 	#s   7A4%A(	A4(A1-A4tldc                     || j                   v ry| j                  It        j                  d      dk(  rt	        | j                               | _        n|| j                         v S || j                  v S )NTPYVLD_CACHE_TLDTrue)_popular_cacher   r   getsetr#   )r   r$   s     r"   checkz_IanaTLD.check   sa    #$$$??"{{,-7"%cmmo"6cmmo--coo%%    )__name__
__module____qualname____doc__r   r   r   str__annotations__r(   addclassmethodr#   r+    r,   r"   r
   r
      sX    4&*K#c(#*TNw# # & & &r,   r
   F)consider_tldrfc_1034rfc_2782valuer6   r7   r8   c                  | sy|rFt         j                  | j                  d      j                  dd      d   j	                               sy	 |rdnd}|rdnd}t        j                  d	|        xr^ t        j                  d
| dd| dz   d| dz   dz   d| z   | j                  d      j                  d      t
        j                        S # t        $ r}t        d|        |d}~ww xY w)a#  Return whether or not given value is a valid domain.

    Examples:
        >>> domain('example.com')
        True
        >>> domain('example.com/')
        ValidationError(func=domain, args={'value': 'example.com/'})
        >>> # Supports IDN domains as well::
        >>> domain('xn----gtbspbbmkef.xn--p1ai')
        True

    Args:
        value:
            Domain string to validate.
        consider_tld:
            Restrict domain to TLDs allowed by IANA.
        rfc_1034:
            Allows optional trailing dot in the domain name.
            Ref: [RFC 1034](https://www.rfc-editor.org/rfc/rfc1034).
        rfc_2782:
            Domain name is of type service record.
            Allows optional underscores in the domain name.
            Ref: [RFC 2782](https://www.rfc-editor.org/rfc/rfc2782).


    Returns:
        (Literal[True]): If `value` is a valid domain name.
        (ValidationError): If `value` is an invalid domain name.

    Raises:
        (UnicodeError): If `value` cannot be encoded into `idna` or decoded into `utf-8`.
    F.r   r     z\.?$$z\s|__+z^(?:[a-z0-9]z(?:[a-z0-9-z]{0,61}z[a-z0-9z])?\.)z+[a-z0-9][a-z0-9-_]{0,61}z[a-z]idnazutf-8zUnable to encode/decode N)r
   r+   rstriprsplitupperresearchmatchencodedecode
IGNORECASEUnicodeError)r9   r6   r7   r8   service_recordtrailing_doterrs          r"   domainrN   (   s   H HNN5<<+<+C+CC+KB+O+U+U+WXH!)r"*w99Y.. 
288>*!,^,I67 (/	0 ++ |n%& LL ''0MM4
 	
  H5eW=>CGHs   BC 	C-C((C-)r0   osr   pathlibr   rD   typingr   r   utilsr   r
   r1   boolrN   r5   r,   r"   <module>rT      sg       	   & &6 +05[`<H<H$(<H<@<HTX<H <Hr,   