
    Iiާ                        S SK r S SKrS SKrS SKrS SKrS SKJ	r	  S SK
JrJr  SSKJrJrJrJr  SSKJrJrJrJrJrJrJrJr  SSKJrJrJrJrJ r J!r!J"r"  SSK#J$r$  SS	K%J&r&  SS
K'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2  SSK3J4r4  SSK5J6r6J7r7J8r8J9r9J:r:J;r;   " S S\Rx                  \=\=4   5      r> " S S5      r? " S S5      r@ " S S\Rx                  \=\=4   5      rAg)    N)Mapping)Cookie	CookieJar   )
ByteStreamUnattachedStreamencode_requestencode_response)SUPPORTED_DECODERSByteChunkerContentDecoderIdentityDecoderLineDecoderMultiDecoderTextChunkerTextDecoder)CookieConflictHTTPStatusErrorRequestNotReadResponseNotReadStreamClosedStreamConsumedrequest_context)(get_multipart_boundary_from_content_type)codes)AsyncByteStreamCookieTypesHeaderTypesQueryParamTypesRequestContentRequestDataRequestExtensionsRequestFilesResponseContentResponseExtensionsSyncByteStream)URL)is_known_encodingnormalize_header_keynormalize_header_valueobfuscate_sensitive_headersparse_content_type_charsetparse_header_linksc                   R   \ rS rSrSr  S!S\R                  \   S\R                  \   SS4S jjr	\
S\4S j5       r\R                  S	\SS4S
 j5       r\
S\R                  \R                  \\4      4S j5       rS\R"                  \   4S jrS\R&                  \   4S jrS\R*                  \\4   4S jrS\R                  \R                  \\4      4S jrS"S\S\R0                  S\R0                  4S jjrS#S\S\S\R                  \   4S jjrS"S\R                  \   SS4S jjrS$S jrS\S\4S jrS\S	\SS4S jrS\SS4S jr S\R0                  S\4S jr!S\RD                  \R0                     4S jr#S\$4S jr%S\R0                  S\4S jr&S\4S jr'S r(g)%Headers7   z1
HTTP headers, as a case-insensitive multi-dict.
Nheadersencodingreturnc                    Uc  / U l         O[        U[        5      (       a  [        UR                   5      U l         O[        U[        5      (       aI  UR                  5        VVs/ s H%  u  p4[        USUS9[        USUS9[        XB5      4PM'     snnU l         O:U VVs/ s H%  u  p4[        USUS9[        USUS9[        XB5      4PM'     snnU l         X l        g s  snnf s  snnf )NF)lowerr2   T)	_list
isinstancer/   listr   itemsr)   r*   	_encoding)selfr1   r2   kvs        3/venv/lib/python3.13/site-packages/httpx/_models.py__init__Headers.__init__<   s    
 ?DJ))gmm,DJ)) $MMO ,DA	 )%(K($J*17
 ,DJ $ $DA	 )%(K($J*17
 $DJ "%s   $,C,C!c                 
   U R                   cY  S HL  nU R                   H(  u  p# UR                  U5        UR                  U5        M*     Xl           U R                   $    SU l         U R                   $ ! [         a       Mq  f = f)zV
Header encoding is mandated as ascii, but we allow fallbacks to utf-8
or iso-8859-1.
)asciiutf-8z
iso-8859-1)r:   rawdecodeUnicodeDecodeError)r;   r2   keyvalues       r>   r2   Headers.encodingZ   s     >>!."&((JC

8,X. #+ &.N
 ~~! / ".~~ . s   "A33
BBrH   c                     Xl         g N)r:   r;   rH   s     r>   r2   rI   s   s        c                 Z    U R                    VVVs/ s H	  u  po1U4PM     snnn$ s  snnnf )z8
Returns a list of the raw header items, as byte pairs.
)r6   )r;   raw_key_rH   s       r>   rD   Headers.raww   s(    
 ;?**E*%6W% *EEEs   &c                     U R                    VVVs0 s H!  u  po2R                  U R                  5      S _M#     snnnR                  5       $ s  snnnf rK   )r6   rE   r2   keysr;   rP   rG   rH   s       r>   rS   Headers.keys~   s;    EIZZPZMAE

4==)4/ZPUUWWPs   (Ac                     0 nU R                    HV  u  p#nUR                  U R                  5      nUR                  U R                  5      nXQ;   a  X==   SU 3-  ss'   MR  XaU'   MX     UR                  5       $ )N, )r6   rE   r2   valuesr;   values_dictrP   rG   rH   str_key	str_values          r>   rX   Headers.values   sq    -/!ZZMAEjj/GT]]3I%$"YK(88$'0G$ ( !!##rM   c                     0 nU R                    HV  u  p#nUR                  U R                  5      nUR                  U R                  5      nXQ;   a  X==   SU 3-  ss'   MR  XaU'   MX     UR                  5       $ )z
Return `(key, value)` items of headers. Concatenate headers
into a single comma separated value when a key occurs multiple times.
rW   )r6   rE   r2   r9   rY   s          r>   r9   Headers.items   ss    
 .0!ZZMAEjj/GT]]3I%$"YK(88$'0G$ (   ""rM   c           	          U R                    VVVs/ s H<  u  pnUR                  U R                  5      UR                  U R                  5      4PM>     snnn$ s  snnnf )z
