
    ziA              
          d Z ddlZddlZddlZddlZddlmZ dZdZdZ	 ej
        d          Z ej
        d	                    d
dddd                    Z ej
        d                    ddd                    Z ej
        d
           ej
        d           ej
        d           ej
        d           ej
        d           ej
        d           ej
        d           ej
        d          dZ ej
        d          Z ej
        d          Z G d dej                  Zd1dedej        e         defdZdedefdZd ej        ej        eef                  d!edej        e         fd"Zd#ed$ed%eddfd&Zd#edefd'Zd(edefd)Zd2d+ed,edefd-Zd2d+ed,edefd.Z d/ej!        ej"        eef                  defd0Z#dS )3a  
An implementation of `urlparse` that provides URL validation and normalization
as described by RFC3986.

We rely on this implementation rather than the one in Python's stdlib, because:

* It provides more complete URL validation.
* It properly differentiates between an empty querystring and an absent querystring,
  to distinguish URLs with a trailing '?'.
* It handles scheme, hostname, port, and path normalization.
* It supports IDNA hostnames, normalizing them to their encoded form.
* The API supports passing individual components, as well as the complete URL string.

Previously we relied on the excellent `rfc3986` package to handle URL parsing and
validation, but this module provides a simpler alternative, with less indirection
required.
    N   )
InvalidURLi   zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~z!$&'()*+,;=z%[A-Fa-f0-9]{2}z(?:(?P<scheme>{scheme}):)?(?://(?P<authority>{authority}))?(?P<path>{path})(?:\?(?P<query>{query}))?(?:#(?P<fragment>{fragment}))?z([a-zA-Z][a-zA-Z0-9+.-]*)?z[^/?#]*z[^?#]*z[^#]*z.*scheme	authoritypathqueryfragmentzA(?:(?P<userinfo>{userinfo})@)?(?P<host>{host}):?(?P<port>{port})?z[^@]*z(\[.*\]|[^:]*))userinfohostport)r   r   r   r	   r
   r   r   r   z ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$z^\[.*\]$c                      e Zd ZU eed<   eed<   eed<   ej        e         ed<   eed<   ej        e         ed<   ej        e         ed<   edefd	            Z	edefd
            Z
dej        e         dd fdZdefdZdS )ParseResultr   r   r   r   r   r	   r
   returnc                     d                     | j        r
| j         dndd| j        v rd| j         dn| j        | j        
d| j         ndg          S )N @:[])joinr   r   r   selfs    Z/var/www/tmov.alphamb/tmov_inventario/venv/lib/python3.11/site-packages/httpx/_urlparse.pyr   zParseResult.authorityg   sq    ww'+}<4=####"$'49$4$4 DI    $)#'9#8DIb
 
 	
    c                     d                     d| j        v rd| j         dn| j        | j        
