o
    Eh~                     @   s  d dl 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 d dlZd dlZddlmZ ddlmZmZmZ ddl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&m'Z' dd
l(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ej=rddl>m?Z? G dd dZ@G dd dZAG dd dejBeCeCf ZDG dd dej
eCeCf ZEde ZFdGdd eH D ZIG dd dZJG dd dZKG dd de
ZLdS )     N)MutableMapping)Cookie	CookieJar)	parse_qsl	urlencode   )__version__)
ByteStreamContentStreamencode)SUPPORTED_DECODERSDecoderIdentityDecoderLineDecoderMultiDecoderTextDecoder)CookieConflict	HTTPError
InvalidURLNotRedirectResponseRequestNotReadResponseClosedResponseNotReadStreamConsumed)
StatusCode)CookieTypesHeaderTypesPrimitiveDataQueryParamTypesRequestDataRequestFilesURLTypes)
ElapsedTimerflatten_queryparamsguess_json_utfis_known_encodingnormalize_header_keynormalize_header_valueobfuscate_sensitive_headersparse_header_linksstr_query_paramwarn_deprecated)AsyncDispatcherc                	   @   s  e Zd Z		d8dedededdfddZedefd	d
Z	edefddZ
edefddZedefddZedefddZedefddZedefddZedefddZedefddZedefddZejdeje ddfddZedefdd Zedejeeeef fd!d"Zedefd#d$Zedefd%d&Zedefd'd(Zd)ejdd fd*d+Zd,edd fd-d.Z defd/d0Z!d1ejdefd2d3Z"defd4d5Z#defd6d7Z$dS )9URLFNurlallow_relativeparamsreturnc                 C   s   t |trtj| | _n|j| _| jr| j | _|r@| jj	r2t
| jj	}|| t|}ntt
|}| jj|d| _|sP| jsItd| jsPtdd | _d S )N)queryzNo scheme included in URL.zNo host included in URL.)
isinstancestrrfc3986apiiri_referencer   _uri_referenceis_absolute_url	normalizer2   QueryParamsupdate	copy_withschemer   host
_full_path)selfr.   r/   r0   
url_paramsquery_string rD   H/var/www/html/env_mimamsha/lib/python3.10/site-packages/httpx/_models.py__init__>   s$   



zURL.__init__c                 C      | j jpdS N )r8   r>   rA   rD   rD   rE   r>   b      z
URL.schemec                 C   sD   | j j}ddd| jd}|d u s||kr| j jpdS | j jp!dS )N44380httpshttprI   )r8   portgetr>   r?   	authority)rA   port_strdefault_port_strrD   rD   rE   rS   f   s
   zURL.authorityc                 C   rG   rH   )r8   userinforJ   rD   rD   rE   rV   n   rK   zURL.userinfoc                 C      | j jpd}|dd S )NrI   :r   r8   rV   	partitionrA   rV   rD   rD   rE   usernamer      zURL.usernamec                 C   rW   )NrI   rX      rY   r[   rD   rD   rE   passwordw   r]   zURL.passwordc                 C   rG   rH   )r8   r?   rJ   rD   rD   rE   r?   |   rK   zURL.hostc                 C   s(   | j j}|d u rddd| j S t|S )Ni  P   rN   )r8   rQ   r>   int)rA   rQ   rD   rD   rE   rQ      s   zURL.portc                 C   rG   )N/)r8   pathrJ   rD   rD   rE   rc      rK   zURL.pathc                 C   rG   rH   )r8   r2   rJ   rD   rD   rE   r2      rK   z	URL.queryc                 C   s.   | j d ur| j S | j}| jr|d| j 7 }|S )N?)r@   rc   r2   )rA   rc   rD   rD   rE   	full_path   s   
zURL.full_pathvaluec                 C   
   || _ d S N)r@   rA   rf   rD   rD   rE   re         
c                 C   rG   rH   )r8   fragmentrJ   rD   rD   rE   rk      rK   zURL.fragmentc                 C   s&   | j d| jd| j| jdfS )Nascii)r>   r   r?   rQ   re   rJ   rD   rD   rE   raw   s
   


zURL.rawc                 C   s
   | j dkS )NrO   )r>   rJ   rD   rD   rE   is_ssl   rj   z
URL.is_sslc                 C   s   t | jo| jS )z
        Return `True` for absolute URLs such as 'http://example.com/path',
        and `False` for relative URLs such as '/path'.
        )boolr>   r?   rJ   rD   rD   rE   r9      s   
