
    Ng                       d dl mZ d dlZd dlZd dlZd dlZd dlZ	d dl
mZ d dlmZmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd	l%m&Z& dd
l'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= g dZ> G d dej?        e@e@f                   ZA G d d          ZB G d d          ZC G d dej?        e@e@f                   ZDdS )    )annotationsN)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_links)CookiesHeadersRequestResponsec                      e Zd ZdZ	 	 d.d/d	Zed0d            Zej        d1d            Zed2d            Zd3dZ	d4dZ
d5dZd6dZd7d8dZd9d:d Zd7d;d!Zd<d"Zd=d#Zd>d$Zd?d%Zd@d&ZdAd(ZdBd*ZdCd,Zd0d-ZdS )Dr0   z9
    HTTP headers, as a case-insensitive multi-dict.
    NheadersHeaderTypes | Noneencoding
str | NonereturnNonec                $   |g | _         n}t          |t                    rt          |j                   | _         nNt          |t                    r&fd|                                D             | _         nfd|D             | _         | _        d S )Nc                |    g | ]8\  }}t          |d           t          |d          t          |          f9S F)lowerr6   Tr*   r+   .0kvr6   s      I/var/www/html/ai-engine/env/lib/python3.11/site-packages/httpx/_models.py
<listcomp>z$Headers.__init__.<locals>.<listcomp>J   b        Aq	 )%(KKK($JJJ*1h77      c                |    g | ]8\  }}t          |d           t          |d          t          |          f9S r<   r>   r?   s      rC   rD   z$Headers.__init__.<locals>.<listcomp>S   rE   rF   )_list
isinstancer0   listr   items	_encoding)selfr4   r6   s     `rC   __init__zHeaders.__init__@   s    
 ?DJJ)) 	gm,,DJJ)) 	    $MMOO  DJJ    $  DJ "rF   strc                    | j         ^dD ]T}| j        D ]A\  }}	 |                    |           |                    |           1# t          $ r Y  nw xY w|| _          nUd| _         | j         S )zn
        Header encoding is mandated as ascii, but we allow fallbacks to utf-8
        or iso-8859-1.
        N)asciiutf-8z
iso-8859-1)rL   rawdecodeUnicodeDecodeError)rM   r6   keyvalues       rC   r6   zHeaders.encoding^   s     >!. . ."&( 
 
JC

8,,,X....-   
 &.DNE  ".~s   *A
AArW   c                    || _         d S N)rL   rM   rW   s     rC   r6   zHeaders.encodingw   s    rF   list[tuple[bytes, bytes]]c                $    d | j         D             S )zH
        Returns a list of the raw header items, as byte pairs.
        c                    g | ]
\  }}}||fS  r^   )r@   raw_key_rW   s       rC   rD   zHeaders.raw.<locals>.<listcomp>   s$    EEE%6Wa% EEErF   rH   rM   s    rC   rS   zHeaders.raw{   s    
 FE$*EEEErF   typing.KeysView[str]c                N      fd j         D                                             S )Nc                N    i | ]!\  }}}|                     j                  d "S rY   rT   r6   r@   r`   rV   rW   rM   s       rC   
<dictcomp>z Headers.keys.<locals>.<dictcomp>   s/    PPPMAsE