Return a list of `(key, value)` pairs of headers. Allow multiple
occurrences of the same key without concatenating into a single
comma separated value.
)r6   rE   r2   rT   s       r>   multi_itemsHeaders.multi_items   sP     "&
!+ ZZ&T]](CD!+
 	
 
s   AArG   defaultc                 0     X   $ ! [          a    Us $ f = f)zp
Return a header value. If multiple occurrences of the header occur
then concatenate them together with commas.
)KeyError)r;   rG   rc   s      r>   getHeaders.get   s#    
	9 	N	s    split_commasc                    UR                  5       R                  U R                  5      nU R                   VVVs/ s H7  u  pEnUR                  5       U:X  d  M  UR	                  U R                  5      PM9     nnnnU(       d  U$ / nU HA  n	UR                  U	R                  S5       V
s/ s H  oR                  5       PM     sn
5        MC     U$ s  snnnf s  sn
f )z
Return a list of all header values for a given key.
If `split_commas=True` is passed, then any comma separated header
values are split into multiple return strings.
,)r5   encoder2   r6   rE   extendsplitstrip)r;   rG   rh   get_header_keyrP   item_key
item_valuerX   split_valuesrH   items              r>   get_listHeaders.get_list   s     ++DMM: ,0::
+5'Z~~>1 -Jdmm,+5 	 
 ME%++c:J K:J$:J KL 
 !Ls   CC*C
c                     [        U5      nUR                  5        H  nX ;   d  M
  U R                  U5        M     U R                  R	                  UR                  5        g rK   )r/   rS   popr6   rl   )r;   r1   rG   s      r>   updateHeaders.update   sD    '"<<>C{ " 	

'--(rM   c                 (    [        X R                  S9$ )Nr2   )r/   r2   r;   s    r>   copyHeaders.copy   s    tmm44rM   c                 .   UR                  5       R                  U R                  5      nU R                   VVVs/ s H(  u  p4nXB:X  d  M  UR	                  U R                  5      PM*     nnnnU(       a  SR                  U5      $ [        U5      es  snnnf )z
Return a single header value.

If there are multiple headers with the same key, then we concatenate
them with commas. See: https://tools.ietf.org/html/rfc7230#section-3.2.2
rW   )r5   rk   r2   r6   rE   joinre   )r;   rG   normalized_keyrP   
header_keyheader_valuer9   s          r>   __getitem__Headers.__getitem__   s     ++DMM: 04zz
/9+|+ /L./9 	 
 99U##sm
s   B
Bc                    UR                  U R                  =(       d    S5      nUR                  U R                  =(       d    S5      nUR                  5       n[        U R                  5       VVVs/ s H  u  nu  pxnX:X  d  M  UPM     n	nnn[        U	SS 5       H  nU R                  U	 M     U	(       a  U	S   nX5U4U R                  U'   gU R                  R                  X5U45        gs  snnnf )z[
Set the header `key` to `value`, removing any duplicate entries.
Retains insertion order.
rC   r   Nr   )rk   r:   r5   	enumerater6   reversedappend)
r;   rG   rH   set_key	set_value
lookup_keyidxrP   rp   found_indexess
             r>   __setitem__Headers.__setitem__   s    
 **T^^6w7LL!:7;	]]_
 *34::)>
)>%%a1% )> 	 
 M!"-.C

