Files
aitsc/.venv/Lib/site-packages/httpx/__pycache__/_urlparse.cpython-312.pyc

128 lines
17 KiB
Plaintext
Raw Normal View History

2025-02-23 09:07:52 +08:00
<EFBFBD>
2025-08-16 19:28:45 +08:00
<00><18>h<EFBFBD>J<00>
2025-02-23 09:07:52 +08:00
<01>N<00>dZddlmZddlZddlZddlZddlZddlmZdZ dZ
dZ ejd <09>Z d
jed d <0C>D<00>cgc]}|d vs<01>e|<00><00><02>c}<00>Zd
jed d <0C>D<00>cgc]}|dvs<01>e|<00><00><02>c}<00>Zd
jed d <0C>D<00>cgc]}|dvre|<00><00><02>c}<00>Zd
jed d <0C>D<00>cgc]}|dvre|<00><00><02>c}<00>Zd
jed d <0C>D<00>cgc]}|dvre|<00><00><02>c}<00>Zd
jed d <0C>D<00>cgc]}|dvre|<00><00><02>c}<00>Zejdj/ddddd<17><18><00>Zejdj/ddd<17><1B><00>Zejd<13>ejd<14>ejd<15>ejd<16>ejd<17>ejd<1C>ejd<1D>ejd<17>d<1E>Zejd<1F>Zejd <20>ZGd!<21>d"ej:<00>Zd+d,d#<23>Zd-d$<24>Z d.d%<25>Z!d/d&<26>Z"d0d'<27>Z#d1d(<28>Z$d2d)<29>Z%d2d*<2A>Z&ycc}wcc}wcc}wcc}wcc}wcc}w)3a<33>
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.
<EFBFBD>)<01> annotationsN<73>)<01>
InvalidURLizBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~z !$&'()*+,;=z%[A-Fa-f0-9]{2}<7D><00> <00>)r<00>"<00><<00>><00>`)rr <00>#r
r ) rr r r
r <00>?r <00>{<00>})rr r r
r rr rr<00>/<00>:<00>;<00>=<00>@<00>[<00>\<00>]<00>^<00>|)rr r r
r rr rrrrrrrrrrrz<>(?:(?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.*<2A><05>scheme<6D> authority<74>path<74>query<72>fragmentzA(?:(?P<userinfo>{userinfo})@)?(?P<host>{host}):?(?P<port>{port})?z(\[.*\]|[^:@]*))<03>userinfo<66>host<73>portz[^@]*z(\[.*\]|[^:]*))rrrrr r!r"r#z ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$z^\[.*\]$c<01><><00>eZdZUded<ded<ded<ded<ded<ded <ded
<edd <0B><04>Zedd <0C><04>Zdd <0A>Zdd<0E>Zy)<12> ParseResult<6C>strrr!r"<00>
int | Noner#r<00>
2025-08-16 19:28:45 +08:00
str | Nonerr c<01><><00>dj|jr|j<00>d<02>ndd|jvrd|j<00>d<05>n |j|j<00>d|j<00><00>g<03>Sdg<03>S)Nr<00>@<40>:<3A>[<5B>])<04>joinr!r"r#<00><01>selfs <20>3D:\aitsc\.venv\Lib\site-packages\httpx\_urlparse.pyrzParseResult.authority<74>sz<00><00><11>w<EFBFBD>w<EFBFBD>'+<2B>}<7D>}<7D>4<EFBFBD>=<3D>=<3D>/<2F><11>#<23>"<22>$'<27>4<EFBFBD>9<EFBFBD>9<EFBFBD>$4<>!<21>D<EFBFBD>I<EFBFBD>I<EFBFBD>;<3B>a<EFBFBD> <20>$<24>)<29>)<29>#'<27>9<EFBFBD>9<EFBFBD>#8<>!<21>D<EFBFBD>I<EFBFBD>I<EFBFBD>;<3B><0F> <0E>
2025-02-23 09:07:52 +08:00
<EFBFBD>
<EFBFBD>?A<01> <0E>
<EFBFBD>
<EFBFBD>c<01><><00>djd|jvrd|j<00>d<04>n |j|j<00>d|j<00><00>g<02>Sdg<02>S)Nrr+r,r-)r.r"r#r/s r1<00>netloczParseResult.netloc<6F>sd<00><00><11>w<EFBFBD>w<EFBFBD>$'<27>4<EFBFBD>9<EFBFBD>9<EFBFBD>$4<>!<21>D<EFBFBD>I<EFBFBD>I<EFBFBD>;<3B>a<EFBFBD> <20>$<24>)<29>)<29>#'<27>9<EFBFBD>9<EFBFBD>#8<>!<21>D<EFBFBD>I<EFBFBD>I<EFBFBD>;<3B><0F> <0E>
<EFBFBD>
<EFBFBD>?A<01> <0E>
<EFBFBD>
r2c <01><><00>|s|S|j|j|j|j|jd<01>}|j |<01>t di|<02><01>S)Nr<00>r)rrrrr <00>update<74>urlparse)r0<00>kwargs<67>defaultss r1<00> copy_withzParseResult.copy_with<74>sR<00><00><15><17>K<EFBFBD><1B>k<EFBFBD>k<EFBFBD><1D><1E><1E><18>I<EFBFBD>I<EFBFBD><19>Z<EFBFBD>Z<EFBFBD><1C> <0A> <0A> 
<EFBFBD><08> <11><0F><0F><06><1F><17>'<27>h<EFBFBD>'<27>'r2c<01><00>|j}dj|jr|j<00>d<02>nd|rd|<01><00>nd|j|j<00>d|j<00><00>nd|j
<00>d|j
<00><00>g<05>Sdg<05>S)Nrr+<00>//<2F>?<3F>#)rr.rrrr )r0rs r1<00>__str__zParseResult.__str__<5F>s<><00><00><18>N<EFBFBD>N<EFBFBD> <09><11>w<EFBFBD>w<EFBFBD>%)<29>[<5B>[<5B>4<EFBFBD>;<3B>;<3B>-<2D>q<EFBFBD>!<21>b<EFBFBD>$-<2D>"<22>Y<EFBFBD>K<EFBFBD> <20>2<EFBFBD><14> <09> <09>$(<28>J<EFBFBD>J<EFBFBD>$:<3A>!<21>D<EFBFBD>J<EFBFBD>J<EFBFBD><<3C> <20><02>'+<2B>}<7D>}<7D>'@<40>!<21>D<EFBFBD>M<EFBFBD>M<EFBFBD>?<3F>#<23>  <0E>
<EFBFBD>
<EFBFBD> GI<01>  <0E>
<EFBFBD>
r2N)<02>returnr&)r9r(rAr%) <09>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__annotations__<5F>propertyrr4r;r@<00>r2r1r%r%<00>sX<00><00> <0F>K<EFBFBD><11>M<EFBFBD>
<0A>I<EFBFBD>
<14><14>
<0A>I<EFBFBD> <15><15><18><18> <0A>
<EFBFBD><0E>
<EFBFBD><0E>
<EFBFBD><0E>
<EFBFBD> (<28>

r2r%c <01>8<00>t|<00>tkDr td<01><00>td<02>|D<00><00>r7t d<03>|D<00><00>}|j |<02>}d|<02>d|<03>d<06>}t|<04><00>d|vr%|d}t |t<00>r t|<05>n||d<d|vr0|jd<08>xsd }|jd
<EFBFBD>\|d <}|d<d |vsd |vrXt|jd d <09>xsd t<00><0E>}t|jd d <09>xsd t<00><0E>} | r|<08>d
| <09><00>n||d<d|vr7|jd<10>xsd }
|
jd<11>\|d<} |d<| sd|d<d |vrD|jd <0B>xsd } d
| vr+| jd<14>r| j!d<15>s d| <0C>d<15>|d <|j#<00>D]<5D>\} }|<0E><01> t|<0E>tkDrtd| <0A>d<17><03><00>td<18>|D<00><00>r:t d<19>|D<00><00>}|j |<02>}d| <0A>d|<02>d|<03>d<06>}t|<04><00>t$| j'|<0E>r<01><>td| <0A>d<1D><03><00>t(j+|<00>}|<0F>J<00>|j-<00>}|jd|d<00>xsd }|jd|d<00>xsd }|jd|d<00>xsd }|jd|d<00>}|jd |d <00>}t.j+|<12>}|<16>J<00>|j-<00>}|jd|d<00>xsd }|jd |d <00>xsd } |jd|d<00>}|j1<00>}t|t2<00><0E>}t5| <0C>}t7||<11>}|d k7}|d k7xs |d k7xs|du}t9|||<1E>!<21>|s|r t;|<13>}t|t<<00><0E>}|<14>dnt|t><00><0E>} |<15>dnt|t@<00><0E>}!tC|||||| |!<21>S)"Nz URL too longc3<01>bK<00>|]'}|j<00>xr|j<00> <00><01><00>)y<00>w<01>N<><02>isascii<69> isprintable<6C><02>.0<EFBFBD>chars r1<00> <genexpr>zurlparse.<locals>.<genexpr><3E>s+<00><00><><00>
E<EFBFBD><13><14>4<EFBFBD><<3C><<3C>><3E> 4<>$<24>"2<>"2<>"4<>4<> 4<><13><><00>-/c3<01>dK<00>|](}|j<00>s<01>|j<00>r<01>%|<01><01><00>*y<00>wrJrKrNs r1rQzurlparse.<locals>.<genexpr><3E>s$<00><00><><00>V<>S<EFBFBD>T<EFBFBD>D<EFBFBD>L<EFBFBD>L<EFBFBD>N<EFBFBD>4<EFBFBD>CS<43>CS<43>CU<43>D<EFBFBD>S<EFBFBD><53> <00>0<01>0<01>0z.Invalid non-printable ASCII character in URL, z at position <20>.r#r4rr+r"<00>username<6D>password<72><01>safer!<00>raw_pathr>rrr,r-zURL component 'z
' too longc3<01>bK<00>|]'}|j<00>xr|j<00> <00><01><00>)y<00>wrJrKrNs r1rQzurlparse.<locals>.<genexpr>s+<00><00><><00>O<><15><14>4<EFBFBD><<3C><<3C>><3E><<3C>$<24>*:<3A>*:<3A>*<<3C>&<<3C><<3C><15>rRc3<01>dK<00>|](}|j<00>s<01>|j<00>r<01>%|<01><01><00>*y<00>wrJrKrNs r1rQzurlparse.<locals>.<genexpr>s'<00><00><><00><12>%*<2A>T<EFBFBD>d<EFBFBD>l<EFBFBD>l<EFBFBD>n<EFBFBD>T<EFBFBD>EU<45>EU<45>EW<45>D<EFBFBD>U<EFBFBD>rTz-Invalid non-printable ASCII character in URL z component, zInvalid URL component '<27>'rrr )<02>
has_scheme<EFBFBD> has_authority)"<22>len<65>MAX_URL_LENGTHr<00>any<6E>next<78>find<6E>
isinstance<EFBFBD>intr&<00>pop<6F> partition<6F>quote<74> USERNAME_SAFE<46> PASSWORD_SAFE<46>get<65>
startswith<EFBFBD>endswith<74>items<6D>COMPONENT_REGEX<45> fullmatch<63> URL_REGEX<45>match<63> groupdict<63>AUTHORITY_REGEX<45>lower<65> USERINFO_SAFE<46> encode_host<73>normalize_port<72> validate_path<74>normalize_path<74> PATH_SAFE<46>
QUERY_SAFE<EFBFBD> FRAG_SAFEr%)"<22>urlr9rP<00>idx<64>errorr#r4<00>_rVrWrZ<00> seperatorr"<00>key<65>value<75> url_match<63>url_dictrrrr<00>frag<61>authority_match<63>authority_dictr!<00> parsed_scheme<6D>parsed_userinfo<66> parsed_host<73> parsed_portr^r_<00> parsed_path<74> parsed_query<72> parsed_frags" r1r8r8<00>s{<00><00>
 <0B>3<EFBFBD>x<EFBFBD>.<2E> <20><18><1E>(<28>(<28> <0B>
E<EFBFBD><13>
E<EFBFBD>E<><13>V<>S<EFBFBD>V<>V<><04><11>h<EFBFBD>h<EFBFBD>t<EFBFBD>n<EFBFBD><03><<3C>T<EFBFBD>H<EFBFBD>M<EFBFBD>RU<52>QV<51>VW<56> X<> <0E><19><15><1F><1F> <0E><16><17><15>f<EFBFBD>~<7E><04>&0<><14>s<EFBFBD>&;<3B><13>T<EFBFBD><19><14><06>v<EFBFBD><0E><10>6<EFBFBD><19><17><1A><1A>H<EFBFBD>%<25>+<2B><12><06>,2<>,<<3C>,<<3C>S<EFBFBD>,A<>)<29><06>v<EFBFBD><0E><01>6<EFBFBD>&<26>><3E><12>V<EFBFBD><1B>z<EFBFBD>V<EFBFBD>3<><18><16><1A><1A>J<EFBFBD><02>3<>9<>r<EFBFBD> <0A>N<><08><18><16><1A><1A>J<EFBFBD><02>3<>9<>r<EFBFBD> <0A>N<><08>9A<39><08>z<EFBFBD><11>8<EFBFBD>*<2A>5<>x<EFBFBD><06>z<EFBFBD><1A><12>V<EFBFBD><1B><19>:<3A>:<3A>j<EFBFBD>)<29>/<2F>R<EFBFBD><08>5=<3D>5G<35>5G<35><03>5L<35>2<><06>v<EFBFBD><0E> <09>6<EFBFBD>'<27>?<3F><18>"<22>F<EFBFBD>7<EFBFBD>O<EFBFBD><0E><16><17><15>z<EFBFBD>z<EFBFBD>&<26>!<21>'<27>R<EFBFBD><04> <0E>$<24>;<3B><04><0F><0F><03> 4<><14><1D><1D>s<EFBFBD>9K<39> <20><14><06>a<EFBFBD>[<5B>F<EFBFBD>6<EFBFBD>N<EFBFBD>
<1D>l<EFBFBD>l<EFBFBD>n<EFBFBD>
<EFBFBD><03>U<EFBFBD> <10> <1C><12>5<EFBFBD>z<EFBFBD>N<EFBFBD>*<2A> <20>?<3F>3<EFBFBD>%<25>z<EFBFBD>!B<>C<>C<><13>O<><15>O<>O<><1B><12>%*<2A><12><12><04><1C>j<EFBFBD>j<EFBFBD><14>&<26><03>C<>C<EFBFBD>5<EFBFBD> <0C><1B>h<EFBFBD>m<EFBFBD>C<EFBFBD>5<EFBFBD><01>3<><16>!<21><15>'<27>'<27>#<23>3<EFBFBD>'<27>1<>1<>%<25>8<> <20>#:<3A>3<EFBFBD>%<25>q<EFBFBD>!A<>B<>B<>)%<25>.<1A><0F><0F><03>$<24>I<EFBFBD> <14> <20> <20> <20><18>"<22>"<22>$<24>H<EFBFBD><14>Z<EFBFBD>Z<EFBFBD><08>(<28>8<EFBFBD>"4<> 5<> ;<3B><12>F<EFBFBD><16>
<EFBFBD>
<EFBFBD>;<3B><08><1B>(=<3D>><3E>D<>"<22>I<EFBFBD> <11>:<3A>:<3A>f<EFBFBD>h<EFBFBD>v<EFBFBD>.<2E> /<2F> 5<>2<EFBFBD>D<EFBFBD> <12>J<EFBFBD>J<EFBFBD>w<EFBFBD><08><17> 1<> 2<>E<EFBFBD> <11>:<3A>:<3A>j<EFBFBD>(<28>:<3A>"6<> 7<>D<EFBFBD>&<26>+<2B>+<2B>I<EFBFBD>6<>O<EFBFBD> <1A> &<26>&<26> &<26>$<24>.<2E>.<2E>0<>N<EFBFBD><16>z<EFBFBD>z<EFBFBD>*<2A>n<EFBFBD>Z<EFBFBD>&@<40>A<>G<>R<EFBFBD>H<EFBFBD> <11>:<3A>:<3A>f<EFBFBD>n<EFBFBD>V<EFBFBD>4<> 5<> ;<3B><12>D<EFBFBD> <11>:<3A>:<3A>f<EFBFBD>n<EFBFBD>V<EFBFBD>4<> 5<>D<EFBFBD>
 <20><1C><1C><1E>M<EFBFBD> <20><18> <0A>><3E>O<EFBFBD>"<22>4<EFBFBD>(<28>K<EFBFBD>,<2C>T<EFBFBD>6<EFBFBD>:<3A>K<EFBFBD><1E>"<22>$<24>J<EFBFBD><17>2<EFBFBD><1D>M<><1B><02>!2<>M<>k<EFBFBD><14>6M<36><12><12>$<24>:<3A>]<5D>K<><11>]<5D><1D>d<EFBFBD>#<23><04><1C>T<EFBFBD> <09>2<>K<EFBFBD>',<2C>}<7D>t<EFBFBD>%<25><05>J<EFBFBD>:W<>L<EFBFBD>&*<2A>l<EFBFBD>d<EFBFBD><05>d<EFBFBD><19>8S<38>K<EFBFBD> <17><15><17><13><13><13><14><13> <06>r2c<01>t<00>|sytj|<00>r tj|<00>|St j|<00>r tj|dd<00>|ddS|j<00>r$d}t|j<00>t|z<00><07>S tj|j<00><00>jd<08>S#tj$rt d|<00><02><02><00>wxYw#tj$rt d|<00><02><02><00>wxYw#tj$rt d |<00><02><02><00>wxYw)