4=))4PPPrF   )rH   keysrb   s   `rC   ri   zHeaders.keys   s+    PPPPTZPPPUUWWWrF   typing.ValuesView[str]c                    i }| j         D ]W\  }}}|                    | j                  }|                    | j                  }||v r||xx         d| z  cc<   R|||<   X|                                S )N, )rH   rT   r6   valuesrM   values_dictr`   rV   rW   str_key	str_values          rC   rm   zHeaders.values   s    &(!Z 	1 	1MAsEjj//GT]33I+%%G$$$(8Y(8(88$$$$'0G$$!!###rF   typing.ItemsView[str, str]c                    i }| j         D ]W\  }}}|                    | j                  }|                    | j                  }||v r||xx         d| z  cc<   R|||<   X|                                S )z
        Return `(key, value)` items of headers. Concatenate headers
        into a single comma separated value when a key occurs multiple times.
        rl   )rH   rT   r6   rK   rn   s          rC   rK   zHeaders.items   s    
 ')!Z 	1 	1MAsEjj//GT]33I+%%G$$$(8Y(8(88$$$$'0G$$  """rF   list[tuple[str, str]]c                *      fd j         D             S )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.
        c                    g | ]:\  }}}|                     j                  |                     j                  f;S r^   rf   rg   s       rC   rD   z'Headers.multi_items.<locals>.<listcomp>   sP     
 
 
3 ZZ&&T](C(CD
 
 
rF   ra   rb   s   `rC   multi_itemszHeaders.multi_items   s0    
 
 
 
!%
 
 
 	
rF   rV   default
typing.Anyc                8    	 | |         S # t           $ r |cY S w xY w)z
        Return a header value. If multiple occurrences of the header occur
        then concatenate them together with commas.
        )KeyError)rM   rV   rx   s      rC   getzHeaders.get   s5    
	9 	 	 	NNN	s   
 Fsplit_commasbool	list[str]c                    |                                                      j                   fd j        D             }|s|S g }|D ]4}|                    d |                    d          D                        5|S )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.
        c                |    g | ]8\  }}}|                                 k    |                    j                  9S r^   )r=   rT   r6   )r@   r`   item_key
item_valueget_header_keyrM   s       rC   rD   z$Headers.get_list.<locals>.<listcomp>   sN     
 
 
'8Z~~>11 dm,,111rF   c                6    g | ]}|                                 S r^   )strip)r@   items     rC   rD   z$Headers.get_list.<locals>.<listcomp>   s      K K K$ K K KrF   ,)r=   encoder6   rH   extendsplit)rM   rV   r}   rm   split_valuesrW   r   s   `     @rC   get_listzHeaders.get_list   s     ++DM::
 
 
 
 
+/:
 
 
  	M 	M 	ME K K%++c:J:J K K KLLLLrF   c                    t          |          }|                                D ]}|| v r|                     |           | j                            |j                   d S rY   )r0   ri   poprH   r   )rM   r4   rV   s      rC   updatezHeaders.update   s]    '""<<>> 	 	Cd{{
'-(((((rF   c                .    t          | | j                  S )Nr6   )r0   r6   rb   s    rC   copyzHeaders.copy   s    tdm4444rF   c                     |                                                      j                   fd j        D             }|rd                    |          S t          |          )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
        c                X    g | ]&\  }}}|k    |                     j                  'S r^   rf   )r@   r`   
header_keyheader_valuenormalized_keyrM   s       rC   rD   z'Headers.__getitem__.<locals>.<listcomp>   sD     
 
 
+:|^++ ..+++rF   rl   )r=   r   r6   rH   joinr{   )rM   rV   rK   r   s   `  @rC   __getitem__zHeaders.__getitem__   sz     ++DM::
 
 
 
 
/3z
 
 
  	$99U###smmrF   c                   |                     | j        pd          }|                     | j        pd          }|                                fdt          | j                  D             }t          |dd                   D ]
}| j        |= |r|d         }||f| j        |<   dS | j                            ||f           dS )zs
        Set the header `key` to `value`, removing any duplicate entries.
        Retains insertion order.
        rR   c                .    g | ]\  }\  }}}|k    |S r^   r^   )r@   idxr`   r   
lookup_keys       rC   rD   z'Headers.__setitem__.<locals>.<listcomp>   s9     
 
 
%%a1:%% %%%rF   r   Nr   )r   rL   r=   	enumeraterH   reversedappend)rM   rV   rW   set_key	set_valuefound_indexesr   r   s          @rC   __setitem__zHeaders.__setitem__   s    
 **T^6w77LL!:7;;	]]__

 
 
 
)24:)>)>
 
 
 M!""-.. 	  	 C
3 	@"C&
I>DJsOOOJw
I>?????rF   c                    |                                                     | j                  fdt          | j                  D             }|st          |          t          |          D ]
}| j        |= dS )z*
        Remove the header `key`.
        c                R    g | ]#\  }\  }}}|                                 k    !|$S r^   )r=   )r@   r   r`   r   del_keys       rC   rD   z'Headers.__delitem__.<locals>.<listcomp>  sC     
 
 
%%a1~~7** ***rF   N)r=   r   r6   r   rH   r{   r   )rM   rV   pop_indexesr   r   s       @rC   __delitem__zHeaders.__delitem__   s     ))++$$T]33
 
 
 
)24:)>)>
 
 
  	 3--K(( 	  	 C
3	  	 rF   c                    |                                                     | j                  }|d | j        D             v S )Nc                    g | ]\  }}}|	S r^   r^   )r@   r`   rV   s      rC   rD   z(Headers.__contains__.<locals>.<listcomp>  s    >>>iaac>>>rF   )r=   r   r6   rH   )rM   rV   r   s      rC   __contains__zHeaders.__contains__  s;    YY[[''66
>>4:>>>>>rF   typing.Iterator[typing.Any]c                D    t          |                                           S rY   )iterri   rb   s    rC   __iter__zHeaders.__iter__  s    DIIKK   rF   intc                *    t          | j                  S rY   )lenrH   rb   s    rC   __len__zHeaders.__len__  s    4:rF   otherc                    	 t          |          }n# t          $ r Y dS w xY wd | j        D             }d |j        D             }t          |          t          |          k    S )NFc                    g | ]
\  }}}||fS r^   r^   r@   r`   rV   rW   s       rC   rD   z"Headers.__eq__.<locals>.<listcomp>"  s"    BBBmaec5\BBBrF   c                    g | ]
\  }}}||fS r^   r^   r   s       rC   rD   z"Headers.__eq__.<locals>.<listcomp>#  s"    LLL}q#usElLLLrF   )r0   
ValueErrorrH   sorted)rM   r   other_headers	self_list
other_lists        rC   __eq__zHeaders.__eq__  s    	#ENNMM 	 	 	55	 CBtzBBB	LL8KLLL
i  F:$6$666s    
  c                .   | j         j        }d}| j        dk    r
d| j        }t          t	          |                                                     }t          |          }t          |          t          |          k    }|r
| d|| dS | d|| dS )N rQ   z, encoding=())	__class____name__r6   rJ   r,   rw   dictr   )rM   
class_nameencoding_stras_listas_dictno_duplicate_keyss         rC   __repr__zHeaders.__repr__&  s    ^,
=G##:::L243C3C3E3EFFGGw--LLCLL8 	> ==7=l====99w9,9999rF   NN)r4   r5   r6   r7   r8   r9   r8   rO   rW   rO   r8   r9   )r8   r[   )r8   rc   )r8   rj   )r8   rr   )r8   rt   rY   )rV   rO   rx   ry   r8   ry   )F)rV   rO   r}   r~   r8   r   )r4   r5   r8   r9   )r8   r0   )rV   rO   r8   rO   rV   rO   rW   rO   r8   r9   )rV   rO   r8   r9   )rV   ry   r8   r~   )r8   r   r8   r   )r   ry   r8   r~   )r   
__module____qualname____doc__rN   propertyr6   setterrS   ri   rm   rK   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r^   rF   rC   r0   r0   ;   s         '+#" " " " "<    X0 _   _ F F F XFX X X X	$ 	$ 	$ 	$# # # #	
 	
 	
 	
        ,) ) ) ) )5 5 5 5   (@ @ @ @0       $? ? ? ?! ! ! !   7 7 7 7: : : : : :rF   r0   c            
      t    e Zd Zdddddddddd	d)dZd*dZed+d             Zd+d!Zd+d"Zd,d$Z	d-d&Z
d.d(ZdS )/r1   N)	paramsr4   cookiescontentdatafilesjsonstream
extensionsmethodstr | bytesurl	URL | strr   QueryParamTypes | Noner4   r5   r   CookieTypes | Noner   RequestContent | Noner   RequestData | Noner   RequestFiles | Noner   typing.Any | Noner   'SyncByteStream | AsyncByteStream | Noner   RequestExtensions | Noner8   r9   c       	           t          |t                    r'|                    d                                          n|                                | _        t          |          | _        | | j                            |          | _        t          |          | _	        |i n|| _
        |r"t          |                              |            |
| j	                            d          }t          ||||	t          |r|                    | j	        j                  nd                     \  }}
|                     |           |
| _        t          |
t(                    r|                                  d S d S |
| _        d S )NrQ   )r   zcontent-type)content_type)r   r   r   r   boundary)rI   bytesrT   upperr   r(   r   copy_merge_paramsr0   r4   r   r/   set_cookie_headerr|   r
   r   r   r6   _preparer   r   read)rM   r   r   r   r4   r   r   r   r   r   r   r   r   s                rC   rN   zRequest.__init__7  s   " &%(( FMM'""((*** 	
 s88x111@@DHw'' * 2""
 	5G..t444>'+|'7'7'G'GL,A#"!4!4T\5J!K!K!K  
 
 
OGV MM'""" DK&*-- 		 " !DKKKrF   default_headersdict[str, str]c                   |                                 D ]B\  }}|                                dk    r
d| j        v r'| j                            ||           Cg }d| j        v }d| j        v pd| j        v }|s-| j        j        r!|                    d| j        j        f           |s| j        dv r|                    d           t          || j        j
        z             | _        d S )Ntransfer-encodingzContent-LengthHostzTransfer-Encodings   Host)POSTPUTPATCH)s   Content-Length   0)rK   r=   r4   
