
    > /iA              
          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	j                  d
dddd            Z ej                  dj                  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d/dedej*                  e   defdZdedefdZdej*                  ej0                  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d0d)ed*edefd+Zd0d)ed*edefd,Z d-ejB                  ejD                  eef      defd.Z#y)1a  
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y)ParseResultr   r   r   r   r   r	   r
   returnc                     dj                  | j                  r| j                   dndd| j                  v rd| j                   dn| j                  | j                  d| j                   g      S dg      S )N @:[])joinr   r   r   selfs    E/srv/sistema/bot/venv/lib/python3.12/site-packages/httpx/_urlparse.pyr   zParseResult.authorityg   sz    ww'+}}4==/#"$'499$4!DII;a $))#'99#8!DII;
 	
 ?A
 	
    c                     dj                  d| j                  v rd| j                   dn| j                  | j                  d| j                   g      S dg      S )Nr   r   r   r   )r   r   r   r   s    r   netloczParseResult.netlocq   sd    ww$'499$4!DII;a $))#'99#8!DII;
 	
 ?A
 	
r   kwargsc                     |s| S | j                   | j                  | j                  | j                  | j                  d}|j                  |       t        di |S )Nr   r   )r   r   r   r	   r
   updateurlparse)r   r   defaultss      r   	copy_withzParseResult.copy_withz   sR    K kkIIZZ
 	'h''r   c                    | j                   }dj                  | j                  r| j                   dnd|rd| nd| j                  | j                  d| j                   nd| j
                  d| j
                   g      S dg      S )Nr   r   //?#)r   r   r   r   r	   r
   )r   r   s     r   __str__zParseResult.__str__   s    NN	ww%)[[4;;-q!b$-"YK 2		$(JJ$:!DJJ< '+}}'@!DMM?#
 	
 GI
 	
r   N)__name__
__module____qualname__str__annotations__typingOptionalintpropertyr   r   r$   r)    r   r   r   r   ^   s    KM
I
//#

I??3ooc""
3 
 
 
 
 
(&//#"6 (= (

 

r   r   urlr   r   c           	         t        |       t        kD  rt        d      t        d | D              rt        d      d|v r%|d   }t	        |t
              rt        |      n||d<   d|v r0|j                  d      xs d}|j                  d      \  |d<   }|d<   d	|v sd
|v rLt        |j                  d	d      xs d      }t        |j                  d
d      xs d      }|r| d| n||d<   d|v r7|j                  d      xs d}|j                  d      \  |d<   }|d<   |sd |d<   d|v rD|j                  d      xs d}	d|	v r+|	j                  d      r|	j                  d      s	d|	 d|d<   |j                         D ]q  \  }
}|	t        |      t        kD  rt        d|
 d      t        d |D              rt        d|
 d      t        |
   j                  |      rdt        d|
 d       t         j#                  |       }|J |j%                         }|j                  d|d         xs d}|j                  d|d         xs d}|j                  d|d         xs d}|j                  d|d         }|j                  d|d         }t&        j#                  |      }|J |j%                         }|j                  d|d         xs d}|j                  d|d         xs d}	|j                  d|d         }|j)                         }t        |t*        dz         }t-        |	      }t/        ||      }|dk7  }|dk7  xs |dk7  xs |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   b   K   | ]'  }|j                         xr |j                           ) y wNisasciiisprintable.0chars     r   	<genexpr>zurlparse.<locals>.<genexpr>   s*     