zURL.is_absolute_urlc                 C   s   | j  S rh   )r9   rJ   rD   rD   rE   is_relative_url   s   zURL.is_relative_urlkwargsc                 K   s   d|v sd|v sd|v sd|v rV| d| j}| d| jrd n| j}| d| j}| d| j}|}|d ur>|d| 7 }|rR|}|rK|d| 7 }| d| }||d< t| jjd	i |	 | jdS )
Nr\   r_   r?   rQ   rX   @rS   r/   rD   )
popr?   rp   rQ   r\   r_   r-   r8   r=   unsplit)rA   rq   r?   rQ   r\   r_   rS   userpassrD   rD   rE   r=      s*   zURL.copy_withrelative_urlc                 C   s<   | j rt|S | jjdd}t|dd}t|j| S )zK
        Return an absolute URL, using given this URL as the base.
        N)rk   Trs   )rp   r-   r8   r=   resolve_withru   )rA   rw   base_urirD   rD   rE   join   s
   zURL.joinc                 C   s   t t| S rh   )hashr4   rJ   rD   rD   rE   __hash__      zURL.__hash__otherc                 C   s   t |ttfot| t|kS rh   )r3   r-   r4   rA   r~   rD   rD   rE   __eq__   s   z
URL.__eq__c                 C   
   | j  S rh   )r8   ru   rJ   rD   rD   rE   __str__      
zURL.__str__c                 C   sF   | j j}t| }| jjrt|j| j dd	 }| d|dS )Nz	:[secure])rV   ())
	__class____name__r4   r8   rV   r5   urlparser=   r\   ru   )rA   
class_nameurl_strrD   rD   rE   __repr__   s   zURL.__repr__)FN)%r   
__module____qualname__r!   ro   r   rF   propertyr4   r>   rS   rV   r\   r_   r?   ra   rQ   rc   r2   re   settertypingOptionalrk   Tuplebytesrm   rn   r9   rp   Anyr=   rz   r|   r   r   r   rD   rD   rD   rE   r-   =   sd    
$r-   c                   @   sR   e Zd ZdZdeddfddZdejdefdd	Z	de
fd
dZdefddZdS )OriginzU
    The URL scheme and authority information, as a comparable, hashable object.
    r.   r1   Nc                 C   s6   t |ts	t|}|j| _|j| _|j| _|j| _d S rh   )r3   r-   r>   rn   r?   rQ   )rA   r.   rD   rD   rE   rF      s   
zOrigin.__init__r~   c                 C   s0   t || jo| j|jko| j|jko| j|jkS rh   )r3   r   r>   r?   rQ   r   rD   rD   rE   r     s   


zOrigin.__eq__c                 C   s   t | j| j| jfS rh   )r{   r>   r?   rQ   rJ   rD   rD   rE   r|        zOrigin.__hash__c                 C   s*   | j j}| d| jd| jd| j dS )Nz(scheme=z host=z port=r   )r   r   r>   r?   rQ   )rA   r   rD   rD   rE   r     s    zOrigin.__repr__)r   r   r   __doc__r!   rF   r   r   ro   r   ra   r|   r4   r   rD   rD   rD   rE   r      s    r   c                   @   sT  e Zd ZdZdedejddfddZdejdeje	 fd	d
Z
dejfddZdejfddZdejfddZdejeje	e	f  fddZd+dejdejdejfddZd+deddfddZdejde	fddZde	de	ddfddZdejdefddZdejej fd d!Zdefd"d#Zd$ejdefd%d&Zde	fd'd(Zde	fd)d*ZdS ),r;   z0
    URL query parameters, as a multi-dict.
    argsrq   r1   Nc                 O   s   t |dk s
J d|r|rJ d|r|d n|}t|tr$t|}nt|tr.| }nt|tr6|}nt|}dd |D | _dd |D | _	d S )	Nr^   zToo many arguments.z'Cannot mix named and unnamed arguments.r   c                 S   s    g | ]\}}t |t|fqS rD   r4   r*   .0kvrD   rD   rE   
<listcomp>/  s     z(QueryParams.__init__.<locals>.<listcomp>c                 S   s   i | ]\}}t |t|qS rD   r   r   rD   rD   rE   
<dictcomp>0  s    z(QueryParams.__init__.<locals>.<dictcomp>)
lenr3   r4   r   r;   multi_itemslistr#   _list_dict)rA   r   rq   rf   itemsrD   rD   rE   rF     s   