setdefaultr   hostr   netlocr   r0   rS   )rM   r   rV   rW   auto_headershas_hosthas_content_lengths          rC   r   zRequest._preparew  s   )//11 	0 	0JCyy{{1116F$,6V6VL##C////24T\),S0Ct|0S 	  	<DHM 	<$(/ :;;;! 	;dk5M&M&M 9:::|dl.>>??rF   r   c                L    t          | d          st                      | j        S N_content)hasattrr   r  rb   s    rC   r   zRequest.content  s(    tZ(( 	# """}rF   c                   t          | d          sst          | j        t          j                  sJ d                    | j                  | _        t          | j        t                    st          | j                  | _        | j        S )6
        Read and return the request content.
        r  rF   )r  rI   r   typingIterabler   r  r   rb   s    rC   r   zRequest.read  st     tZ(( 	8dk6?;;;;;HHT[11DMdk:66 8 )77}rF   c                :  K   t          | d          st          | j        t          j                  sJ d                    d | j        2              d{V           | _        t          | j        t                    st          | j                  | _        | j        S )r
  r  rF   c                "   K   g | 3 d {V }|
6 S rY   r^   r@   parts     rC   rD   z!Request.aread.<locals>.<listcomp>  s.      %I%I%I%I%I%I%I%ITd%I%I%I%I   N)r  rI   r   r  AsyncIterabler   r  r   rb   s    rC   areadzRequest.aread  s       tZ(( 	8dk6+?@@@@@HH%I%IT[%I%I%I%I%I%I%I%I%IJJDMdk:66 8 )77}rF   rO   c                d    | j         j        }t          | j                  }d| d| j        d|dS )N<r   rl   z)>)r   r   rO   r   r   )rM   r   r   s      rC   r   zRequest.__repr__  s<    ^,
$(mm::::::::::rF   dict[str, typing.Any]c                H    d | j                                         D             S )Nc                "    i | ]\  }}|d v	||S ))r   r   r^   r@   namerW   s      rC   rh   z(Request.__getstate__.<locals>.<dictcomp>  s4     
 
 
e333 %333rF   __dict__rK   rb   s    rC   __getstate__zRequest.__getstate__  1    
 
#}2244
 
 
 	