3 / "C&I>DJJsOJJwI>?
s   2C-C-c                 P   UR                  5       R                  U R                  5      n[        U R                  5       VVVs/ s H!  u  nu  pEnUR                  5       U:X  d  M  UPM#     nnnnU(       d  [        U5      e[        U5       H  nU R                  U	 M     gs  snnnf )z
Remove the header `key`.
N)r5   rk   r2   r   r6   re   r   )r;   rG   del_keyr   rP   rp   pop_indexess          r>   __delitem__Headers.__delitem__   s     ))+$$T]]3 *34::)>
)>%%a1~~7* )> 	 
 3-K(C

3 )
s   B!%B!c                     UR                  5       R                  U R                  5      nX R                   VVs/ s H  u  p1o1PM	     snn;   $ s  snnf rK   )r5   rk   r2   r6   )r;   rG   r   rP   s       r>   __contains__Headers.__contains__  s?    YY[''6
::>:iaac:>>>>s   Ac                 4    [        U R                  5       5      $ rK   )iterrS   r|   s    r>   __iter__Headers.__iter__  s    DIIK  rM   c                 ,    [        U R                  5      $ rK   )lenr6   r|   s    r>   __len__Headers.__len__  s    4::rM   otherc                     [        U5      nU R                   VVVs/ s H	  u  p4oTU4PM     nnnnUR                   VVVs/ s H	  u  p4oTU4PM     nnnn[        U5      [        U5      :H  $ ! [         a     gf = fs  snnnf s  snnnf )NF)r/   
ValueErrorr6   sorted)r;   r   other_headersrP   rG   rH   	self_list
other_lists           r>   __eq__Headers.__eq__  s    	#ENM 8<zzBzmae5\z	B8E8K8KL8K}quEl8K
Li F:$666  		 CLs   A, A<B,
A98A9c                 4   U R                   R                  nSnU R                  S:w  a  SU R                  < 3n[        [	        U R                  5       5      5      n[        U5      n[        U5      [        U5      :H  nU(       a  U SU< U S3$ U SU< U S3$ )N rB   z, encoding=())	__class____name__r2   r8   r+   ra   dictr   )r;   
class_nameencoding_stras_listas_dictno_duplicate_keyss         r>   __repr__Headers.__repr__"  s    ^^,,
==G#((9:L243C3C3EFGw-LCL8 \7+l^1==Qwk,q99rM   )r:   r6   NNrK   )F)r3   r/   ))r   
__module____qualname____firstlineno____doc__typingOptionalr   strr?   propertyr2   setterListTuplebytesrD   KeysViewrS   
ValuesViewrX   	ItemsViewr9   ra   Anyrf   boolrt   rx   r}   r   r   r   r   Iteratorr   intr   r   r   __static_attributes__ rM   r>   r/   r/   7   s+    15)-"-" //#&" 
	"< #  0 __c d   FV[[eUl!;< F FXfooc* X	$))#. 	$#v''S1 #	
V[[c3h)?@ 	
s VZZ 6:: C t C@P ,)fook: )d )5s s (@s @3 @4 @0 s  t  $?

 ?t ?!&//&**5 ! 7FJJ 74 7:# :rM   r/   c                      \ rS rSrSSSSSSSSSS.	S\R
                  \\4   S\R
                  S\4   S\R                  \	   S\R                  \
   S	\R                  \   S
\R                  \   S\R                  \   S\R                  \   S\R                  \R                     S\R
                  \\S4   S\R                  \   SS4S jjrS\R(                  \\4   SS4S jr\S\4S j5       rS\4S jrS\4S jrS\4S jrS\R(                  \\R                  4   4S jrS\R(                  \\R                  4   SS4S jrSrg)Requesti2  N)	paramsr1   cookiescontentdatafilesjsonstream
extensionsmethodurlr'   r   r1   r   r   r   r   r   r   r   r3   c       	            [        U[        5      (       a  UR                  S5      R                  5       OUR                  5       U l        [        U5      U l        Ub  U R                  R                  US9U l        [        U5      U l	        Uc  0 OUU l
        U(       a  [        U5      R                  U 5        U
c  U R                  R                  S5      n[        UUUU	[        U(       a%  UR!                  U R                  R"                  5      OS S9S9u  pJU R%                  U5        Xl        [        U
[(        5      (       a  U R+                  5         g g Xl        g )NrB   )r   zcontent-type)content_type)r   r   r   r   boundary)r7   r   rE   upperr   r'   r   copy_merge_paramsr/   r1   r   Cookiesset_cookie_headerrf   r	   r   rk   r2   _preparer   r   read)r;   r   r   r   r1   r   r   r   r   r   r   r   r   s                r>   r?   Request.__init__3  s"   " &%(( MM'"((* 	
 s8xx111@DHw' * 2"
G..t4>151A1A.1QL,A# ".!4!4T\\5J5J!K
OG MM'" K&*--		 ." !KrM   default_headersc                 R   UR                  5        HF  u  p#UR                  5       S:X  a  SU R                  ;   a  M+  U R                  R                  X#5        MH     / nSU R                  ;   nSU R                  ;   =(       d    SU R                  ;   nU(       dB  U R                  R
                  (       a'  UR                  SU R                  R                  45        U(       d!  U R                  S;   a  UR                  S5        [        X@R                  R                  -   5      U l        g )Ntransfer-encodingzContent-LengthHostzTransfer-Encodings   Host)POSTPUTPATCH)s   Content-Length   0)r9   r5   r1   
setdefaultr   hostr   netlocr   r/   rD   )r;   r   rG   rH   auto_headershas_hosthas_content_lengths          r>   r   Request._prepares  s    )//1JCyy{116F$,,6VLL##C/	 2 ACT\\),S0Ct||0S 	 DHHMM$((// :;!dkk5M&M 9:|ll.>.>>?rM   c                 P    [        U S5      (       d
  [        5       eU R                  $ N_content)hasattrr   r   r|   s    r>   r   Request.content  s"    tZ(( ""}}rM   c                 D   [        U S5      (       d  [        U R                  [        R                  5      (       d   eSR                  U R                  5      U l        [        U R                  [        5      (       d  [        U R                  5      U l        U R                  $ )&
Read and return the request content.
r   rM   )r   r7   r   r   Iterabler   r   r   r|   s    r>   r   Request.read  sm     tZ((dkk6??;;;;HHT[[1DMdkk:66 )7}}rM   c                   #    [        U S5      (       dR  [        U R                  [        R                  5      (       d   eSR                  U R                   Vs/ s Sh  vN oPM  U R                  $  N
 Os  snf sn5      U l        [        U R                  [        5      (       a  MB  [        U R                  5      U l        N]7f)r   r   rM   N)r   r7   r   r   AsyncIterabler   r   r   r;   parts     r>   areadRequest.aread  s      tZ((dkk6+?+?@@@@HHT[[%I%ITd }} &J%IJDMdkk:66 )7sB   ACA6A4
A2A4
"A6&C2A4
4A651C(Cc                     U R                   R                  n[        U R                  5      nSU SU R                  < SU< S3$ )N<r   rW   z)>)r   r   r   r   r   )r;   r   r   s      r>   r   Request.__repr__  s=    ^^,,
$((m:,abr::rM   c                 |    U R                   R                  5        VVs0 s H  u  pUS;  d  M  X_M     snn$ s  snnf )N)r   r   __dict__r9   r;   namerH   s      r>   __getstate__Request.__getstate__  sE      $}}224
433 DK4
 	
 
   88statec                 z    UR                  5        H  u  p#[        XU5        M     0 U l        [        5       U l        g rK   )r9   setattrr   r   r   r;   r  r	  rH   s       r>   __setstate__Request.__setstate__  s/     ;;=KDD& )&(rM   )r   r   r1   r   r   r   )r   r   r   r   r   Unionr   r   r   r   r   r   r    r!   r#   r   r&   r   r"   r?   Dictr   r   r   r   r   r   r
  r  r   r   rM   r>   r   r   2  s    48040437-1/3,0FJ9=>!S%Z(>! \\%*%>!
 0>! ->! ->! 0>! ook*>! |,>! oofjj)>! ^_dBC>! OO$56>! 
>!@@CH(= @$ @*   
e U ;# ;

fkk#vzz/: 
)&++c6::o"> )4 )rM   r   c                      \ rS rSrSSSSSSSSSSS.
S\S\R                  \   S\R                  \   S\R                  \	   S	\R                  \	   S
\R                  S\R                  \\S4   S\R                  \   S\R                  \   S\R                  \R                   S       S\R                  \	\R"                  \/\	4   4   SS4S jjrS\R(                  \	\	4   SS4S jr\S\R0                  4S j5       r\R4                  S\R0                  SS4S j5       r\S\4S j5       r\R4                  S\SS4S j5       r\S\	4S j5       r\S\	4S j5       r\S\4S j5       r\S\4S j5       r \S\	4S j5       r!\S\R                  \	   4S j5       r"\"R4                  S\	SS4S  j5       r"\S\R                  \	   4S! j5       r#S\$4S" jr%\S\&4S# j5       r'\S\&4S$ j5       r(\S\&4S% j5       r)\S\&4S& j5       r*\S\&4S' j5       r+\S\&4S( j5       r,\S\&4S) j5       r-SBS* jr.S+\R                  S\R                  4S, jr/\SCS- j5       r0\S\R(                  \R                  \	   \R(                  \	\	4   4   4S. j5       r1\S\4S/ j5       r2S\	4S0 jr3S\R(                  \	\R                  4   4S1 jr4S2\R(                  \	\R                  4   SS4S3 jr5S\4S4 jr6 SDS5\R                  \   S\Rn                  \   4S6 jjr8 SDS5\R                  \   S\Rn                  \	   4S7 jjr9S\Rn                  \	   4S8 jr: SDS5\R                  \   S\Rn                  \   4S9 jjr;SES: jr<S\4S; jr= SDS5\R                  \   S\R|                  \   4S< jjr? SDS5\R                  \   S\R|                  \	   4S= jjr@S\R|                  \	   4S> jrA SDS5\R                  \   S\R|                  \   4S? jjrBSES@ jrCSArDg)FResponsei  NrC   )
r1   r   texthtmlr   r   requestr   historydefault_encodingstatus_coder1   r   r  r  r   r   r  r   r  r  r3   c       
         j   Xl         [        U5      U l        Xl        S U l        U	c  0 OU	U l        U
c  / O
[        U
5      U l        SU l        SU l	        Xl
        UcK  [        X4XV5      u  p'U R                  U5        Xpl        [        U[        5      (       a  U R!                  5         OXpl        SU l        g )NFr   )r  r/   r1   _requestnext_requestr   r8   r  	is_closedis_stream_consumedr  r
   r   r   r7   r   r   _num_bytes_downloaded)r;   r  r1   r   r  r  r   r   r  r   r  r  s               r>   r?   Response.__init__  s     'w'29 7;4>4FbJ$_r$w-"' 0>-gTHOGMM'" K&*--		 !K%&"rM   r   c                     UR                  5        HF  u  p#UR                  5       S:X  a  SU R                  ;   a  M+  U R                  R                  X#5        MH     g )Nr   zcontent-length)r9   r5   r1   r   )r;   r   rG   rH   s       r>   r   Response._prepare  sG    )//1JCyy{116F$,,6VLL##C/	 2rM   c                 R    [        U S5      (       d  [        S5      eU R                  $ )zM
Returns the time taken for the complete request/response
cycle to complete.
_elapsedzK'.elapsed' may only be accessed after the response has been read or closed.)r   RuntimeErrorr'  r|   s    r>   elapsedResponse.elapsed  s/     tZ((+  }}rM   r)  c                     Xl         g rK   )r'  )r;   r)  s     r>   r)  r*  	  s    rM   c                 J    U R                   c  [        S5      eU R                   $ )zB
Returns the request instance associated to the current response.
z7The request instance has not been set on this response.)r  r(  r|   s    r>   r  Response.request  s*    
 == I  }}rM   rH   c                     Xl         g rK   )r  rL   s     r>   r  r-    s    rM   c                 b     U R                   S   nUR                  SSS9$ ! [         a     gf = f)Nhttp_versionrB   ignoreerrorszHTTP/1.1)r   rE   re   )r;   r0  s     r>   r0  Response.http_version  sB    	A"&//."AL  &&wx&@@  		s   ! 