d| j         ndg          S )Nr   r   r   r   )r   r   r   r   s    r   netloczParseResult.netlocq   sW    ww$'49$4$4 DI    $)#'9#8DIb
 
 	
r   kwargsc                     |s| S | j         | j        | j        | j        | j        d}|                    |           t          di |S )Nr   r   r   )r   r   r   r	   r
   updateurlparse)r   r   defaultss      r   	copy_withzParseResult.copy_withz   s^     	K kIZ
 
 	''h'''r   c                     | j         }d                    | j        r
| j         dnd|rd| nd| j        | j        
d| j         nd| j        
d| j         ndg          S )Nr   r   //?#)r   r   r   r   r	   r
   )r   r   s     r   __str__zParseResult.__str__   s    N	ww%)[84;!!!!b$-5 Y   2	$(J$: DJ   '+}'@#DM###b
 
 	
r   N)__name__
__module____qualname__str__annotations__typingOptionalintpropertyr   r   r$   r)    r   r   r   r   ^   s        KKKMMM
III
/#

III?3oc""""
3 
 
 
 X
 
 
 
 
 X
(&/#"6 (= ( ( ( (

 

 

 

 

 

 

r   r   r   urlr   r   c           	      &	   t          |           t          k    rt          d          t          d | D                       rt          d          d|v r1|d         }t	          |t
                    rt          |          n||d<   d|v r6|                    d          pd}|                    d          \  |d<   }|d<   d	|v sd
|v rXt          |                    d	d          pd          }t          |                    d
d          pd          }|r| d| n||d<   d|v r=|                    d          pd}|                    d          \  |d<   }|d<   |sd |d<   d|v rN|
                    d          pd}	d|	v r3|	                    d          r|	                    d          s	d|	 d|d<   |                                D ]\  }
}|t          |          t          k    rt          d|
 d          t          d |D                       rt          d|
 d          t          |
                             |          st          d|
 d          t                               |           }|J |                                }|
                    d|d                   pd}|
                    d|d                   pd}|
                    d|d                   pd}|
                    d|d                   }|
                    d|d                   }t&                              |          }|J |                                }|
                    d|d                   pd}|
                    d|d                   pd}	|
                    d|d                   }|                                }t          |t*          dz             }t-          |	          }t/          ||          }|dk    }|dk    p	|dk    p|d u}t1          |||           |rt3          |          }t          |t*          dz             }|d nt          |t*          dz             }|d nt          |t*          dz             }t5          |||||||          S ) NzURL too longc              3   h   K   | ]-}|                                 o|                                 V  .d S Nisasciiisprintable.0chars     r   	<genexpr>zurlparse.<locals>.<genexpr>   s>      
E
E4<<>>4$"2"2"4"44
E
E
E
E
E
Er   z,Invalid non-printable ASCII character in URLr   r   r   r   r   usernamepasswordr   raw_pathr'   r   r	   r   r   zURL component 'z
' too longc              3   h   K   | ]-}|                                 o|                                 V  .d S r7   r8   r;   s     r   r>   zurlparse.<locals>.<genexpr>   s>      OO4<<>><$*:*:*<*<&<OOOOOOr   z8Invalid non-printable ASCII character in URL component ''zInvalid URL component 'r   r   r
   safe)
has_schemehas_authorityz:/[]@z:?[]@z:/?#[]@)lenMAX_URL_LENGTHr   any
isinstancer1   r-   pop	partitionquoteget
startswithendswithitemsCOMPONENT_REGEX	fullmatch	URL_REGEXmatch	groupdictAUTHORITY_REGEXlower
SUB_DELIMSencode_hostnormalize_portvalidate_pathnormalize_pathr   )r4   r   r   r   _r?   r@   rA   	seperatorr   keyvalue	url_matchurl_dictr   r   r   r	   r
   authority_matchauthority_dictr   parsed_schemeparsed_userinfoparsed_hostparsed_portrF   rG   parsed_pathparsed_queryparsed_fragments                                  r   r"   r"      s*   
 3xx.  ((( 
E
E
E
E
EEE IGHHH f~&0s&;&;ETv 6H%%+,2,<,<S,A,A)v6&> VzV33J339r::J339r::9AO558555xz V::j))/R5=5G5G5L5L2v	6'? 	#"F7O zz&!!'R$;; 4 4;s9K9K;([[[F6N
 llnn C C
U5zzN** !B3!B!B!BCCC OOOOOOO  UsUUU  
 #3'11%88 C !A3!A!A!ABBB $$I   ""$$H ZZ(8"455;F

;(=>>D"I::fhv.//52DJJw 122Ezz*hz&:;;H &++I66O&&&$..00N zz*nZ&@AAGRH::fnV455;D::fnV455D
  M 
S0@AAAO"4((K(6tV(D(DK"$J2M!2Mk6M  $:]KKKK $d## T
W(<===K
 5Z'5I#J#J#J 
  eH:	;Q&R&R&R    r   r   c                    | sdS t                               |           r=	 t          j        |            n%# t          j        $ r t          d|           w xY w| S t                              |           rM	 t          j        | dd                    n%# t          j        $ r t          d|           w xY w| dd         S |                                 r(t          | 
                                t                    S 	 t          j        | 
                                                              d          S # t          j        $ r t          d|           w xY w)	Nr   zInvalid IPv4 address: r   zInvalid IPv6 address: rD   asciizInvalid IDNA hostname: )IPv4_STYLE_HOSTNAMErV   	ipaddressIPv4AddressAddressValueErrorr   IPv6_STYLE_HOSTNAMEIPv6Addressr9   rN   rY   rZ   idnaencodedecode	IDNAError)r   s    r   r[   r[     s    $4r		"	"4	(	( !4	@!$''''* 	@ 	@ 	@>d>>???	@		"	"4	(	( 4	@!$qt*----* 	@ 	@ 	@>d>>???	@AbDz	 4 TZZ\\