rF   statec                    |                                 D ]\  }}t          | ||           i | _        t                      | _        d S rY   )rK   setattrr   r	   r   rM   r  r  rW   s       rC   __setstate__zRequest.__setstate__  sJ     ;;== 	' 	'KD%D$&&&&&((rF   )r   r   r   r   r   r   r4   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r9   r   r   r8   r9   r8   r   r   r8   r  r  r  r8   r9   )r   r   r   rN   r   r   r   r   r  r   r  r#  r^   rF   rC   r1   r1   6  s         *.&*&*)-#'%)"&:>/3>! >! >! >! >! >!@@ @ @ @*    X
      ; ; ; ;

 
 
 
) ) ) ) ) )rF   r1   c                     e Zd Zddddddddddd
d[dZd\dZed]d             Zej        d^d"            Zed_d$            Zej        d`d&            Zedad(            Z	edad)            Z
edbd+            Zedcd-            Zedad.            Zeddd/            Zej        ded0            Zeddd1            Zdfd3Zedgd5            Zedgd6            Zedgd7            Zedgd8            Zedgd9            Zedgd:            Zedgd;            Zdhd<Zdid>Zedjd@            ZedkdB            ZedldC            ZdadDZdmdFZdndHZdcdIZ dodpdMZ!dodqdOZ"drdPZ#dodpdQZ$dsdRZ%dcdSZ&	 dodtdUZ'	 dodudWZ(dvdXZ)	 dodtdYZ*dsdZZ+dS )wr2   NrR   )
r4   r   texthtmlr   r   requestr   historydefault_encodingstatus_coder   r4   r5   r   ResponseContent | Noner)  r7   r*  r   ry   r   r   r+  Request | Noner   ResponseExtensions | Noner,  list[Response] | Noner-  #str | typing.Callable[[bytes], str]r8   r9   c       
           || _         t          |          | _        || _        d | _        |	i n|	| _        |
g nt          |
          | _        d| _        d| _	        || _
        |[t          ||||          \  }}|                     |           || _        t          |t                    r|                                  n|| _        d| _        d S )NFr   )r.  r0   r4   _requestnext_requestr   rJ   r,  	is_closedis_stream_consumedr-  r   r   r   rI   r   r   _num_bytes_downloaded)rM   r.  r4   r   r)  r*  r   r   r+  r   r,  r-  s               rC   rN   zResponse.__init__  s     'w''(/ -14>4FbbJ$_rr$w--"' 0>-gtT4HHOGVMM'""" DK&*-- 		 !DK%&"""rF   r   r   c                    |                                 D ]B\  }}|                                dk    r
d| j        v r'| j                            ||           Cd S )Nr   zcontent-length)rK   r=   r4   r   )rM   r   rV   rW   s       rC   r   zResponse._prepare  sj    )//11 	0 	0JCyy{{1116F$,6V6VL##C////		0 	0rF   datetime.timedeltac                N    t          | d          st          d          | j        S )ze
        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=  rb   s    rC   elapsedzResponse.elapsed   s7     tZ(( 	+   }rF   r?  c                    || _         d S rY   )r=  )rM   r?  s     rC   r?  zResponse.elapsed  s    rF   r1   c                <    | j         t          d          | j         S )zR
        Returns the request instance associated to the current response.
        Nz7The request instance has not been set on this response.)r5  r>  rb   s    rC   r+  zResponse.request  s+    
 = I   }rF   rW   c                    || _         d S rY   )r5  rZ   s     rC   r+  zResponse.request  s    rF   rO   c                n    	 | j         d         }|                    dd          S # t          $ r Y dS w xY w)Nhttp_versionrQ   ignoreerrorszHTTP/1.1)r   rT   r{   )rM   rD  s     rC   rD  zResponse.http_version   sS    	A"&/."AL  &&wx&@@@  	 	 	::	s   & 
44c                    	 | j         d         }|                    dd          S # t          $ r t          j        | j                  cY S w xY w)Nreason_phraserQ   rE  rF  )r   rT   r{   r   get_reason_phraser.  )rM   rI  s     rC   rI  zResponse.reason_phrase)  sf    	B#'??#CM !'''AAA  	= 	= 	=*4+;<<<<<	=s   & #AAr(   c                    | j         j        S )zA
        Returns the URL for which the request was made.
        )r+  r   rb   s    rC   r   zResponse.url2  s    
 |rF   r   c                L    t          | d          st                      | j        S r  )r  r   r  rb   s    rC   r   zResponse.content9  s(    tZ(( 	$!###}rF   c                   t          | d          sn| j        }|sd| _        n]t          | j        pd          }d                    |                    | j                  |                                g          | _        | j        S )N_textr   rR   r   )r  r   rN  r   r6   r   rT   flush)rM   r   decoders      rC   r)  zResponse.text?  s{    tW%% 	VlG V

%t}/GHHHWWgnnT\&B&BGMMOO%TUU
zrF   c                
   t          | d          sm| j        }|t          |          sLt          | j        t
                    r| j        }n*t          | d          r|                     | j                  }|pd| _        | j        S )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.
        rL   Nr  rR   )r  charset_encodingr)   rI   r-  rO   r  rL   )rM   r6   s     rC   r6   zResponse.encodingJ  s     t[)) 	1,H'8'B'Bd3S99 D#4HHT:.. D#44T]CCH%0DN~rF   c                R    t          | d          rt          d          || _        dS )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.
        rN  z?Setting encoding after `text` has been accessed is not allowed.N)r  r   rL   rZ   s     rC   r6   zResponse.encoding`  s8     4!! 	Q   rF   c                \    | j                             d          }|dS t          |          S )zO
        Return the encoding, as specified by the Content-Type header.
        zContent-TypeN)r4   r|   r-   )rM   r   s     rC   rR  zResponse.charset_encodingn  s2    
 |''774),777rF   r   c                   t          | d          sg }| j                            dd          }|D ]c}|                                                                }	 t
          |         }|                     |                       T# t          $ r Y `w xY wt          |          dk    r|d         | _	        n<t          |          dk    rt          |          | _	        nt                      | _	        | j	        S )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)r}   r   r   )children)r  r4   r   r   r=   r   r   r{   r   rV  r   r   )rM   decodersrm   rW   decoder_clss        rC   _get_content_decoderzResponse._get_content_decodery  s   
 tZ(( 	2-/H\**+=D*QQF  ++--"4U";KOOKKMM2222   H 8}}!! (X"" ,h ? ? ? / 1 1}s   *B