zQueryParams.__init__keyc                    s    fdd| j D S )Nc                    s   g | ]
\}}| kr|qS rD   rD   r   item_key
item_valuer   rD   rE   r   3      z'QueryParams.getlist.<locals>.<listcomp>r   rA   r   rD   r   rE   getlist2  r   zQueryParams.getlistc                 C   r   rh   )r   keysrJ   rD   rD   rE   r   5  r   zQueryParams.keysc                 C   r   rh   )r   valuesrJ   rD   rD   rE   r   8  r   zQueryParams.valuesc                 C   r   rh   )r   r   rJ   rD   rD   rE   r   ;  r   zQueryParams.itemsc                 C   
   t | jS rh   )r   r   rJ   rD   rD   rE   r   >  r   zQueryParams.multi_itemsdefaultc                 C   s   || j v r
| j | S |S rh   r   rA   r   r   rD   rD   rE   rR   A  s   

zQueryParams.getr0   c                    s`   |sd S t |}|D ]# | ^}}||  < |r-| j fdd|D  |  | j < q
d S )Nc                 3   s    | ]} |fV  qd S rh   rD   )r   eparamrD   rE   	<genexpr>O  s    z%QueryParams.update.<locals>.<genexpr>)r;   r   r   extendr   )rA   r0   itemextrasrD   r   rE   r<   F  s   zQueryParams.updatec                 C   s
   | j | S rh   r   r   rD   rD   rE   __getitem__S  r   zQueryParams.__getitem__rf   c                 C   s   || j |< g }t| jD ]\}\}}||kr|| qt|dd  D ]}| j|= q$|r:|d }||f| j|< d S | j||f d S )Nr   r   )r   	enumerater   appendreversed)rA   r   rf   found_indexesidxr   _rD   rD   rE   __setitem__V  s   


zQueryParams.__setitem__c                 C   s
   || j v S rh   r   r   rD   rD   rE   __contains__g  r   zQueryParams.__contains__c                 C      t |  S rh   iterr   rJ   rD   rD   rE   __iter__j  r}   zQueryParams.__iter__c                 C   r   rh   )r   r   rJ   rD   rD   rE   __len__m  r   zQueryParams.__len__r~   c                 C   s$   t || jsdS t| jt|jkS NF)r3   r   sortedr   r   rD   rD   rE   r   p  s   zQueryParams.__eq__c                 C   r   rh   )r   r   rJ   rD   rD   rE   r   u  r   zQueryParams.__str__c                 C   s    | j j}t| }| d|dS )Nr   r   )r   r   r4   )rA   r   rC   rD   rD   rE   r   x  s   zQueryParams.__repr__rh   ) r   r   r   r   r   r   r   rF   Listr4   r   KeysViewr   
ValuesViewr   	ItemsViewr   r   r   rR   r<   r   r   ro   r   Iteratorr   ra   r   r   r   r   rD   rD   rD   rE   r;     s$    r;   c                   @   s  e Zd ZdZd1dededdfddZedefdd	Zej	d
eddfdd	Zede
je
jeef  fddZde
je fddZde
je fddZde
je
jeef  fddZd2dede
jde
jfddZd3dedede
je fddZd2deddfddZd4ddZdedefd d!Zded
eddfd"d#Zdeddfd$d%Zde
jdefd&d'Zde
je
j fd(d)Zdefd*d+Zd,e
jdefd-d.Z defd/d0Z!dS )5Headersz9
    HTTP headers, as a case-insensitive multi-dict.
    Nheadersencodingr1   c                    sj   |d u rg | _ n(t|trt|j| _ nt|tr& fdd| D | _ n
 fdd|D | _  | _d S )Nc                    $   g | ]\}}t | t| fqS rD   r&   r'   r   r   rD   rE   r         z$Headers.__init__.<locals>.<listcomp>c                    r   rD   r   r   r   rD   rE   r     r   )r   r3   r   r   rm   dictr   	_encoding)rA   r   r   rD   r   rE   rF     s   





zHeaders.__init__c              
   C   sj   | j du r2dD ]'}| jD ]\}}z|| || W q ty&   Y  nw || _  | j S qd| _ | j S )zn
        Header encoding is mandated as ascii, but we allow fallbacks to utf-8
        or iso-8859-1.
        N)rl   utf-8
iso-8859-1)r   rm   decodeUnicodeDecodeError)rA   r   r   rf   rD   rD   rE   r     s   

	zHeaders.encodingrf   c                 C   rg   rh   r   ri   rD   rD   rE   r     rj   c                 C   s   | j S )zi
        Returns a list of the raw header items, as byte pairs.
        May be mutated in-place.
        r   rJ   rD   rD   rE   rm     s   zHeaders.rawc                        fdd j D S )Nc                    s   g | ]
\}}|  jqS rD   r   r   r   r   rf   rJ   rD   rE   r     r   z Headers.keys.<locals>.<listcomp>r   rJ   rD   rJ   rE   r     r   zHeaders.keysc                    r   )Nc                    s   g | ]
\}}|  jqS rD   r   r   rJ   rD   rE   r     r   z"Headers.values.<locals>.<listcomp>r   rJ   rD   rJ   rE   r     r   zHeaders.valuesc                    r   )Nc                    s(   g | ]\}}|  j|  jfqS rD   r   r   rJ   rD   rE   r     s    z!Headers.items.<locals>.<listcomp>r   rJ   rD   rJ   rE   r     s   
zHeaders.itemsr   r   c                 C   s"   z| | W S  t y   | Y S w rh   )KeyErrorr   rD   rD   rE   rR     s
   
zHeaders.getFsplit_commasc                    sZ   |  j  fddjD }|s|S g }|D ]}|dd |dD  q|S )z0
        Return multiple header values.
        c                    s$   g | ]\}}| kr| jqS rD   r   r   get_header_keyrA   rD   rE   r     s
    
z#Headers.getlist.<locals>.<listcomp>c                 S   s   g | ]}|  qS rD   )strip)r   r   rD   rD   rE   r     s    ,)lowerr   r   r   r   split)rA   r   r   r   split_valuesrf   rD   r   rE   r     s   zHeaders.getlistc                 C   s"   t |}|D ]}|| | |< qd S rh   )r   )rA   r   headerrD   rD   rE   r<     s   zHeaders.updatec                 C   s   t |  | jdS )Nr   )r   r   r   rJ   rD   rD   rE   copy  s   zHeaders.copyc                 C   sT   |  | j}g }| jD ]\}}||kr||| j q|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
        , )r   r   r   r   r   r   rz   r   )rA   r   normalized_keyr   
header_keyheader_valuerD   rD   rE   r     s   
zHeaders.__getitem__c           	      C   s   |  | jpd}|| jpd}g }t| jD ]\}\}}||kr(|| qt|dd D ]}| j|= q1|rG|d }||f| j|< dS | j||f dS )zs
        Set the header `key` to `value`, removing any duplicate entries.
        Retains insertion order.
        r   r   Nr   )r   r   r   r   r   r   r   )	rA   r   rf   set_key	set_valuer   r   r   r   rD   rD   rE   r     s   

zHeaders.__setitem__c                 C   sd   |  | j}g }t| jD ]\}\}}||kr|| q|s%t|t|D ]}| j|= q)dS )z*
        Remove the header `key`.
        N)r   r   r   r   r   r   r   r   )rA   r   del_keypop_indexesr   r   r   rD   rD   rE   __delitem__  s   

zHeaders.__delitem__c                 C   s2   |  | j}| jD ]\}}||kr dS qdS NTF)r   r   r   r   )rA   r   r   r   r   rD   rD   rE   r      s   zHeaders.__contains__c                 C   r   rh   r   rJ   rD   rD   rE   r   '  r}   zHeaders.__iter__c                 C   r   rh   )r   r   rJ   rD   rD   rE   r   *  r   zHeaders.__len__r~   c                 C   s"   t |tsdS t| jt|jkS r   )r3   r   r   r   r   rD   rD   rE   r   -  s   
zHeaders.__eq__c                 C   sv   | j j}d}| jdkrd| j}tt|  }t|}t|t|k}|r1| d|| dS | d|| dS )NrI   rl   z, encoding=r   r   )r   r   r   r   r(   r   r   r   )rA   r   encoding_stras_listas_dictno_duplicate_keysrD   rD   rE   r   2  s   
zHeaders.__repr__NNrh   )F)r1   r   )"r   r   r   r   r   r4   rF   r   r   r   r   r   r   r   rm   r   r   r   r   rR   ro   r   r<   r   r   r   r   r   r   r   ra   r   r   r   rD   rD   rD   rE   r   ~  s0     
r   zpython-httpx/r   c                 C   s   g | ]}|d kr|qS )identityrD   )r   r   rD   rD   rE   r   D  s    r   c                   @   s   e Zd Zdddddddddedejeef dedede	de
d	ed
ejdefddZdddZedefddZdefddZdefddZdefddZdS )RequestN)r0   r   cookiesdatafilesjsonstreammethodr.   r0   r   r   r   r   r  r  c          
      C   sf   |  | _t||d| _t|| _|rt||  |	d ur"|	| _nt	|||| _t
 | _|   d S )N)r0   )upperr  r-   r.   r   r   Cookiesset_cookie_headerr  r   r"   timerprepare)
rA   r  r.   r0   r   r   r   r   r  r  rD   rD   rE   rF   I  s   

zRequest.__init__r1   c                 C   s(  | j   D ]\}}| j|| qg }d| jv }d| jv p#d| jv }d| jv }d| jv }d| jv }d| jv }	|sR| j}
|
jrG|
jd d d}
|d	|
j	
d
f |s^| jdv r^|d |sj|dt
d
f |sq|d |s||dt
 f |	s|d t|D ]
}| jjd| qd S )Nr?   zcontent-lengthztransfer-encodingz
user-agentacceptzaccept-encoding
connection)r\   r_   s   hostrl   )POSTPUTPATCH)s   content-length   0s
   user-agent)s   accepts   */*s   accept-encoding)s
   connections
   keep-aliver   )r  get_headersr   r   
setdefaultr.   rV   r=   r   rS   r   r  
USER_AGENTACCEPT_ENCODINGr   rm   insert)rA   r   rf   auto_headershas_hosthas_content_lengthhas_user_agent
has_accepthas_accept_encodinghas_connectionr.   r   rD   rD   rE   r  d  s8   







zRequest.preparec                 C      t | dst | jS N_content)hasattrr   r  rJ   rD   rD   rE   content     
zRequest.contentc                 C   s4   t | dsddd | jD | _t| j| _| jS )6
        Read and return the request content.
        r      c                 S      g | ]}|qS rD   rD   r   partrD   rD   rE   r         z Request.read.<locals>.<listcomp>r  rz   r  r  r	   rJ   rD   rD   rE   read  s   
zRequest.readc                    s<   t | dsddd | j2 I dH | _t| j| _| jS )r!  r  r"  c                       g | z3 d H W }|q6 S rh   rD   r$  rD   rD   rE   r         z!Request.aread.<locals>.<listcomp>Nr'  rJ   rD   rD   rE   aread  s
   
zRequest.areadc                 C   s,   | j j}t| j}d| d| jd|dS )N<r   r   z)>)r   r   r4   r.   r  )rA   r   r.   rD   rD   rE   r     s   
zRequest.__repr__r1   N)r   r   r   r4   r   Unionr-   r   r   r   r   r    r   r
   rF   r  r   r   r  r(  r+  r   rD   rD   rD   rE   r   H  sB    	


"r   c                   @   s  e Zd Zdddddddedededededed	e	j
d  fd
dZedejfddZedefddZede	je fddZedefddZedefddZedefddZejdeddfddZede	je fddZede	je fddZedefdd Zedefd!d"Zedefd#d$ZdOd%d&Zd'e	j de	j fd(d)Z!edPd+d,Z"ede	j#e	je e	j#eef f fd-d.Z$defd/d0Z%ed1d2 Z&ed3d4 Z'defd5d6Z(de	j)e fd7d8Z*de	j)e fd9d:Z+de	j)e fd;d<Z,de	j)e fd=d>Z-dOd?d@Z.defdAdBZ/de	j0e fdCdDZ1de	j0e fdEdFZ2de	j0e fdGdHZ3de	j0e fdIdJZ4dQdKdLZ5dOdMdNZ6dS )RResponseN)http_versionr   r  r  historystatus_coderequestr0  r   r  r  r1  c                C   sr   || _ || _t|| _|| _d | _|d u rg nt|| _d| _d| _	|d ur+|| _
d S t|p/dd| _
|   d S )NFr"  )body)r2  r0  r   r   r3  	call_nextr   r1  	is_closedis_stream_consumed_raw_streamr	   r(  )rA   r2  r3  r0  r   r  r  r1  rD   rD   rE   rF     s   

zResponse.__init__r1   c                 C   s   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  RuntimeErrorr9  rJ   rD   rD   rE   elapsed  s
   
zResponse.elapsedc                 C      t | jS rh   )r   get_reason_phraser2  rJ   rD   rD   rE   reason_phrase  rK   zResponse.reason_phrasec                 C   s   | j jS )zA
        Returns the URL for which the request was made.
        )r3  r.   rJ   rD   rD   rE   r.     s   zResponse.urlc                 C   r  r  )r  r   r  rJ   rD   rD   rE   r    r   zResponse.contentc                 C   s<   t | ds| j}|sd| _| jS | j}|j|dd| _| jS )N_textrI   replace)errors)r  r  r?  r   r   )rA   r  r   rD   rD   rE   text  s   
zResponse.textc                 C   sF   t | ds | j}|d u st|s| j}|d u st|sd}|| _| jS )Nr   r   )r  charset_encodingr%   apparent_encodingr   )rA   r   rD   rD   rE   r     s   
zResponse.encodingrf   c                 C   rg   rh   r   ri   rD   rD   rE   r     rj   c                 C   s\   | j d}|du rdS t|}|d |d }}d|v r%|d dS |dr,dS dS )	zO
        Return the encoding, as specified by the Content-Type header.
        zContent-TypeNr   charsetz'"ztext/r   )r   rR   cgiparse_headerr   
startswith)rA   content_typeparsed
media_typer0   rD   rD   rE   rC    s   

zResponse.charset_encodingc                 C   s   t | jd S )zF
        Return the encoding, as it appears to autodetection.
        r   )chardetdetectr  rJ   rD   rD   rE   rD    s   zResponse.apparent_encodingc              	   C   s   t | dsOg }| jjddd}|D ]}|  }zt| }||  W q ty.   Y qw t|dkr=|d | _	| j	S t|dkrKt
|| _	| j	S 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   )r  r   r   r   r   r   r   r   r   rO  r   r   )rA   decodersr   rf   decoder_clsrD   rD   rE   decoder  s&   


zResponse.decoderc                 C   r<  rh   )r   is_errorr2  rJ   rD   rD   rE   rS  6  rK   zResponse.is_errorc                 C   s   t | jo
d| jv S )Nlocation)r   is_redirectr2  r   rJ   rD   rD   rE   rU  :  s   zResponse.is_redirectc                 C   sT   d}t | jr|j| dd}t|| dt | jr(|j| dd}t|| ddS )z8
        Raise the `HttpError` if one occurred.
        z{0.status_code} {error_type}: {0.reason_phrase} for url: {0.url}
For more information check: https://httpstatuses.com/{0.status_code}zClient Error)
error_typeresponsezServer ErrorN)r   is_client_errorr2  formatr   is_server_error)rA   messagerD   rD   rE   raise_for_status>  s   zResponse.raise_for_statusrq   c                 K   st   | j d u r0| jr0t| jdkr0t| j}|d ur0ztj| j|fi |W S  ty/   Y nw tj| jfi |S )N   )	rC  r  r   r$   jsonlibloadsr   r   rB  )rA   rq   r   rD   rD   rE   r  N  s   
zResponse.jsonr  c                 C   s$   t | dst | _| j|  | jS )N_cookies)r  r  ra  extract_cookiesrJ   rD   rD   rE   r   X  s   
zResponse.cookiesc                 C   sF   | j d}i }|r!t|}|D ]}|dp|d}|||< q|S )zI
        Returns the parsed header links of the response, if any
        linkrelr.   )r   rR   r)   )rA   r   ldictlinksrc  r   rD   rD   rE   rf  _  s   
zResponse.linksc                 C   s   d| j  d| j dS )Nz<Response [ z]>)r2  r>  rJ   rD   rD   rE   r   m  s   zResponse.__repr__c                 C      t d | jS )NzNResponse.stream() is due to be deprecated. Use Response.aiter_bytes() instead.)r+   aiter_bytesrJ   rD   rD   rE   r  p     zResponse.streamc                 C   rh  )NzIResponse.raw() is due to be deprecated. Use Response.aiter_raw() instead.)r+   	aiter_rawrJ   rD   rD   rE   rm   x  rj  zResponse.rawc                 C   s*   t | dsddd |  D | _| jS )7
        Read and return the response content.
        r  r"  c                 S   r#  rD   rD   r$  rD   rD   rE   r     r&  z!Response.read.<locals>.<listcomp>)r  rz   
iter_bytesr  rJ   rD   rD   rE   r(    s   
zResponse.readc                 c   sD    t | dr| jV  dS |  D ]	}| j|V  q| j V  dS z
        A byte-iterator over the decoded response content.
        This allows us to handle gzip, deflate, and brotli encoded responses.
        r  N)r  r  iter_rawrR  r   flushrA   chunkrD   rD   rE   rm    s   
zResponse.iter_bytesc                 c   s6    t | jd}|  D ]}||V  q| V  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.
        r   N)r   rC  rm  r   rp  rA   rR  rr  rD   rD   rE   	iter_text  s
   zResponse.iter_textc                 c   sD    t  }|  D ]}||D ]}|V  qq| D ]}|V  qd S rh   )r   ru  r   rp  rA   rR  rB  linerD   rD   rE   
iter_lines  s   zResponse.iter_linesc                 c   s>    | j rt | jrt d| _ | jD ]}|V  q|   dS z@
        A byte-iterator over the raw response content.
        TN)r7  r   r6  r   r8  closerA   r%  rD   rD   rE   ro    s   
zResponse.iter_rawc                 C   s8   | j sd| _ | jjj| _t| dr| j  dS dS dS z
        Close the response and release the connection.
        Automatically called if the response body is read to completion.
        Tr8  N)r6  r3  r  r;  r9  r  r8  rz  rJ   rD   rD   rE   rz    s   
zResponse.closec                    s2   t | dsddd |  2 I dH | _| jS )rl  r  r"  c                    r)  rh   rD   r$  rD   rD   rE   r     r*  z"Response.aread.<locals>.<listcomp>N)r  rz   ri  r  rJ   rD   rD   rE   r+    s   
 zResponse.areadc                 C  sN   t | dr| jV  dS |  2 z3 dH W }| j|V  q6 | j V  dS rn  )r  r  rk  rR  r   rp  rq  rD   rD   rE   ri    s   
zResponse.aiter_bytesc                 C  s@   t | jd}|  2 z3 dH W }||V  q6 | V  dS rs  )r   rC  ri  r   rp  rt  rD   rD   rE   
aiter_text  s   zResponse.aiter_textc                 C  sN   t  }|  2 z3 d H W }||D ]}|V  qq6 | D ]}|V  qd S rh   )r   r}  r   rp  rv  rD   rD   rE   aiter_lines  s   zResponse.aiter_linesc                 C  sN   | j rt | jrt d| _ | j2 z	3 dH W }|V  q6 |  I dH  dS ry  )r7  r   r6  r   r8  acloser{  rD   rD   rE   rk    s   zResponse.aiter_rawc                    s*   | j st | jdusJ |  I dH S )zA
        Get the next response from a redirect response.
        N)rU  r   r5  rJ   rD   rD   rE   anext  s
   zResponse.anextc                    s@   | j sd| _ | jjj| _t| dr| j I dH  dS dS dS r|  )r6  r3  r  r;  r9  r  r8  r  rJ   rD   rD   rE   r    s   
zResponse.acloser-  )r1   r  )r1   r/  )7r   r   r   ra   r   r4   r   r
   r   r   r   rF   r   datetime	timedeltar;  r>  r   r-   r.   r  rB  r   r   rC  rD  r   rR  ro   rS  rU  r]  r   r  r   Dictrf  r   r  rm   r(  r   rm  ru  rx  ro  rz  r+  AsyncIteratorri  r}  r~  rk  r  r  rD   rD   rD   rE   r/    s    	




*



	r/  c                   @   sd  e Zd ZdZd.deddfddZdeddfdd	Zd
eddfddZ	d/de
de
de
de
ddf
ddZ	d0de
de
de
de
deje
 f
ddZd1de
de
de
ddfddZd1de
de
ddfddZd.deddfddZde
de
ddfddZde
de
fd d!Zde
ddfd"d#Zdefd$d%Zdeje
 fd&d'Zdefd(d)ZG d*d+ d+ejjZG d,d- d-ZdS )2r  z-
    HTTP Cookies, as a mutable mapping.
    Nr   r1   c                 C   s   |d u s	t |tr%t | _t |tr!| D ]\}}| || qd S d S t |tr<t | _|jD ]}| j| q1d S || _d S rh   )r3   r   r   jarr   setr  
set_cookie)rA   r   r   rf   cookierD   rD   rE   rF     s   



zCookies.__init__rX  c                 C   s(   |  |}| |j}| j|| dS )zO
        Loads any cookies based on the response `Set-Cookie` headers.
        N)_CookieCompatResponse_CookieCompatRequestr3  r  rb  )rA   rX  urlib_responseurllib_requestrD   rD   rE   rb    s   
zCookies.extract_cookiesr3  c                 C   s   |  |}| j| dS )zM
        Sets an appropriate 'Cookie:' HTTP header on the `Request`.
        N)r  r  add_cookie_header)rA   r3  r  rD   rD   rE   r  %  s   
zCookies.set_cookie_headerrI   rb   namerf   domainrc   c                 C   s   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  rf   rQ   Nport_specifiedFr  domain_specifieddomain_initial_dot.rc   path_specifiedsecureexpiresdiscardTcommentcomment_urlrestHttpOnlyrfc2109rD   )ro   rI  r   r  r  )rA   r  rf   r  rc   rq   r  rD   rD   rE   r  ,  sJ   
	
zCookies.setr   c                 C   sn   d}| j D ])}|j|kr.|du s|j|kr.|du s|j|kr.|dur+d| }t||j}q|du r5|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  rc   r   rf   )rA   r  r   r  rc   rf   r  r\  rD   rD   rE   rR   F  s   


zCookies.getc                 C   s   |dur|dur| j |||S g }| j D ]}|j|kr3|du s%|j|kr3|du s.|j|kr3|| q|D ]}| j |j|j|j q6dS )z
        Delete a cookie by name. May optionally include domain and path
        in order to specify exactly which cookie to delete.
        N)r  clearr  r  rc   r   )rA   r  r  rc   remover  rD   rD   rE   delete[  s   


zCookies.deletec                 C   sD   g }|dur| | |dur|dus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  )rA   r  rc   r   rD   rD   rE   r  m  s   

zCookies.clearc                 C   s$   t |}|jD ]}| j| qd S rh   )r  r  r  )rA   r   r  rD   rD   rE   r<   z  s   
zCookies.updatec                 C   s   |  ||S rh   )r  rA   r  rf   rD   rD   rE   r     r}   zCookies.__setitem__c                 C   s   |  |}|d u rt||S rh   )rR   r   r  rD   rD   rE   r     s   
zCookies.__getitem__c                 C   s
   |  |S rh   )r  )rA   r  rD   rD   rE   r     r   zCookies.__delitem__c                 C   r   rh   )r   r  rJ   rD   rD   rE   r     r   zCookies.__len__c                 C   s   dd | j D S )Nc                 s   s    | ]}|j V  qd S rh   )r  )r   r  rD   rD   rE   r     s    z#Cookies.__iter__.<locals>.<genexpr>r  rJ   rD   rD   rE   r     s   zCookies.__iter__c                 C   s   | j D ]} dS dS r   r  )rA   r   rD   rD   rE   __bool__  s   
zCookies.__bool__c                       sD   e Zd ZdZdeddf fddZdededdf fd	d
Z  ZS )zCookies._CookieCompatRequest
        Wraps a `Request` instance up in a compatibility interface suitable
        for use with `CookieJar` operations.
        r3  r1   Nc                    s*   t  jt|jt|j|jd || _d S )N)r.   r   r  )superrF   r4   r.   r   r   r  r3  )rA   r3  r   rD   rE   rF     s   
z%Cookies._CookieCompatRequest.__init__r   rf   c                    s   t  || || jj|< d S rh   )r  add_unredirected_headerr3  r   )rA   r   rf   r  rD   rE   r    s   z4Cookies._CookieCompatRequest.add_unredirected_header)	r   r   r   r   r   rF   r4   r  __classcell__rD   rD   r  rE   r    s    "r  c                   @   s0   e Zd ZdZdefddZdejjfddZ	dS )	zCookies._CookieCompatResponser  rX  c                 C   rg   rh   rW  )rA   rX  rD   rD   rE   rF     r   z&Cookies._CookieCompatResponse.__init__r1   c                 C   s,   t j }| jj D ]\}}|||< q|S rh   )emailr\  MessagerX  r   r   )rA   infor   rf   rD   rD   rE   r    s   

z"Cookies._CookieCompatResponse.infoN)
r   r   r   r   r/  rF   r  r\  r  r  rD   rD   rD   rE   r    s    r  rh   )rI   rb   )NNNr   )r   r   r   r   r   rF   r/  rb  r   r  r4   r  r   r   rR   r  r  r<   r   r   r   ra   r   r   r   ro   r  urllibr3  r  r  rD   rD   rD   rE   r  
  s:    	 
r  )MrG  r  email.messager  r  r_  r   urllib.requestr  collections.abcr   http.cookiejarr   r   urllib.parser   r   rM  r5   r   _content_streamsr	   r
   r   	_decodersr   r   r   r   r   r   _exceptionsr   r   r   r   r   r   r   r   _status_codesr   _typesr   r   r   r   r   r    r!   _utilsr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   TYPE_CHECKING_dispatch.baser,   r-   r   Mappingr4   r;   r   r  rz   r   r  r   r/  r  rD   rD   rD   rE   <module>   sF     (
$0	 ?d 
Eb  b