
    j                     x   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dS )"zURL.    )	lru_cacheN)CallableOptional)parse_qsunquoteurlsplit   )hostname)	validatorc                  @    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/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/validators/url.py_username_regexr      s#    :	G
 	  r   c                  @    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 n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                 d    |p.|                      d          dk     p|                     d           S )zConfirm skip IPv6 check.:   [)count
startswith)r   r&   s     r   _confirm_ipv6_skipr-   D   s4    NU[[--1N9I9I#9N9N5NNr   c                    | sdS |                      d          x}dk    r.t                                          t          |                     S |dk     r!t                                          |           S |                     dd          \  }t                                          |          ot          fddD                       S )z Validate authentication segment.Tr(   r	   c              3       K   | ]}|vV  	d S )Nr   ).0char_to_avoidpasswords     r   	<genexpr>z)_validate_auth_segment.<locals>.<genexpr>T   s9       5 5*7X%5 5 5 5 5 5r   )/?#@)r+   r   matchr   rsplitall)r   colon_countusernamer2   s      @r   _validate_auth_segmentr=   I   s     t{{3'''1,,   &&wu~~666Q  &&u---c1--Hh""8,,  5 5 5 5;O5 5 5 2 2 r   skip_ipv4_addrmay_have_portsimple_hostconsider_tldprivaterfc_1034rfc_2782c	                 N   | r|                      d          dk    rdS |                      d          dk     rdt          t          | |          sd| v r| n)|                     d                              ddd          t          | |          |||||||	  	        S |                     dd          \  }	}
t          t          |
|          sd| v r|
n)|
                    d                              ddd          t          |
|          |||||||	  	        o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   sf     EKK$$q((u{{3! &e^<<;@D \\#&&..sB::-e^DD)'$%
 
 
 	
 ||C++J "$776;?5== DS!!))#r155)$??%# !   - !
,
,-r   pathqueryfragmentstrict_queryc                 ~   d}| r1|t          t                                          |                     z  }	 |r)t          ||d          rt          ||d          r|dz  }n(# t          $ r |rt          ||          r|dz  }Y nw xY w|r0|t          t          j        d|t
          j                            z  }|S )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KK	& |sKKK		& % & & & 	&XeLAAA 	&%&  
 	TL;Xr}UU
 
 	
 s   +A# #"BBFT)
r&   r>   r?   r@   rQ   rA   rB   rC   rD   validate_schemer\   c      
             | rt          j        d|           rdS 	 t          |           \  }}}}}n# t          $ r Y dS w xY w |
|          o(t	          |||||||||		  	        ot          ||||          S )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  BIeU++  u08-eXX   uu 	 	E

 

	E  eX|DDs   1 
??)__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 4 4 4 4 4 4 4 4             	 	 	   C    4Oc O4 O O O O
#     ------ -- 	--
 -- -- d^-- -- -- -- -- --`c #  D    4 
 ! "-=] ] ]] 	]
 ] ] ] ] ] d^] ] ] seTk*] ] ] ] ] ]r   