3333={4::<<((//888> = = =;4;;<<<=s!   5 "A7B "B6 8D9 9"Er   r   c                     | | dk    rd S 	 t          |           }n # t          $ r t          d|           w xY wdddddd                    |          }||k    rd S |S )Nr   zInvalid port:    P   i  )ftphttphttpswswss)r1   
ValueErrorr   rO   )r   r   port_as_intdefault_ports       r   r\   r\   L  s     |trzzt4$ii 4 4 42$223334 rCr#NNRR L l""ts    9r   rF   rG   c                     |r*| r$|                      d          st          d          dS dS |                      d          rt          d          |                      d          r|st          d          dS dS )z
    Path validation rules that depend on if the URL contains a scheme or authority component.

    See https://datatracker.ietf.org/doc/html/rfc3986.html#section-3.3
    /z7For absolute URLs, path must be empty or begin with '/'r&   zFURLs with no authority component cannot have a path starting with '//'r   zBURLs with no scheme component cannot have a path starting with ':'N)rP   r   )r   rF   rG   s      r   r]   r]   i  s        	X,, 	XVWWW	X 	X 	X 	X
 ??4   	X  
 ??3 	
 	T  	 	 	 	r   c                     |                      d          }g }|D ]B}|dk    r	|dk    r|r|dgk    r|                                 -|                    |           Cd                    |          S )z
    Drop "." and ".." segments from a URL path.

    For example:

        normalize_path("/path/./to/somewhere/..") == "/path/to"
    r   .z..r   )splitrL   appendr   )r   
componentsoutput	components       r   r^   r^     s     CJ!F % %	$ &RD..

MM)$$$$88Fr   r=   c                     d                     d |                     d          D                                                       S )a  
    Replace a single character with the percent-encoded representation.

    Characters outside the ASCII range are represented with their a percent-encoded
    representation of their UTF-8 byte sequence.

    For example:

        percent_encode(" ") == "%20"
    r   c                     g | ]}d |d	S )%02xr3   )r<   bytes     r   
<listcomp>z"percent_encode.<locals>.<listcomp>  s     DDDtNNNNDDDr   zutf-8)r   rx   upper)r=   s    r   percent_encoder     s=     77DDt{{7/C/CDDDEEKKMMMr   r   stringrE   c                     t           |z   dz   }| D ]	}||vr dS 
|                     d          t          t                              |                     k    S )z<
    Determine if a given string is already quote-safe.
    r   F)UNRESERVED_CHARACTERScountrH   PERCENT_ENCODED_REGEXfindall)r   rE   NON_ESCAPED_CHARSr=   s       r   is_safer     sm     .4s:   (((55 ) <<$9$A$A&$I$I J JJJr   c                     t          | |          r| S t          |z   d                    fd| D                       S )z=
    Use percent-encoding to quote a string if required.
    rD   r   c                 :    g | ]}|v r|nt          |          S r3   )r   )r<   r=   r   s     r   r   zquote.<locals>.<listcomp>  s0    XXX***t0D0DXXXr   )r   r   r   )r   rE   r   s     @r   rN   rN     sX     vD!!! -477XXXXQWXXX  r   rR   c                 @    d                     d | D                       S )N&c                 `    g | ]+\  }}t          |d           dz   t          |d           z   ,S )r   rD   =)rN   )r<   kvs      r   r   zurlencode.<locals>.<listcomp>  s@    SSSTQU12&&&,uQR/@/@/@@SSSr   )r   )rR   s    r   	urlencoder     s%     88SSUSSSTTTr   r    )r   )$__doc__rr   rer/   rw   _exceptionsr   rI   r   rZ   compiler   formatrU   rX   rS   rq   ru   
NamedTupler   r-   r0   r"   r[   Unionr1   r\   boolr]   r^   r   r   rN   ListTupler   r3   r   r   <module>r      s   "     				   # # # # # # I  
"
#455  BJ	*
 f+    	& "*Tf	   	 	  bj566I&&BJx  RZ  
4  
7##BJ)**BJt	 	 !bj!DEE  bj-- 4
 4
 4
 4
 4
&# 4
 4
 4
nF F# Ffoc&: F{ F F F FR+=c +=c += += += +=\
/&,sCx0
1;>_S   :  d t    4     ,N N N N N NK KC Ks KT K K K K
 
# 
S 
3 
 
 
 
UV[c3h!78 US U U U U U Ur   