NrzInvalid IPv4 address: r<00><><EFBFBD><EFBFBD><EFBFBD>zInvalid IPv6 address: z"`{}%|\rX<00>asciizInvalid IDNA hostname: )<10>IPv4_STYLE_HOSTNAMErs<00> ipaddress<73> IPv4Address<73>AddressValueErrorr<00>IPv6_STYLE_HOSTNAME<4D> IPv6AddressrLrirv<00>
SUB_DELIMS<EFBFBD>idna<6E>encode<64>decode<64> IDNAError)r"<00> WHATWG_SAFEs r1rxrx\s2<00><00> <0F><11> <1C> "<22> "<22>4<EFBFBD> (<28>  @<01> <15> !<21> !<21>$<24> '<27><14> <0B> <1C> "<22> "<22>4<EFBFBD> (<28> @<01> <15> !<21> !<21>$<24>q<EFBFBD><12>*<2A> -<2D><14>A<EFBFBD>b<EFBFBD>z<EFBFBD><19> <0A><1C><1C><1E> !<21> <0B><14>T<EFBFBD>Z<EFBFBD>Z<EFBFBD>\<5C>
<EFBFBD>[<5B>(@<40>A<>A<>=<3D><13>{<7B>{<7B>4<EFBFBD>:<3A>:<3A><<3C>(<28>/<2F>/<2F><07>8<>8<><38>=<19>*<2A>*<2A> @<01><1C>5<>d<EFBFBD>X<EFBFBD>><3E>?<3F> ?<3F> @<01><><19>*<2A>*<2A> @<01><1C>5<>d<EFBFBD>X<EFBFBD>><3E>?<3F> ?<3F> @<01><> <10>><3E>><3E>=<3D><18>2<>4<EFBFBD>(<28>;<3B><<3C><<3C>=<3D>s#<00>C <00>C0<00>1D<00> "C-<03>0"D<03>"D7c<01><><00>|<00>|dk(ry t|<00>}dddddd<06>j|<01>}||k(ry|S#t$rtd|<00><02><02><00>wxYw)NrzInvalid port: <20><00>Pi<>)<05>ftp<74>http<74>https<70>ws<77>wss)rf<00>
ValueErrorrrl)r#r<00> port_as_int<6E> default_ports r1ryry<00>sv<00><00> <0C>|<7C>t<EFBFBD>r<EFBFBD>z<EFBFBD><13>4<><19>$<24>i<EFBFBD> <0B>
<1E>r<EFBFBD>C<EFBFBD>r<EFBFBD>#<23>N<>R<>R<><0E><06>L<EFBFBD><13>l<EFBFBD>"<22><13> <16><16><> <16>4<><18>><3E>$<24><18>2<>3<>3<>4<>s <00> 4<00>A c<01><><00>|r|r|jd<01>s td<02><00>|s<|s9|jd<03>r td<04><00>|jd<05>r td<06><00>yyy)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
<20>/z7For absolute URLs, path must be empty or begin with '/'r=z3Relative URLs cannot have a path starting with '//'r+z2Relative URLs cannot have a path starting with ':'N)rmr)rr^r_s r1rzrz<00>sh<00><00><15> <10><04><0F><0F><03>,<2C><1C>V<>W<> W<> <15>m<EFBFBD> <10>?<3F>?<3F>4<EFBFBD> <20><1C>R<>S<> S<> <10>?<3F>?<3F>3<EFBFBD> <1F><1C>Q<>R<> R<> <20>,<2C>:r2c<01><><00>d|vr|S|jd<02>}d|vrd|vr|Sg}|D]9}|dk(r<01> |dk(r|s<01>|dgk7s<01>|j<00><00>)|j|<03><00>;dj|<02>S)z<>
Drop "." and ".." segments from a URL path.
For example:
normalize_path("/path/./to/somewhere/..") == "/path/to"
rUr<>z..r)<04>splitrg<00>appendr.)r<00>
components<EFBFBD>output<75> components r1r{r{<00>s<><00><00> <0B>$<24><EFBFBD><13> <0B><15><1A><1A>C<EFBFBD><1F>J<EFBFBD> <0B>*<2A><1C><14>Z<EFBFBD>!7<><13> <0B><1B>F<EFBFBD><1F> <09> <14><03> <1B> <10> <16>$<24> <1E><15>&<26>R<EFBFBD>D<EFBFBD>.<2E><16>
<EFBFBD>
<EFBFBD> <0C> <12>M<EFBFBD>M<EFBFBD>)<29> $<24> <20> <0F>8<EFBFBD>8<EFBFBD>F<EFBFBD> <1B>r2c<01>p<00>dj|jd<02>D<00>cgc]}d|d<04><04><02><02>
c}<01>Scc}w)Nrzutf-8<>%<25>02X)r.r<>)<02>string<6E>bytes r1<00>PERCENTr<54><00>s6<00><00> <0A>7<EFBFBD>7<EFBFBD>v<EFBFBD>}<7D>}<7D>W<EFBFBD>/E<>F<>/E<>t<EFBFBD>a<EFBFBD><04>S<EFBFBD>z<EFBFBD>N<EFBFBD>/E<>F<> G<>G<><47>Fs<00> 3c<01><><00>t|z}|j|<02>s|Sdj|D<00>cgc]}||vr|n
t|<03><00><02>c}<03>Scc}w)z1
Use percent-encoding to quote a string.
r)<04>UNRESERVED_CHARACTERS<52>rstripr.r<>)r<>rY<00>NON_ESCAPED_CHARSrPs r1<00>percent_encodedr<64><00>sZ<00><00>.<2E><04>4<><15> <12>=<3D>=<3D>*<2A> +<2B><15> <0A> <0A>7<EFBFBD>7<EFBFBD>JP<4A>Q<>&<26>$<24><14>*<2A>*<2A><14><07><04> <0A> =<3D>&<26>Q<> <06><06><>Qs<00>A c<01><><00>g}d}tjt|<00>D]l}|j<00>|j <00>}}|j d<01>}||k7r!|||}|j t||<01><02><00>|j |<07>|}<03>n|t|<00>k7r!||d} |j t| |<01><02><00>dj|<02>S)a<>
Use percent-encoding to quote a string, omitting existing '%xx' escape sequences.
See: https://www.rfc-editor.org/rfc/rfc3986#section-2.1
* `string`: The string to be percent-escaped.
* `safe`: A string containing characters that may be treated as safe, and do not
need to be escaped. Unreserved characters are always treated as safe.
See: https://www.rfc-editor.org/rfc/rfc3986#section-2.3
rrXNr)
<EFBFBD>re<72>finditer<65>PERCENT_ENCODED_REGEX<45>start<72>end<6E>groupr<70>r<>r`r.)
r<EFBFBD>rY<00>parts<74>current_positionrs<00>start_position<6F> end_position<6F> matched_text<78> leading_text<78> trailing_texts
r1riri<00>s<><00><00> <0F>E<EFBFBD><18><14><13><1B><1B>2<>F<EFBFBD>;<3B><05>',<2C>{<7B>{<7B>}<7D>e<EFBFBD>i<EFBFBD>i<EFBFBD>k<EFBFBD> <0C><0E><1C>{<7B>{<7B>1<EFBFBD>~<7E> <0C> <19>-<2D> -<2D>!<21>"2<>><3E>B<>L<EFBFBD> <11>L<EFBFBD>L<EFBFBD><1F><1C>D<EFBFBD>A<> B<> <0E> <0C> <0C>\<5C>"<22>'<27><18><<3C><18>3<EFBFBD>v<EFBFBD>;<3B>&<26><1E>/<2F>0<>1<> <0A> <0A> <0C> <0C>_<EFBFBD>]<5D><14>><3E>?<3F> <0A>7<EFBFBD>7<EFBFBD>5<EFBFBD>><3E>r2r6)rr&r9r(rAr%)r"r&rAr&)r#zstr | int | Nonerr&rAr')rr&r^<00>boolr_r<>rA<00>None)rr&rAr&)r<>r&rAr&)r<>r&rYr&rAr&)'<27>__doc__<5F>
__future__rr<>r<><00>typingr<67><00> _exceptionsrrar<>r<><00>compiler<65>r.<00>range<67>chrr~r}r|rjrkrw<00>formatrrrurpr<>r<><00>
NamedTupler%r8rxryrzr{r<>r<>ri)<01>is0r1<00><module>r<>s0<00><01><04>$#<23><10> <09> <0A> <0B>#<23><16><0E>I<01><16><1B>
<EFBFBD>"<22><02>
<EFBFBD>
<EFBFBD>#4<>5<><15> <0F>G<EFBFBD>G<EFBFBD><1A>4<EFBFBD><14>&<26>R<>&<26><01>!<21>3Q<33>*Q<>S<EFBFBD><11>V<EFBFBD>&<26>R<> <02> <09> <10>W<EFBFBD>W<EFBFBD><1A>4<EFBFBD><14>&<26>R<>&<26><01>!<21>3Q<33>*Q<>S<EFBFBD><11>V<EFBFBD>&<26>R<><02>
<EFBFBD> <0F>G<EFBFBD>G<EFBFBD><17>t<EFBFBD>T<EFBFBD>"<22><06>"<22>A<EFBFBD> <0C>M<> M<> <0C>A<EFBFBD><06>"<22><06> <02> <09><13><07><07><17>t<EFBFBD>T<EFBFBD>"<22><06>"<22>A<EFBFBD> <0C>G<01> G<01> <0C>A<EFBFBD><06>"<22><06> <02> <0A><13><07><07><17>t<EFBFBD>T<EFBFBD>"<22><06>"<22>A<EFBFBD> <0C>G<01> G<01> <0C>A<EFBFBD><06>"<22><06> <02> <0A><13><07><07><17>t<EFBFBD>T<EFBFBD>"<22><06>"<22>A<EFBFBD> <0C>A<01> A<01> <0C>A<EFBFBD><06>"<22><06> <02> <0A>" <17>B<EFBFBD>J<EFBFBD>J<EFBFBD> *<2A>
 <0A>f<EFBFBD>+<2B><1B> <15><15><15>  <0A><06> <02> <09>&<1D>"<22>*<2A>*<2A>T<> <0C>f<EFBFBD><15> <20> <11>  <0A><06> <02><0F> <19>b<EFBFBD>j<EFBFBD>j<EFBFBD>5<>6<><1B><12><1A><1A>I<EFBFBD>&<26> <16>B<EFBFBD>J<EFBFBD>J<EFBFBD>x<EFBFBD> <20> <17>R<EFBFBD>Z<EFBFBD>Z<EFBFBD><07> <20><1A><02>
<EFBFBD>
<EFBFBD>4<EFBFBD> <20><1A><02>
<EFBFBD>
<EFBFBD>7<EFBFBD>#<23> <16>B<EFBFBD>J<EFBFBD>J<EFBFBD>)<29> *<2A> <16>B<EFBFBD>J<EFBFBD>J<EFBFBD>t<EFBFBD> <1C> <02><0F>!<21>b<EFBFBD>j<EFBFBD>j<EFBFBD>!D<>E<><13> <20>b<EFBFBD>j<EFBFBD>j<EFBFBD><1B>-<2D><13>4
<EFBFBD>&<26>#<23>#<23>4
<EFBFBD>nD<06>N,=<3D>^<17>6S<01>2<1C>>H<01> <06><1A><>KS<01><> S<01><> <06><><06><><06><>s0<00> J <08>
J <08>> J<08>
J<08>/J<08>J<08>J<08>?J"