..c                      U R                   S   nUR                  SSS9$ ! [         a#    [        R                  " U R
                  5      s $ f = f)Nreason_phraserB   r1  r2  )r   rE   re   r   get_reason_phraser  )r;   r6  s     r>   r6  Response.reason_phrase%  sV    	B#'???#CM !'''AA  	=**4+;+;<<	=s   ! *AAc                 .    U R                   R                  $ )z1
Returns the URL for which the request was made.
)r  r   r|   s    r>   r   Response.url.  s    
 ||rM   c                 P    [        U S5      (       d
  [        5       eU R                  $ r   )r   r   r   r|   s    r>   r   Response.content5  s"    tZ((!##}}rM   c                 >   [        U S5      (       d  U R                  nU(       d  SU l        U R                  $ [        U R                  =(       d    SS9nSR                  UR                  U R                  5      UR                  5       /5      U l        U R                  $ )N_textr   rC   r{   )r   r   r>  r   r2   r   rE   flush)r;   r   decoders      r>   r  Response.text;  su    tW%%llG
 zz &t}}/GHWWgnnT\\&BGMMO%TU
zzrM   c                 J   [        U S5      (       d  U R                  nUb  [        U5      (       dX  [        U R                  [
        5      (       a  U R                  nO,[        U S5      (       a  U R	                  U R                  5      nU=(       d    SU l        U R                  $ )a  
Return an encoding to use for decoding the byte content into text.
The priority for determining this is given by...

* `.encoding = <>` has been set explicitly.
* The encoding as specified by the charset parameter in the Content-Type header.
* The encoding as determined by `default_encoding`, which may either be
  a string like "utf-8" indicating the encoding to use, or may be a callable
  which enables charset autodetection.
r:   r   rC   )r   charset_encodingr(   r7   r  r   r   r:   )r;   r2   s     r>   r2   Response.encodingF  s     t[)),,H'8'B'Bd33S99#44HT:..#44T]]CH%0DN~~rM   c                 H    [        U S5      (       a  [        S5      eXl        g)z
Set the encoding to use for decoding the byte content into text.

If the `text` attribute has been accessed, attempting to set the
encoding will throw a ValueError.
r>  z?Setting encoding after `text` has been accessed is not allowed.N)r   r   r:   rL   s     r>   r2   rD  \  s(     4!!Q  rM   c                 V    U R                   R                  S5      nUc  g[        U5      $ )z?
Return the encoding, as specified by the Content-Type header.
zContent-TypeN)r1   rf   r,   )r;   r   s     r>   rC  Response.charset_encodingj  s,    
 ||''7),77rM   c                    [        U S5      (       d  / nU R                  R                  SSS9nU HA  nUR                  5       R	                  5       n [
        U   nUR                  U" 5       5        MC     [        U5      S:X  a  US   U l	        U R                  $ [        U5      S:  a  [        US9U l	        U R                  $ [        5       U l	        U R                  $ ! [         a     M  f = f)z
Returns a decoder instance which can be used to decode the raw byte
content, depending on the Content-Encoding used in the response.
_decoderzcontent-encodingT)rh   r   r   )children)r   r1   rt   rn   r5   r   r   re   r   rI  r   r   )r;   decodersrX   rH   decoder_clss        r>   _get_content_decoderResponse._get_content_decoderu  s    
 tZ((46H\\**+=D*QF++-"4U";KOOKM2	   8}! ( }} X" ,h ? }} !0 1}}   s   C
C,+C,c                 B    [         R                  " U R                  5      $ )zE
A property which is `True` for 1xx status codes, `False` otherwise.
)r   is_informationalr  r|   s    r>   rP  Response.is_informational  s    
 %%d&6&677rM   c                 B    [         R                  " U R                  5      $ )zE
A property which is `True` for 2xx status codes, `False` otherwise.
)r   
is_successr  r|   s    r>   rS  Response.is_success  s    
  0 011rM   c                 B    [         R                  " U R                  5      $ )z
A property which is `True` for 3xx status codes, `False` otherwise.

Note that not all responses with a 3xx status code indicate a URL redirect.

Use `response.has_redirect_location` to determine responses with a properly
formed URL redirection.
)r   is_redirectr  r|   s    r>   rV  Response.is_redirect  s       !1!122rM   c                 B    [         R                  " U R                  5      $ )zE
A property which is `True` for 4xx status codes, `False` otherwise.
)r   is_client_errorr  r|   s    r>   rY  Response.is_client_error      
 $$T%5%566rM   c                 B    [         R                  " U R                  5      $ )zE
A property which is `True` for 5xx status codes, `False` otherwise.
)r   is_server_errorr  r|   s    r>   r]  Response.is_server_error  r[  rM   c                 B    [         R                  " U R                  5      $ )zM
A property which is `True` for 4xx and 5xx status codes, `False` otherwise.
)r   is_errorr  r|   s    r>   r`  Response.is_error  s    
 ~~d..//rM   c                     U R                   [        R                  [        R                  [        R                  [        R
                  [        R                  4;   =(       a    SU R                  ;   $ )z[
Returns True for 3xx responses with a properly formed URL redirection,
`False` otherwise.
Location)r  r   MOVED_PERMANENTLYFOUND	SEE_OTHERTEMPORARY_REDIRECTPERMANENT_REDIRECTr1   r|   s    r>   has_redirect_locationResponse.has_redirect_location  sZ      ''(((( + dll*	
rM   c                 
   U R                   nUc  [        S5      eU R                  (       a  U $ U R                  (       a  SnOSnU R                  S-  nSSSSS	.nUR                  US
5      nUR                  XS9n[        X!U S9e)z.
Raise the `HTTPStatusError` if one occurred.
zYCannot call `raise_for_status` as the request instance has not been set on this response.z{error_type} '{0.status_code} {0.reason_phrase}' for url '{0.url}'
Redirect location: '{0.headers[location]}'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/{0.status_code}z{error_type} '{0.status_code} {0.reason_phrase}' for url '{0.url}'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/{0.status_code}d   zInformational responsezRedirect responsezClient errorzServer error)r            zInvalid status code)
error_type)r  response)r  r(  rS  ri  r  rf   formatr   )r;   r  messagestatus_classerror_typesrp  s         r>   raise_for_statusResponse.raise_for_status  s     --?> 
 ??K%%w w 
 ''3.'"	
 !__\3HI
...=gFFrM   kwargsc                 D    [         R                  " U R                  40 UD6$ rK   )jsonlibloadsr   )r;   rx  s     r>   r   Response.json  s    }}T\\4V44rM   c                     [        U S5      (       d*  [        5       U l        U R                  R                  U 5        U R                  $ )N_cookies)r   r   r~  extract_cookiesr|   s    r>   r   Response.cookies  s4    tZ((#IDMMM))$/}}rM   c                     U R                   R                  S5      n0 nU(       aA  [        U5      nU H0  nUR                  S5      =(       d    UR                  S5      nXBU'   M2     U$ )z9
Returns the parsed header links of the response, if any
linkrelr   )r1   rf   r-   )r;   headerldictlinksr  rG   s         r>   r  Response.links  s\    
 !!&)&v.Ehhuo8%!c
  rM   c                     U R                   $ rK   )r"  r|   s    r>   num_bytes_downloadedResponse.num_bytes_downloaded  s    )))rM   c                 <    SU R                    SU R                   S3$ )Nz<Response [ ]>)r  r6  r|   s    r>   r   Response.__repr__  s%    T--.a0B0B/C2FFrM   c                 |    U R                   R                  5        VVs0 s H  u  pUS;  d  M  X_M     snn$ s  snnf )N)r   r   r   rI  r  r  s      r>   r
  Response.__getstate__  sE      $}}224
4LL DK4
 	
 
r  r  c                     UR                  5        H  u  p#[        XU5        M     SU l        0 U l        [	        5       U l        g )NT)r9   r  r   r   r   r   r  s       r>   r  Response.__setstate__  s6     ;;=KDD& )&(rM   c                     [        U S5      (       d$  SR                  U R                  5       5      U l        U R                  $ )'
Read and return the response content.
r   rM   )r   r   
iter_bytesr   r|   s    r>   r   Response.read&  s2     tZ((HHT__%67DM}}rM   
chunk_sizec              #     #    [        U S5      (       a_  Uc  [        U R                  5      OUn[        S[        U R                  5      [	        US5      5       H  nU R                  X"U-    v   M     gU R                  5       n[        US9n[        U R                  S9   U R                  5        H0  nUR                  U5      nUR                  U5       H  nUv   M	     M2     UR                  5       nUR                  U5       H  nUv   M	     UR                  5        H  nUv   M	     SSS5        g! , (       d  f       g= f7fzz
A byte-iterator over the decoded response content.
This allows us to handle gzip, deflate, and brotli encoded responses.
r   Nr   r   r  r  )r   r   r   rangemaxrM  r   r   r  iter_rawrE   r?  r;   r  ir@  chunker	raw_bytesdecodedchunks           r>   r  Response.iter_bytes.  s     4$$/9/AT]]+zJ1c$--0#j!2DEmmAJ77 F //1G!Z8G 7!%I%nnY7G!(!8# "9 "1 "--/$^^G4EK 5$]]_EK - 877s   BEBD4+	E4
E>Ec              #     #    [        U R                  =(       d    SS9n[        US9n[        U R                  S9   U R                  5        H0  nUR                  U5      nUR                  U5       H  nUv   M	     M2     UR                  5       nUR                  U5       H  nUv   M	     UR                  5        H  nUv   M	     SSS5        g! , (       d  f       g= f7fz
A str-iterator over the decoded response content
that handles both gzip, deflate, etc but also detects the content's
string encoding.
rC   r{   r  r  N)r   r2   r   r   r  r  rE   r?  r;   r  r@  r  byte_contenttext_contentr  s          r>   	iter_textResponse.iter_textG  s      t}}'?@4T]]3 $ 1&~~l;$^^L9EK : !2 #==?L 5 6  ) 433s   9C!BC	C!
CC!c              #     #    [        5       n[        U R                  S9   U R                  5        H  nUR	                  U5       H  nUv   M	     M!     UR                  5        H  nUv   M	     S S S 5        g ! , (       d  f       g = f7fNr  )r   r   r  r  rE   r?  r;   r@  r  lines       r>   
iter_linesResponse.iter_lines\  sc     -T]]3(#NN40DJ 1 )  
 (	 433s   B	AA8/	B	8
BB	c              #   D  #    U R                   (       a
  [        5       eU R                  (       a
  [        5       e[	        U R
                  [        5      (       d  [        S5      eSU l         SU l        [        US9n[        U R                  S9   U R
                   H=  nU =R                  [        U5      -  sl        UR                  U5       H  nUv   M	     M?     SSS5        UR                  5        H  nUv   M	     U R                  5         g! , (       d  f       N:= f7f)0
A byte-iterator over the raw response content.
z5Attempted to call a sync iterator on an async stream.Tr   r  r  N)r!  r   r   r   r7   r   r&   r(  r"  r   r   r  r   rE   r?  closer;   r  r  raw_stream_bytesr  s        r>   r  Response.iter_rawe  s      "" "">>. $++~66VWW"&%&"4T]]3$(KK **c2B.CC*$^^,<=EK > %0 4 ]]_EK % 	

 43s   BD AD4D 
DD c                    [        U R                  [        5      (       d  [        S5      eU R                  (       d>  SU l        [        U R                  S9   U R                  R                  5         SSS5        gg! , (       d  f       g= f)q
Close the response and release the connection.
Automatically called if the response body is read to completion.
z3Attempted to call an sync close on an async stream.Tr  N)r7   r   r&   r(  r   r   r  r  r|   s    r>   r  Response.close  s_    
 $++~66TUU~~!DN 7!!# 87 77s   A;;
B	c                    #    [        U S5      (       d+  SR                  U R                  5        Vs/ s Sh  vN oPM  U R                  $  N
 Os  snf sn5      U l        N"7f)r  r   rM   N)r   r   aiter_bytesr   r   s     r>   r   Response.aread  sK      tZ((HHT=M=M=O%P%PTd}} &Q%PQDMs5   /A!AA
AA
AA!A
AA!c                  #    [        U S5      (       a`  Uc  [        U R                  5      OUn[        S[        U R                  5      [	        US5      5       H  nU R                  X"U-    7v   M     gU R                  5       n[        US9n[        U R                  S9   U R                  5         Sh  vN nUR                  U5      nUR                  U5       H  nU7v   M
     M9   N4
 UR                  5       nUR                  U5       H  nU7v   M
     UR                  5        H  nU7v   M
     SSS5        g! , (       d  f       g= f7fr  )r   r   r   r  r  rM  r   r   r  	aiter_rawrE   r?  r  s           r>   r  Response.aiter_bytes  s
     4$$/9/AT]]+zJ1c$--0#j!2DEmmAJ77 F //1G!Z8G 7'+~~'7 $)%nnY7G!(!8# "9$'7 "--/$^^G4EK 5$]]_EK - 877sC   BE D?1C,5C*6C,91D?*C,,A
D?6	E?
E	Ec                  #    [        U R                  =(       d    SS9n[        US9n[        U R                  S9   U R                  5         Sh  vN nUR                  U5      nUR                  U5       H  nU7v   M
     M9   N4
 UR                  5       nUR                  U5       H  nU7v   M
     UR                  5        H  nU7v   M
     SSS5        g! , (       d  f       g= f7fr  )r   r2   r   r   r  r  rE   r?  r  s          r>   
aiter_textResponse.aiter_text  s      t}}'?@4T]]3&*&6&6&8  l&~~l;$^^L9EK : &8 #==?L 5 6  ) 433sA   9C+CBBB1CBA
C	C+
C($C+c                (  #    [        5       n[        U R                  S9   U R                  5         S h  vN nUR	                  U5       H  nU7v   M
     M(   N#
 UR                  5        H  nU7v   M
     S S S 5        g ! , (       d  f       g = f7fr  )r   r   r  r  rE   r?  r  s       r>   aiter_linesResponse.aiter_lines  sk     -T]]3"oo/ d#NN40DJ 1/  
 (	 433s<   BBAAA BAB8	B
BBc                j  #    U R                   (       a
  [        5       eU R                  (       a
  [        5       e[	        U R
                  [        5      (       d  [        S5      eSU l         SU l        [        US9n[        U R                  S9   U R
                    Sh  vN nU =R                  [        U5      -  sl        UR                  U5       H  nU7v   M
     MF   NA
 SSS5        O! , (       d  f       O= fUR                  5        H  nU7v   M
     U R                  5       I Sh  vN    g7f)r  z6Attempted to call an async iterator on an sync stream.Tr   r  r  N)r!  r   r   r   r7   r   r   r(  r"  r   r   r  r   rE   r?  acloser  s        r>   r  Response.aiter_raw  s      "" "">>. $++77WXX"&%&"4T]]3*.++  &**c2B.CC*$^^,<=EK > + 433 ]]_EK % kkmsN   BD3C,C"C C"">C, C""C,#	D3,
C:66D3,D/-D3c                 4  #    [        U R                  [        5      (       d  [        S5      eU R                  (       dF  SU l        [        U R                  S9   U R                  R                  5       I Sh  vN   SSS5        gg N! , (       d  f       g= f7f)r  z3Attempted to call an async close on an sync stream.Tr  N)r7   r   r   r(  r   r   r  r  r|   s    r>   r  Response.aclose  sn     
 $++77TUU~~!DN 7kk((*** 87  + 87s0   ABB6B7B;
BB
BB)r   r~  rI  r'  r:   r"  r  r>  r  r   r1   r  r   r!  r  r  r   )r3   r  )r3   r   rK   )r3   N)Er   r   r   r   r   r   r   r   r$   r   r   r  r&   r   r   r%   r   Callabler   r?   r  r   r   datetime	timedeltar)  r   r  r0  r6  r'   r   r   r  r2   rC  r   rM  r   rP  rS  rV  rY  r]  r`  ri  rv  r   r   r  r  r   r
  r  r   r   r  r  r  r  r  r   AsyncIteratorr  r  r  r  r  r   r   rM   r>   r  r    s   
 1548%)%)FJ,0:><@MT5'5' -	5'
 15' ooc"5' ooc"5' jj5' ^_dBC5' )5' OO$675' Z!895' !,,sFOOUGSL,I'IJ5' 
5'n0CH(= 0$ 0 
++ 
 
 ^^ x11  d        ^^W    Ac A A Bs B B  S       
 c   &//#.  * __c d   8&//#"6 8 8n 2 8$ 8 8 2D 2 2 	3T 	3 	3 7 7 7 7 7 7 0$ 0 0 
t 
 
,#GJ5VZZ 5FJJ 5   v{{6??3#7S#X9N#NO   *c * *G# G
fkk#vzz/: 
)&++c6::o"> )4 )e  26  //#. 		 4 26 //#.		*FOOC0  26 //#.		8$U  26  //#. 			e	$ 4 26 //#.			c	"*6#7#7#<  26 //#.			e	$8+rM   r  c                      \ rS rSrSrS!S\R                  \   SS4S jjrS\	SS4S jr
S	\SS4S
 jrS"S\S\S\S\SS4
S jjr   S#S\S\R                  \   S\R                  \   S\R                  \   S\R                  \   4
S jjr  S$S\S\R                  \   S\R                  \   SS4S jjr S$S\R                  \   S\R                  \   SS4S jjrS!S\R                  \   SS4S jjrS\S\SS4S jrS\S\4S jrS\SS4S jrS\4S jrS\R0                  \   4S jrS\4S jrS\4S jr " S S\R<                  R                  5      r " S S5      r S r!g)%r   i  z%
HTTP Cookies, as a mutable mapping.
Nr   r3   c                    Ub  [        U[        5      (       aP  [        5       U l        [        U[        5      (       a+  UR	                  5        H  u  p#U R                  X#5        M     g g [        U[        5      (       a,  [        5       U l        U H  u  p#U R                  X#5        M     g [        U[        5      (       a>  [        5       U l        UR                   H  nU R                  R                  U5        M      g Xl        g rK   )	r7   r   r   jarr9   setr8   r   
set_cookie)r;   r   rG   rH   cookies        r>   r?   Cookies.__init__  s    ?j$77 {DH'4((")--/JCHHS( #2 ) && {DH%
$ &)) {DH!++##F+ & HrM   rq  c                     U R                  U5      nU R                  UR                  5      nU R                  R	                  X#5        g)z?
Loads any cookies based on the response `Set-Cookie` headers.
N)_CookieCompatResponse_CookieCompatRequestr  r  r  )r;   rq  urllib_responseurllib_requests       r>   r  Cookies.extract_cookies  s<     44X>2283C3CD  ArM   r  c                 \    U R                  U5      nU R                  R                  U5        g)z=
Sets an appropriate 'Cookie:' HTTP header on the `Request`.
N)r  r  add_cookie_header)r;   r  r  s      r>   r   Cookies.set_cookie_header  s&     227;"">2rM   r	  rH   domainpathc                     0 SS_SU_SU_SS_SS_S	U_S
[        U5      _SUR                  S5      _SU_S[        U5      _SS_SS_SS_SS_SS_SSS0_SS_n[        S0 UD6nU R                  R	                  U5        g)zE
Set a cookie value by name. May optionally include domain and path.
versionr   r	  rH   portNport_specifiedFr  domain_specifieddomain_initial_dot.r  path_specifiedsecureexpiresdiscardTcommentcomment_urlrestHttpOnlyrfc2109r   )r   
startswithr   r  r  )r;   r	  rH   r  r  rx  r  s          r>   r  Cookies.set  s
   
q
D
 U
 D	

 e
 f
 V
 !&"3"3C"8
 D
 d4j
 e
 t
 t
 t
 4
  Z&!
" u#
& !&!F#rM   rc   c                     SnU R                    H^  nUR                  U:X  d  M  Ub  UR                  U:X  d  M*  Ub  UR                  U:X  d  M?  Ub  SU 3n[	        U5      eUR
                  nM`     Uc  U$ U$ )zt
Get a cookie by name. May optionally include domain and path
in order to specify exactly which cookie to retrieve.
Nz!Multiple cookies exist with name=)r  r	  r  r  r   rH   )r;   r	  rc   r  r  rH   r  rs  s           r>   rf   Cookies.get7  sz     hhF{{d">V]]f%<|v{{d': ,(I$&PG"0"99 &  =NrM   c                    Ub  Ub  U R                   R                  X#U5      $ U R                    Vs/ s HA  nUR                  U:X  d  M  Ub  UR                  U:X  d  M*  Ub  UR                  U:X  d  M?  UPMC     nnU H>  nU R                   R                  UR                  UR                  UR                  5        M@     gs  snf )zu
Delete a cookie by name. May optionally include domain and path
in order to specify exactly which cookie to delete.
N)r  clearr	  r  r  )r;   r	  r  r  r  removes         r>   deleteCookies.deleteP  s     $"288>>&55 ((
"{{d"  6==F#:  !4	 " 	 
 FHHNN6==&++v{{C 
s   C 	C C 3C c                     / nUb  UR                  U5        Ub  Uc   eUR                  U5        U R                  R                  " U6   g)zo
Delete all cookies. Optionally include a domain and path in
order to only delete a subset of all the cookies.
N)r   r  r  )r;   r  r  argss       r>   r  Cookies.clearh  sI     KK%%%KKrM   c                 v    [        U5      nUR                   H  nU R                  R                  U5        M      g rK   )r   r  r  )r;   r   r  s      r>   rx   Cookies.updatew  s,    '"kkFHH' "rM   c                 $    U R                  X5      $ rK   )r  r  s      r>   r   Cookies.__setitem__|  s    xx$$rM   c                 D    U R                  U5      nUc  [        U5      eU$ rK   )rf   re   r  s      r>   r   Cookies.__getitem__  s#    =4. rM   c                 $    U R                  U5      $ rK   )r  )r;   r	  s     r>   r   Cookies.__delitem__  s    {{4  rM   c                 ,    [        U R                  5      $ rK   )r   r  r|   s    r>   r   Cookies.__len__  s    488}rM   c                 (    S U R                    5       $ )Nc              3   8   #    U  H  oR                   v   M     g 7frK   )r	  ).0r  s     r>   	<genexpr>#Cookies.__iter__.<locals>.<genexpr>  s     3((s   r  r|   s    r>   r   Cookies.__iter__  s    3$((33rM   c                 *    U R                    H  n  g   g)NTFr  )r;   rP   s     r>   __bool__Cookies.__bool__  s    A rM   c                     SR                  U R                   Vs/ s H-  nSUR                   SUR                   SUR                   S3PM/     sn5      nSU S3$ s  snf )NrW   z<Cookie =z for z />z	<Cookies[r  )r   r  r	  rH   r  )r;   r  cookies_reprs      r>   r   Cookies.__repr__  sh    yy #hh&F 6;;-qeFMM?#N&
 <.++s   4Ac                   T   ^  \ rS rSrSrS\SS4U 4S jjrS\S\SS4U 4S	 jjrS
r	U =r
$ )Cookies._CookieCompatRequesti  j
Wraps a `Request` instance up in a compatibility interface suitable
for use with `CookieJar` operations.
r  r3   Nc                    > [         TU ]  [        UR                  5      [	        UR
                  5      UR                  S9  Xl        g )N)r   r1   r   )superr?   r   r   r   r1   r   r  )r;   r  r   s     r>   r?   %Cookies._CookieCompatRequest.__init__  s;    G$W__-~~  
 #LrM   rG   rH   c                 T   > [         TU ]  X5        X R                  R                  U'   g rK   )r  add_unredirected_headerr  r1   )r;   rG   rH   r   s      r>   r  4Cookies._CookieCompatRequest.add_unredirected_header  s"    G+C7(-LL  %rM   r  )r   r   r   r   r   r   r?   r   r  r   __classcell__)r   s   @r>   r  r    s:    	
	#G 	# 	#	.s 	.3 	.4 	. 	.rM   r  c                   `    \ rS rSrSrS\SS4S jrS\R                  R                  4S jr
Srg)	Cookies._CookieCompatResponsei  r  rq  r3   Nc                     Xl         g rK   rq  )r;   rq  s     r>   r?   &Cookies._CookieCompatResponse.__init__  s    $MrM   c                     [         R                  R                  5       nU R                  R                  R                  5        H	  u  p#X1U'   M     U$ rK   )emailrs  Messagerq  r1   ra   )r;   inforG   rH   s       r>   r)  "Cookies._CookieCompatResponse.info  sD    ==((*D"mm33??A
 "S		 B
 KrM   r$  )r   r   r   r   r   r  r?   r'  rs  r(  r)  r   r   rM   r>   r  r"    s0    	
	%X 	%$ 	%	%--// 	rM   r  r  rK   )r   /)NNNr   )"r   r   r   r   r   r   r   r   r?   r  r  r   r   r   r  rf   r  r  rx   r   r   r   r   r   r   r   r   r  r   urllibr  r  r  r   r   rM   r>   r   r     s    <  "B BT B3 3T 3$ $C $ $ $t $: )-'+%) % $	
 ooc" 
	8 (,%)	DD $D ooc"	D
 
D2 QUooc*9?9M	(fook: (d (
% %C %D %  ! ! ! 4&//#. 4$ 
,# ,.v~~55 .$ rM   r   )Br  email.messager'  r   rz  r   urllib.requestr,  collections.abcr   http.cookiejarr   r   r   r   r   r	   r
   	_decodersr   r   r   r   r   r   r   r   _exceptionsr   r   r   r   r   r   r   
_multipartr   _status_codesr   _typesr   r   r   r   r    r!   r"   r#   r$   r%   r&   _urlsr'   _utilsr(   r)   r*   r+   r,   r-   MutableMappingr   r/   r   r  r   r   rM   r>   <module>r9     s         # , S S	 	 	   A       x:f##CH- x:vH) H)Vw+ w+tHf##CH- HrM   