BBr~   c                4    t          j        | j                  S )zU
        A property which is `True` for 1xx status codes, `False` otherwise.
        )r   is_informationalr.  rb   s    rC   r\  zResponse.is_informational  s    
 %d&6777rF   c                4    t          j        | j                  S )zU
        A property which is `True` for 2xx status codes, `False` otherwise.
        )r   
is_successr.  rb   s    rC   r^  zResponse.is_success  s    
  0111rF   c                4    t          j        | j                  S )a  
        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.  rb   s    rC   r`  zResponse.is_redirect  s      !1222rF   c                4    t          j        | j                  S )zU
        A property which is `True` for 4xx status codes, `False` otherwise.
        )r   is_client_errorr.  rb   s    rC   rb  zResponse.is_client_error      
 $T%5666rF   c                4    t          j        | j                  S )zU
        A property which is `True` for 5xx status codes, `False` otherwise.
        )r   is_server_errorr.  rb   s    rC   re  zResponse.is_server_error  rc  rF   c                4    t          j        | j                  S )z]
        A property which is `True` for 4xx and 5xx status codes, `False` otherwise.
        )r   is_errorr.  rb   s    rC   rg  zResponse.is_error  s    
 ~d.///rF   c                    | j         t          j        t          j        t          j        t          j        t          j        fv od| j        v S )zs
        Returns True for 3xx responses with a properly formed URL redirection,
        `False` otherwise.
        Location)r.  r   MOVED_PERMANENTLYFOUND	SEE_OTHERTEMPORARY_REDIRECTPERMANENT_REDIRECTr4   rb   s    rC   has_redirect_locationzResponse.has_redirect_location  sH      '(( + dl*	
rF   c                    | j         }|t          d          | j        r| S | j        rd}nd}| j        dz  }dddd	d
}|                    |d          }|                    | |          }t          |||           )z>
        Raise the `HTTPStatusError` if one occurred.
        NzYCannot 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)r5  r>  r^  ro  r.  r|   formatr   )rM   r+  messagestatus_classerror_typesru  s         rC   raise_for_statuszResponse.raise_for_status  s     -?>  
 ? 	K% 
	w Gw 
 '3.'"	
 
 !__\3HII
..*.==gwFFFFrF   kwargsc                0    t          j        | j        fi |S rY   )jsonlibloadsr   )rM   r|  s     rC   r   zResponse.json  s    }T\44V444rF   r/   c                    t          | d          s-t                      | _        | j                            |            | j        S )N_cookies)r  r/   r  extract_cookiesrb   s    rC   r   zResponse.cookies   s=    tZ(( 	0#IIDMM))$///}rF    dict[str | None, dict[str, str]]c                p    | j                             d          }|i S d t          |          D             S )zI
        Returns the parsed header links of the response, if any
        linkNc                d    i | ]-}|                     d           p|                     d          |.S )relr   )r|   )r@   r  s     rC   rh   z"Response.links.<locals>.<dictcomp>  sC     
 
 
 XXe__/$
 
 
rF   )r4   r|   r.   )rM   headers     rC   linkszResponse.links  sL    
 !!&))>I
 
*622
 
 
 	
rF   c                    | j         S rY   )r9  rb   s    rC   num_bytes_downloadedzResponse.num_bytes_downloaded  s    ))rF   c                (    d| j          d| j         dS )Nz<Response [ ]>)r.  rI  rb   s    rC   r   zResponse.__repr__  s!    FT-FF0BFFFFrF   r  c                H    d | j                                         D             S )Nc                "    i | ]\  }}|d v	||S ))r   r   r7  rV  r^   r  s      rC   rh   z)Response.__getstate__.<locals>.<dictcomp>  s4     
 
 
eLLL %LLLrF   r  rb   s    rC   r  zResponse.__getstate__  r  rF   r  c                    |                                 D ]\  }}t          | ||           d| _        i | _        t	                      | _        d S )NT)rK   r!  r7  r   r	   r   r"  s       rC   r#  zResponse.__setstate__#  sQ     ;;== 	' 	'KD%D$&&&&&((rF   c                    t          | d          s,d                    |                                           | _        | j        S )7
        Read and return the response content.
        r  rF   )r  r   
iter_bytesr  rb   s    rC   r   zResponse.read*  s;     tZ(( 	8HHT__%6%677DM}rF   
chunk_size
int | Nonetyping.Iterator[bytes]c              #    K   t          | d          rb|t          | j                  n|}t          dt          | j                  t	          |d                    D ]}| j        |||z            V  dS |                                 }t          |          }t          | j                  5  | 	                                D ]3}|
                    |          }|
                    |          D ]}|V  4|                                }|
                    |          D ]}|V  |                                D ]}|V  	 ddd           dS # 1 swxY w Y   dS z
        A byte-iterator over the decoded response content.
        This allows us to handle gzip, deflate, brotli, and zstd encoded responses.
        r  Nr   r   r  r+  )r  r   r  rangemaxrZ  r   r   r5  iter_rawrT   rO  rM   r  irP  chunker	raw_bytesdecodedchunks           rC   r  zResponse.iter_bytes2  s     
 4$$ 	 /9/AT]+++zJ1c$-00#j!2D2DEE 8 8mAJ$6777778 8 //11G!Z888G 777 	  	 !% $ $I%nnY77G!(!8!8 $ $#$!--//$^^G44    EKKKK$]]__    EKKKK 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   .BEEEtyping.Iterator[str]c              #    K   t          | j        pd          }t          |          }t          | j                  5  |                                 D ]3}|                    |          }|                    |          D ]}|V  4|                                }|                    |          D ]}|V  |                                D ]}|V  	 ddd           dS # 1 swxY w Y   dS z
        A str-iterator over the decoded response content
        that handles both gzip, deflate, etc but also detects the content's
        string encoding.
        rR   r   r  r  N)r   r6   r   r   r5  r  rT   rO  rM   r  rP  r  byte_contenttext_contentr  s          rC   	iter_textzResponse.iter_textI  sU      t}'?@@@444T]333 		 		 $ 1 1    &~~l;;$^^L99    EKKKK "==??L 55     		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   BC!!C%(C%c              #     K   t                      }t          | j                  5  |                                 D ]}|                    |          D ]}|V  |                                D ]}|V  	 d d d            d S # 1 swxY w Y   d S Nr  )r   r   r5  r  rT   rO  rM   rP  r)  lines       rC   
iter_lineszResponse.iter_lines\  s      --T]333 	 	((  #NN400  DJJJJ  



		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABB
Bc              #  ,  K   | j         rt                      | j        rt                      t	          | j        t                    st          d          d| _         d| _        t          |          }t          | j                  5  | j        D ];}| xj        t          |          z  c_        |                    |          D ]}|V  <	 ddd           n# 1 swxY w Y   |                                D ]}|V  |                                  dS )@
        A byte-iterator over the raw response content.
        z5Attempted to call a sync iterator on an async stream.Tr   r  r  N)r8  r   r7  r   rI   r   r'   r>  r9  r   r   r5  r   rT   rO  closerM   r  r  raw_stream_bytesr  s        rC   r  zResponse.iter_rawe  st      " 	# """> 	!.. $+~66 	XVWWW"&%&"444T]333 	  	 $(K     **c2B.C.CC**$^^,<==    EKKKK  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ]]__ 	 	EKKKK

s   	ACC!Cc                   t          | j        t                    st          d          | j        sPd| _        t          | j                  5  | j                                         ddd           dS # 1 swxY w Y   dS dS )
        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)rI   r   r'   r>  r7  r   r5  r  rb   s    rC   r  zResponse.close  s    
 $+~66 	VTUUU~ 	$!DN 777 $ $!!###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$s   A44A8;A8c                   K   t          | d          s<d                    d |                                 2              d{V           | _        | j        S )r  r  rF   c                "   K   g | 3 d {V }|
6 S rY   r^   r  s     rC   rD   z"Response.aread.<locals>.<listcomp>  s.      %P%P%P%P%P%P%P%PTd%P%P%P%Pr  N)r  r   aiter_bytesr  rb   s    rC   r  zResponse.aread  sc       tZ(( 	RHH%P%PT=M=M=O=O%P%P%P%P%P%P%P%P%PQQDM}rF   typing.AsyncIterator[bytes]c                 K   t          | d          rc|t          | j                  n|}t          dt          | j                  t	          |d                    D ]}| j        |||z            W V  dS |                                 }t          |          }t          | j                  5  | 	                                2 3 d{V }|
                    |          }|
                    |          D ]}|W V  :6 |                                }|
                    |          D ]}|W V  |                                D ]}|W V  	 ddd           dS # 1 swxY w Y   dS r  )r  r   r  r  r  rZ  r   r   r5  	aiter_rawrT   rO  r  s           rC   r  zResponse.aiter_bytes  s      4$$ 	 /9/AT]+++zJ1c$-00#j!2D2DEE 8 8mAJ$67777778 8 //11G!Z888G 777 	  	 '+~~'7'7 $ $ $ $ $ $ $)%nnY77G!(!8!8 $ $#$ (8 "--//$^^G44    EKKKKK$]]__    EKKKKK 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   /EC>
BEE!Etyping.AsyncIterator[str]c                 K   t          | j        pd          }t          |          }t          | j                  5  |                                 2 3 d{V }|                    |          }|                    |          D ]}|W V  :6 |                                }|                    |          D ]}|W V  |                                D ]}|W V  	 ddd           dS # 1 swxY w Y   dS r  )r   r6   r   r   r5  r  rT   rO  r  s          rC   
aiter_textzResponse.aiter_text  s}      t}'?@@@444T]333 		 		&*&6&6&8&8              l&~~l;;$^^L99    EKKKKK  '9 #==??L 55     		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   C*BBC**C.1C.c               0  K   t                      }t          | j                  5  |                                 2 3 d {V }|                    |          D ]}|W V  %6 |                                D ]}|W V  	 d d d            d S # 1 swxY w Y   d S r  )r   r   r5  r  rT   rO  r  s       rC   aiter_lineszResponse.aiter_lines  s     --T]333 	 	"oo//       d#NN400  DJJJJJ 0    




		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BA <BBBc               H  K   | j         rt                      | j        rt                      t	          | j        t                    st          d          d| _         d| _        t          |          }t          | j                  5  | j        2 3 d{V }| xj        t          |          z  c_        |                    |          D ]}|W V  B6 	 ddd           n# 1 swxY w Y   |                                D ]}|W V  |                                  d{V  dS )r  z6Attempted to call an async iterator on an sync stream.Tr   r  r  N)r8  r   r7  r   rI   r   r   r>  r9  r   r   r5  r   rT   rO  acloser  s        rC   r  zResponse.aiter_raw  s      " 	# """> 	!.. $+77 	YWXXX"&%&"444T]333 	  	 *.+              &**c2B.C.CC**$^^,<==    EKKKKK  +6+	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ]]__ 	 	EKKKKKkkmms   	C!C=C!!C%(C%c                  K   t          | j        t                    st          d          | j        sVd| _        t          | j                  5  | j                                         d{V  ddd           dS # 1 swxY w Y   dS dS )r  z3Attempted to call an async close on an sync stream.Tr  N)rI   r   r   r>  r7  r   r5  r  rb   s    rC   r  zResponse.aclose  s      
 $+77 	VTUUU~ 	+!DN 777 + +k((*********+ + + + + + + + + + + + + + + + + +	+ 	+s    A<<B B )r.  r   r4   r5   r   r/  r)  r7   r*  r7   r   ry   r   r   r+  r0  r   r1  r,  r2  r-  r3  r8   r9   r$  )r8   r;  )r?  r;  r8   r9   )r8   r1   )rW   r1   r8   r9   r   )r8   r(   r%  )r8   r7   r   )r8   r   r8   r~   )r8   r2   )r|  ry   r8   ry   )r8   r/   )r8   r  r   r&  r'  rY   )r  r  r8   r  )r  r  r8   r  r8   r  )r8   r9   )r  r  r8   r  )r  r  r8   r  )r8   r  ),r   r   r   rN   r   r   r?  r   r+  rD  rI  r   r   r)  r6   rR  rZ  r\  r^  r`  rb  re  rg  ro  r{  r   r   r  r  r   r  r#  r   r  r  r  r  r  r  r  r  r  r  r  r^   rF   rC   r2   r2     s       
 '+*.:>"&04)-@G5' 5' 5' 5' 5' 5'n0 0 0 0 
 
 
 X
 ^      ^     X ^   ^ A A A XA B B B XB       X     X
    X    X* _   _ 8 8 8 X8   2 8 8 8 X8 2 2 2 X2 	3 	3 	3 X	3 7 7 7 X7 7 7 7 X7 0 0 0 X0 
 
 
 X
,#G #G #G #GJ5 5 5 5    X 
 
 
 X
 * * * X*G G G G
 
 
 
) ) ) )            .    &       4$ $ $ $    (,         4 (,    *    (,    8+ + + + + +rF   r2   c                      e Zd ZdZd*d+dZd,d
Zd-dZd.d/dZ	 	 	 d0d1dZ	 	 d2d3dZ	d2d4dZ
d*d+dZd5dZd6dZd7dZd8d Zd9d"Zd:d$Zd;d%Z G d& d'ej        j                  Z G d( d)          ZdS )<r/   z-
    HTTP Cookies, as a mutable mapping.
    Nr   r   r8   r9   c                &   |t          |t                    r\t                      | _        t          |t                    r0|                                D ]\  }}|                     ||           d S d S t          |t                    r3t                      | _        |D ]\  }}|                     ||           d S t          |t                    r9t                      | _        |j        D ]}| j                            |           d S || _        d S rY   )	rI   r   r   jarrK   setrJ   r/   