E4<<>4$"2"2"444
E   -/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   b   K   | ]'  }|j                         xr |j                           ) y wr7   r8   r;   s     r   r>   zurlparse.<locals>.<genexpr>   s*     O4<<><$*:*:*<&<<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@   rA   rB   	seperatorr   keyvalue	url_matchurl_dictr   r   r   r	   r
   authority_matchauthority_dictr   parsed_schemeparsed_userinfoparsed_hostparsed_portrG   rH   parsed_pathparsed_queryparsed_fragments                                  r   r"   r"      s+   
 3x. (( 
E
EEGHH f~&0s&;Tv 6H%+,2,<,<S,A)v6&> VzV3J39r:J39r:9Az8*5xz V::j)/R5=5G5G5L2v	6'?"F7O zz&!'R$; 4s9K a[F6N
 lln C
U5zN* ?3%z!BCC OOO NseSTU 
 #3'11%8 #:3%q!ABBC" $I   ""$H ZZ(8"45;F

;(=>D"I::fhv./52DJJw 12Ezz*hz&:;H &++I6O&&&$..0N zz*nZ&@AGRH::fnV45;D::fnV45D
  M 
S0@AO"4(K(6tV(DK"$J2M!2Mk6M  $:]Kd# T
W(<=K
 5Z'5I#J 
  eH:	;Q&R   r   r   c                 j   | syt         j                  |       r	 t        j                  |        | S t        j                  |       r	 t        j                  | dd        | dd S | j                         rt        | j                         t              S 	 t        j                  | j                               j                  d      S # t        j                  $ r t        d|       w xY w# t        j                  $ r t        d|       w xY w# t        j                  $ r t        d|       w xY w)	Nr   zInvalid IPv4 address: r   zInvalid IPv6 address: rE   asciizInvalid IDNA hostname: )IPv4_STYLE_HOSTNAMErW   	ipaddressIPv4AddressAddressValueErrorr   IPv6_STYLE_HOSTNAMEIPv6Addressr9   rO   rZ   r[   idnaencodedecode	IDNAError)r   s    r   r\   r\     s(   		"	"4	(	@!!$' 		"	"4	(	@!!$q*- Abz	 TZZ\
33={{4::<(//88; ** 	@5dX>??	@ ** 	@5dX>??	@ >> =24(;<<=s#   C C+ 1D "C(+"D"D2r   r   c                     | | dk(  ry 	 t        |       }ddddddj                  |      }||k(  ry |S # t        $ r t        d|       w xY w)Nr   zInvalid port:    P   i  )ftphttphttpswswss)r1   
ValueErrorr   rP   )r   r   port_as_intdefault_ports       r   r]   r]   L  sv     |trz4$i
 rCr#NRRL l"  4>$2334s	   4 Ar   rG   rH   c                     |r | r| j                  d      st        d      yy| j                  d      rt        d      | j                  d      r|st        d      yy)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)rQ   r   )r   rG   rH   s      r   r^   r^   i  sp      ,VWW -4
 ??4 X 
 ??3
T  )3r   c                     | j                  d      }g }|D ]9  }|dk(  r	|dk(  r|s|dgk7  s|j                          )|j                  |       ; dj                  |      S )z
    Drop "." and ".." segments from a URL path.

    For example:

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

MM)$% 88Fr   r=   c                     dj                  | j                  d      D cg c]  }d|d
 c}      j                         S c c}w )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   zutf-8%02x)r   ry   upper)r=   bytes     r   percent_encoder     s;     77t{{7/CDtaSzNDEKKMMDs   AstringrF   c                     t         |z   dz   }| D ]  }||vs y | j                  d      t        t        j	                  |             k(  S )z<
    Determine if a given string is already quote-safe.
    r   F)UNRESERVED_CHARACTERScountrI   PERCENT_ENCODED_REGEXfindallr   rF   NON_ESCAPED_CHARSr=   s       r   is_safer     sX     .4s:  ((
 <<$9$A$A&$I JJJr   c                     t        | |      r| S t        |z   }dj                  | D cg c]  }||v r|n
t        |       c}      S c c}w )z=
    Use percent-encoding to quote a string if required.
    rE   r   )r   r   r   r   r   s       r   rO   rO     sR     vD!-477QWX**t0D	DX Xs   ArS   c                     dj                  | D cg c]#  \  }}t        |d      dz   t        |d      z   % c}}      S c c}}w )N&r   rE   =)r   rO   )rS   kvs      r   	urlencoder     s=     88USTQU12&,uQR/@@STTSs   (A
r    )r   )$__doc__rs   rer/   rx   _exceptionsr   rJ   r   r[   compiler   formatrV   rY   rT   rr   rv   
NamedTupler   r-   r0   r"   r\   Unionr1   r]   boolr^   r_   r   r   rO   ListTupler   r3   r   r   <module>r      s  "  	   # I  
"

#45  BJJ	*
 f+  	& "**Tf	  	  bjj56I&BJJx RZZ 

4 

7#BJJ)*BJJt	 !bjj!DE  bjj- 4
&## 4
nF# Ffooc&: F{ FR+=c +=c +=\
//&,,sCx0
1;>__S:  d t 4  ,N N NKC Ks KT K
# 
S 
3 
UV[[c3h!78 US Ur   