
    @6i                     R   d Z ddlmZ ddlZddlmZmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZ ed	        Zed
        ZdefdZdedefdZdefdZdededededededee   dedefdZdedededefdZeddddddddded
dedededededededee   deded eegef   fd!       Zy)"zURL.    )	lru_cacheN)CallableOptional)parse_qsunquoteurlsplit   )hostname)	validatorc                  J    t        j                  dt         j                        S )Nz(^[\u0100-\u017F\u0180-\u024F]|[-!#$%&'*+/=?^_`{}|~0-9a-z]+(\.[-!#$%&'*+/=?^_`{}|~0-9a-z]+)*$|^([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\011.])*$)recompile
IGNORECASE     Q/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/validators/url.py_username_regexr      s"    ::	G
 	 r   c                  J    t        j                  dt         j                        S )Nz^[\/a-z0-9\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@\%\U0001F300-\U0001F5FF\U0001F600-\U0001F64F\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$r   r   r   r   _path_regexr      s!    ::	8 	
 
r   valuec                     | r| dv S dS )zValidate scheme.>   ftpgitircsshftpshttprtmprtspsftphttpsrtmpstelnetFr   )r   s    r   _validate_schemer%   *   s%    * # 	
	
& 'r   skip_ipv6_addrc                 Z    |xs( | j                  d      dk  xs | j                  d       S )zConfirm skip IPv6 check.:   [)count
startswith)r   r&   s     r   _confirm_ipv6_skipr-   D   s.    NU[[-1N9I9I#9N5NNr   c                 >   | sy| j                  d      x}dkD  r"t               j                  t        |             S |dk  rt               j                  |       S | j	                  dd      \  }t               j                  |      xr t        fddD              S )z Validate authentication segment.Tr(   r	   c              3   &   K   | ]  }|v 
 y w)Nr   ).0char_to_avoidpasswords     r   	<genexpr>z)_validate_auth_segment.<locals>.<genexpr>T   s      5*7X%5s   )/?#@)r+   r   matchr   rsplitall)r   colon_countusernamer2   s      @r   _validate_auth_segmentr=   I   s    {{3''1,  &&wu~66Q &&u--c1-Hh""8,  5;O5 2 r   skip_ipv4_addrmay_have_portsimple_hostconsider_tldprivaterfc_1034rfc_2782c	                    | r| j                  d      dkD  ry| j                  d      dk  rPt        t        | |      sd| v r| n!| j                  d      j	                  ddd      t        | |      |||||||	      S | j                  dd      \  }	}
t        t        |
|      sd| v r|
n!|
j                  d      j	                  ddd      t        |
|      |||||||	      xr t        |	      S )	zValidate netloc.r7   r	   Fz]:r*   ] )r&   r>   r?   maybe_simplerA   rB   rC   rD   )r+   r
   r-   lstripreplacer9   r=   )r   r&   r>   r?   r@   rA   rB   rC   rD   
basic_authhosts              r   _validate_netlocrM   Y   s    EKK$q({{3! &e^< \\#&..sB:-e^D)'$%
 	
 ||C+J "$745= S!))#r15)$?%# ! - !
,-r   pathqueryfragmentstrict_queryc                 L   d}| r%|t        t               j                  |             z  }	 |r!t        ||d      rt        ||d      r|dz  }|r1|t        t        j                  d|t
        j                              z  }|S # t        $ r |rt        ||      r|dz  }Y Tw xY w)z"Validate path query and fragments.T&)strict_parsing	separator;)rT   z[0-9a-z?/:@\-._~%!$&'()*+,;=#]*)boolr   r8   r   	TypeErrorr   	fullmatchr   )rN   rO   rP   rQ   optional_segmentss        r   _validate_optionalsr[      s    T+-"5"5d";<<&|sK|sK%
  	TLL;Xr}}U
 	
   &XeLA%&s   #B B#"B#FT)
r&   r>   r?   r@   rQ   rA   rB   rC   rD   validate_schemer\   c      
             | rt        j                  d|       ry	 t        |       \  }}}}} |
|      xr# t	        |||||||||		      xr t        ||||      S # t        $ r Y yw xY w)a  Return whether or not given value is a valid URL.

    This validator was originally inspired from [URL validator of dperini][1].
    The following diagram is from [urlly][2]::


            foo://admin:hunter1@example.com:8042/over/there?name=ferret#nose
            \_/   \___/ \_____/ \_________/ \__/\_________/ \_________/ \__/
             |      |       |       |        |       |          |         |
          scheme username password hostname port    path      query    fragment

    [1]: https://gist.github.com/dperini/729294
    [2]: https://github.com/treeform/urlly

    Examples:
        >>> url('http://duck.com')
        True
        >>> url('ftp://foobar.dk')
        True
        >>> url('http://10.0.0.1')
        True
        >>> url('http://example.com/">user@example.com')
        ValidationError(func=url, args={'value': 'http://example.com/">user@example.com'})

    Args:
        value:
            URL string to validate.
        skip_ipv6_addr:
            When URL string cannot contain an IPv6 address.
        skip_ipv4_addr:
            When URL string cannot contain an IPv4 address.
        may_have_port:
            URL string may contain port number.
        simple_host:
            URL string maybe only hyphens and alpha-numerals.
        strict_query:
            Fail validation on query string parsing error.
        consider_tld:
            Restrict domain to TLDs allowed by IANA.
        private:
            Embedded IP address is public if `False`, private/local if `True`.
        rfc_1034:
            Allow trailing dot in domain/host name.
            Ref: [RFC 1034](https://www.rfc-editor.org/rfc/rfc1034).
        rfc_2782:
            Domain/Host name is of type service record.
            Ref: [RFC 2782](https://www.rfc-editor.org/rfc/rfc2782).
        validate_scheme:
            Function that validates URL scheme.

    Returns:
        (Literal[True]): If `value` is a valid url.
        (ValidationError): If `value` is an invalid url.
    z\sF)r   searchr   
ValueErrorrM   r[   )r   r&   r>   r?   r@   rQ   rA   rB   rC   rD   r\   schemenetlocrN   rO   rP   s                   r   urlrb      s    L BIIeU+ 08-eX
 	 	E

	E  eX|D  s   A 	A%$A%)__doc__	functoolsr   r   typingr   r   urllib.parser   r   r   r
   utilsr   r   r   strr%   rW   r-   r=   rM   r[   rb   r   r   r   <module>ri      s   
   	 % 4 4   	 	  C 4Oc O4 O
#  ------ -- 	--
 -- -- d^-- -- --`c #  D 4 
 ! "-=]] 	]
 ] ] ] ] ] d^] ] ] seTk*] ]r   