set_cookie)rM   r   rV   rW   cookies        rC   rN   zCookies.__init__  s'   ?j$77? {{DH'4(( )")--// ) )JCHHS%(((() )) )&& 		 {{DH% % %
Ue$$$$% %)) 	 {{DH!+ , ,##F++++, , DHHHrF   rv  r2   c                    |                      |          }|                     |j                  }| j                            ||           dS )zO
        Loads any cookies based on the response `Set-Cookie` headers.
        N)_CookieCompatResponse_CookieCompatRequestr+  r  r  )rM   rv  urllib_responseurllib_requests       rC   r  zCookies.extract_cookies  sK     44X>>2283CDD  .AAAAArF   r+  r1   c                d    |                      |          }| j                            |           dS )zM
        Sets an appropriate 'Cookie:' HTTP header on the `Request`.
        N)r  r  add_cookie_header)rM   r+  r  s      rC   r   zCookies.set_cookie_header  s3     227;;"">22222rF   r   /r  rO   rW   domainpathc                   i ddd|d|ddddd	|d
t          |          d|                    d          d|dt          |          dddddddddddddidd}t          di |}| j                            |           dS )zU
        Set a cookie value by name. May optionally include domain and path.
        versionr   r  rW   portNport_specifiedFr  domain_specifieddomain_initial_dot.r  path_specifiedsecureexpiresdiscardTcommentcomment_urlrestHttpOnlyrfc2109r^   )r~   
startswithr   r  r  )rM   r  rW   r  r  r|  r  s          rC   r  zCookies.set  s!   
q
D
 U
 D	

 e
 f
 V
 !&"3"3C"8"8
 D
 d4jj
 e
 t
 t
 t
 4
  Z&!
" u#
& !!&!!F#####rF   rx   r7   c                    d}| j         D ]D}|j        |k    r7||j        |k    r*||j        |k    r|d| }t	          |          |j        }E||S |S )z
        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   rW   )rM   r  rx   r  r  rW   r  rx  s           rC   r|   zCookies.get5  s     h 	- 	-F{d"">V]f%<%<|v{d':': ,&P$&P&PG"0"9"99 &=NrF   c                    | j                                       S fd| j         D             }|D ]-}| j                             |j        |j        |j                   .dS )z
        Delete a cookie by name. May optionally include domain and path
        in order to specify exactly which cookie to delete.
        Nc                ^    g | ])}|j         k    r|j        k    r|j        k    '|*S rY   )r  r  r  )r@   r  r  r  r  s     rC   rD   z"Cookies.delete.<locals>.<listcomp>[  sT     
 
 
{d""6=F#:#:!4!4	  "5!4!4rF   )r  clearr  r  r  )rM   r  r  r  remover  s    ```  rC   deletezCookies.deleteN  s     $"28>>&$555
 
 
 
 
 
(
 
 
  	D 	DFHNN6=&+v{CCCC	D 	DrF   c                    g }||                     |           ||J |                     |            | j        j        |  dS )z
        Delete all cookies. Optionally include a domain and path in
        order to only delete a subset of all the cookies.
        N)r   r  r  )rM   r  r  argss       rC   r  zCookies.clearf  s\    
 KK%%%KKrF   c                l    t          |          }|j        D ]}| j                            |           d S rY   )r/   r  r  )rM   r   r  s      rC   r   zCookies.updates  sC    '""k 	( 	(FH''''	( 	(rF   c                .    |                      ||          S rY   )r  rM   r  rW   s      rC   r   zCookies.__setitem__x  s    xxe$$$rF   c                R    |                      |          }|t          |          |S rY   )r|   r{   r  s      rC   r   zCookies.__getitem__{  s'    =4.. rF   c                ,    |                      |          S rY   )r  )rM   r  s     rC   r   zCookies.__delitem__  s    {{4   rF   r   c                *    t          | j                  S rY   )r   r  rb   s    rC   r   zCookies.__len__  s    48}}rF   r  c                $    d | j         D             S )Nc              3  $   K   | ]}|j         V  d S rY   )r  r@   r  s     rC   	<genexpr>z#Cookies.__iter__.<locals>.<genexpr>  s$      33333333rF   r  rb   s    rC   r   zCookies.__iter__  s    33$(3333rF   r~   c                    | j         D ]} dS dS )NTFr  )rM   r`   s     rC   __bool__zCookies.__bool__  s     	 	A44urF   c                V    d                     d | j        D                       }d| dS )Nrl   c           	     D    g | ]}d |j          d|j         d|j         dS )z<Cookie =z for z />)r  rW   r  r  s     rC   rD   z$Cookies.__repr__.<locals>.<listcomp>  sJ        O6;NNNNFMNNN  rF   z	<Cookies[r  )r   r  )rM   cookies_reprs     rC   r   zCookies.__repr__  sF    yy "h  
 
 ,<++++rF   c                  0     e Zd ZdZd fdZd fd
Z xZS )Cookies._CookieCompatRequest
        Wraps a `Request` instance up in a compatibility interface suitable
        for use with `CookieJar` operations.
        r+  r1   r8   r9   c                    t                                          t          |j                  t	          |j                  |j                   || _        d S )N)r   r4   r   )superrN   rO   r   r   r4   r   r+  )rM   r+  r   s     rC   rN   z%Cookies._CookieCompatRequest.__init__  sP    GG$$W_--~    
 #DLLLrF   rV   rO   rW   c                j    t                                          ||           || j        j        |<   d S rY   )r  add_unredirected_headerr+  r4   )rM   rV   rW   r   s      rC   r  z4Cookies._CookieCompatRequest.add_unredirected_header  s2    GG++C777(-DL %%%rF   r+  r1   r8   r9   r   )r   r   r   r   rN   r  __classcell__)r   s   @rC   r  r    se        	 	
	# 	# 	# 	# 	# 	#	. 	. 	. 	. 	. 	. 	. 	. 	. 	.rF   r  c                  "    e Zd ZdZd
dZddZd	S )Cookies._CookieCompatResponser  rv  r2   r8   r9   c                    || _         d S rY   )rv  )rM   rv  s     rC   rN   z&Cookies._CookieCompatResponse.__init__  s    $DMMMrF   email.message.Messagec                    t           j                                        }| j        j                                        D ]
\  }}|||<   |S rY   )emailrx  Messagerv  r4   rw   )rM   inforV   rW   s       rC   r  z"Cookies._CookieCompatResponse.info  sK    =((**D"m3??AA " "
U "S		KrF   Nrv  r2   r8   r9   )r8   r  )r   r   r   r   rN   r  r^   rF   rC   r  r    sF        	 	
	% 	% 	% 	%	 	 	 	 	 	rF   r  rY   )r   r   r8   r9   r  r	  )r   r  )
r  rO   rW   rO   r  rO   r  rO   r8   r9   )NNN)
r  rO   rx   r7   r  r7   r  r7   r8   r7   r   )r  rO   r  r7   r  r7   r8   r9   )r  r7   r  r7   r8   r9   )r  rO   rW   rO   r8   r9   )r  rO   r8   rO   )r  rO   r8   r9   r   r  r  r   )r   r   r   r   rN   r  r   r  r|   r  r  r   r   r   r   r   r   r  r   urllibr+  r1   r  r  r^   rF   rC   r/   r/     s            "B B B B3 3 3 3$ $ $ $ $: #!    8 "	D D D D D0    ( ( ( ( (
% % % %   ! ! ! !   4 4 4 4   
, , , ,. . . . .v~5 . . .$         rF   r/   )E
__future__r   datetimeemail.messager  r   r~  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.   __all__MutableMappingrO   r0   r1   r2   r/   r^   rF   rC   <module>r$     s^   " " " " " "               # # # # # # , , , , , , , , S S S S S S S S S S S S	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                  A @ @ @ @ @                                                           8
7
7x: x: x: x: x:f#CH- x: x: x:vH) H) H) H) H) H) H) H)Vq+ q+ q+ q+ q+ q+ q+ q+hF F F F Ff#CH- F F F F FrF   