U
    CŠ]ï¢  ã                	   @   st  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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.m/Z/ ej0�rddl1m2Z2 ddl3m4Z4 ej5ej6e7e8e9e:f  Z;ej6de7f Z<ej6dej=e7e;f ej>ej?e7e;f  e7f Z@ej6dejAejBejBf ej>ej?ejBejBf  f ZCej6deejAe7e7f f ZDej6ej?ej6e7eEf ej6e7eEf f ejFdgdf df ZGej6e<dejAe<ej6e<df f f ZHej6eIe7eEejJeE f ZKej6eIe7eEejLeE f ZMejAe7ej6ejNejB ej?e7ejNejB f ej?e7ejNejB e7f f f ZOej6eEejJeE f ZPej6eEejLeE f ZQG dd„ dƒZRG dd„ dƒZSG dd„ dej=e7e7f ƒZTG dd„ dej
e7e7f ƒZUG dd„ dƒZVG dd„ deVƒZWG dd„ deVƒZXG dd „ d ƒZYG d!d"„ d"eYƒZZG d#d$„ d$eYƒZ[G d%d„ de
ƒZ\dS )&é    N)ÚMutableMapping)ÚCookieÚ	CookieJar)Ú	parse_qslÚ	urlencodeé   )Ú
USER_AGENT)ÚACCEPT_ENCODINGÚSUPPORTED_DECODERSÚDecoderÚIdentityDecoderÚMultiDecoderÚTextDecoder)ÚCookieConflictÚ	HTTPErrorÚ
InvalidURLÚNotRedirectResponseÚResponseClosedÚResponseNotReadÚStreamConsumed)Úmultipart_encode)Ú
StatusCode)Úguess_json_utfÚis_known_encodingÚnormalize_header_keyÚnormalize_header_valueÚobfuscate_sensitive_headersÚparse_header_linksÚstr_query_param)ÚBaseMiddleware)ÚAsyncDispatcherÚURLÚQueryParamsÚHeadersÚCookiesÚAsyncRequestr   r    c                   @   s˜  e Zd Zd5eeeddœdd„Zeedœdd„ƒZ	eedœd	d
„ƒZ
eedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZejeje ddœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd „ƒZeedœd!d"„ƒZed#dœd$d%„ƒZejd d&œd'd(„Zed d)œd*d+„Zedœd,d-„Zejed.œd/d0„Zedœd1d2„Z edœd3d4„Z!dS )6r!   FN)ÚurlÚallow_relativeÚparamsÚreturnc                 C   s‚   t |tƒrtj |¡ ¡ | _n|j| _| jr8| j ¡ | _|rXtt	|ƒƒ}| jj
|d�| _|sx| jsjtdƒ‚| jsxtdƒ‚d | _d S )N)ÚqueryzNo scheme included in URL.zNo host included in URL.)Ú
isinstanceÚstrÚrfc3986ZapiZiri_referenceÚencodeÚ_uri_referenceÚis_absolute_urlÚ	normalizer"   Ú	copy_withÚschemer   ÚhostÚ
_full_path)Úselfr&   r'   r(   Úquery_string© r8   úl/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_env/lib/python3.8/site-packages/httpx/models.pyÚ__init__d   s    
zURL.__init__©r)   c                 C   s   | j jp
dS ©NÚ )r/   r3   ©r6   r8   r8   r9   r3   ƒ   s    z
URL.schemec                 C   s   | j jp
dS r<   )r/   Ú	authorityr>   r8   r8   r9   r?   ‡   s    zURL.authorityc                 C   s   | j jp
d}| d¡d S )Nr=   ú:r   ©r/   ÚuserinfoÚ	partition©r6   rB   r8   r8   r9   Úusername‹   s    zURL.usernamec                 C   s   | j jp
d}| d¡d S )Nr=   r@   é   rA   rD   r8   r8   r9   Úpassword�   s    zURL.passwordc                 C   s   | j jp
dS r<   )r/   r4   r>   r8   r8   r9   r4   •   s    zURL.hostc                 C   s(   | j j}|d kr dddœ| j S t|ƒS )Ni»  éP   )ÚhttpsÚhttp)r/   Úportr3   Úint)r6   rK   r8   r8   r9   rK   ™   s    zURL.portc                 C   s   | j jp
dS )Nú/)r/   Úpathr>   r8   r8   r9   rN       s    zURL.pathc                 C   s   | j jp
dS r<   )r/   r*   r>   r8   r8   r9   r*   ¤   s    z	URL.queryc                 C   s.   | j d k	r| j S | j}| jr*|d| j 7 }|S )Nú?)r5   rN   r*   )r6   rN   r8   r8   r9   Ú	full_path¨   s    
zURL.full_path©Úvaluer)   c                 C   s
   || _ d S ©N)r5   ©r6   rR   r8   r8   r9   rP   ±   s    c                 C   s   | j jp
dS r<   )r/   Úfragmentr>   r8   r8   r9   rU   µ   s    zURL.fragmentc                 C   s
   | j dkS )NrI   )r3   r>   r8   r8   r9   Úis_ssl¹   s    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'.
        )Úboolr3   r4   r>   r8   r8   r9   r0   ½   s    
zURL.is_absolute_urlc                 C   s   | j  S rS   )r0   r>   r8   r8   r9   Úis_relative_urlÉ   s    zURL.is_relative_urlÚOriginc                 C   s   t | ƒS rS   )rY   r>   r8   r8   r9   ÚoriginÍ   s    z
URL.origin©Úkwargsr)   c                 K   s   t | jjf |Ž ¡ ƒS rS   )r!   r/   r2   Úunsplit)r6   r\   r8   r8   r9   r2   Ñ   s    zURL.copy_with)Úrelative_urlr)   c                 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)rU   T)r'   )rX   r!   r/   r2   Zresolve_withr]   )r6   r^   Zbase_urir8   r8   r9   ÚjoinÔ   s
    zURL.joinc                 C   s   t t| ƒƒS rS   )Úhashr,   r>   r8   r8   r9   Ú__hash__á   s    zURL.__hash__©Úotherr)   c                 C   s   t |ttfƒot| ƒt|ƒkS rS   )r+   r!   r,   ©r6   rc   r8   r8   r9   Ú__eq__ä   s    z
URL.__eq__c                 C   s
   | j  ¡ S rS   )r/   r]   r>   r8   r8   r9   Ú__str__ç   s    zURL.__str__c                 C   sF   | j j}t| ƒ}| jjr6t |¡j| j› d�d� 	¡ }|› d|›d�S )Nz	:[secure])rB   ú(ú))
Ú	__class__Ú__name__r,   r/   rB   r-   Úurlparser2   rE   r]   )r6   Ú
class_nameZurl_strr8   r8   r9   Ú__repr__ê   s    

ÿÿzURL.__repr__)FN)"rj   Ú
__module__Ú__qualname__ÚURLTypesrW   ÚQueryParamTypesr:   Úpropertyr,   r3   r?   rE   rG   r4   rL   rK   rN   r*   rP   ÚsetterÚtypingÚOptionalrU   rV   r0   rX   rZ   ÚAnyr2   r_   ra   re   rf   rm   r8   r8   r8   r9   r!   c   sX     üûc                   @   sN   e Zd ZdZeddœdd„Zejedœdd„Z	e
d	œd
d„Zed	œdd„ZdS )rY   zU
    The URL scheme and authority information, as a comparable, hashable object.
    N)r&   r)   c                 C   s6   t |tƒst|ƒ}|j| _|j| _|j| _|j| _d S rS   )r+   r!   r3   rV   r4   rK   )r6   r&   r8   r8   r9   r:   û   s    
zOrigin.__init__rb   c                 C   s0   t || jƒo.| j|jko.| j|jko.| j|jkS rS   )r+   ri   r3   r4   rK   rd   r8   r8   r9   re     s    
ÿ
þ
üzOrigin.__eq__r;   c                 C   s   t | j| j| jfƒS rS   )r`   r3   r4   rK   r>   r8   r8   r9   ra     s    zOrigin.__hash__c                 C   s*   | j j}|› d| j›d| j›d| j› d�S )Nz(scheme=z host=z port=rh   )ri   rj   r3   r4   rK   )r6   rl   r8   r8   r9   rm     s     ÿzOrigin.__repr__)rj   rn   ro   Ú__doc__rp   r:   rt   rv   rW   re   rL   ra   r,   rm   r8   r8   r8   r9   rY   ö   s
   rY   c                   @   s>  e Zd ZdZeejddœdd„Zejeje	 dœdd„Z
ejd	œd
d„Zejd	œdd„Zejd	œdd„Zejeje	e	f  d	œdd„Zd*ejejejdœdd„Zd+eddœdd„Zeje	dœdd„Ze	e	ddœdd„Zejedœdd„Zejej d	œdd „Zed	œd!d"„Zejed#œd$d%„Ze	d	œd&d'„Ze	d	œd(d)„ZdS ),r"   z0
    URL query parameters, as a multi-dict.
    N)Úargsr\   r)   c                 O   s˜   t |ƒdk stdƒ‚|r$|r$tdƒ‚|r0|d n|}t|tƒrHt|ƒ}n,t|tƒr\| ¡ }nt|tƒrl|}n| ¡ }dd„ |D ƒ| _	dd„ |D ƒ| _
d S )	NrF   zToo many arguments.z'Cannot mix named and unnamed arguments.r   c                 S   s    g | ]\}}t |ƒt|ƒf‘qS r8   ©r,   r   ©Ú.0ÚkÚvr8   r8   r9   Ú
<listcomp>)  s     z(QueryParams.__init__.<locals>.<listcomp>c                 S   s   i | ]\}}t |ƒt|ƒ“qS r8   ry   rz   r8   r8   r9   Ú
<dictcomp>*  s      z(QueryParams.__init__.<locals>.<dictcomp>)ÚlenÚAssertionErrorr+   r,   r   r"   Úmulti_itemsÚlistÚitemsÚ_listÚ_dict)r6   rx   r\   rR   r„   r8   r8   r9   r:     s    




zQueryParams.__init__©Úkeyr)   c                    s   ‡ fdd„| j D ƒS )Nc                    s   g | ]\}}|ˆ kr|‘qS r8   r8   ©r{   Úitem_keyZ
item_value©rˆ   r8   r9   r~   -  s      z'QueryParams.getlist.<locals>.<listcomp>©r…   ©r6   rˆ   r8   r‹   r9   Úgetlist,  s    zQueryParams.getlistr;   c                 C   s
   | j  ¡ S rS   )r†   Úkeysr>   r8   r8   r9   r�   /  s    zQueryParams.keysc                 C   s
   | j  ¡ S rS   )r†   Úvaluesr>   r8   r8   r9   r�   2  s    zQueryParams.valuesc                 C   s
   | j  ¡ S rS   )r†   r„   r>   r8   r8   r9   r„   5  s    zQueryParams.itemsc                 C   s
   t | jƒS rS   )rƒ   r…   r>   r8   r8   r9   r‚   8  s    zQueryParams.multi_items©rˆ   Údefaultr)   c                 C   s   || j kr| j | S |S rS   ©r†   ©r6   rˆ   r’   r8   r8   r9   Úget;  s    

zQueryParams.get)r(   r)   c                 C   s*   |sd S t |ƒ}|D ]}|| | |< qd S rS   )r"   )r6   r(   Úparamr8   r8   r9   Úupdate@  s
    zQueryParams.updatec                 C   s
   | j | S rS   r“   r�   r8   r8   r9   Ú__getitem__H  s    zQueryParams.__getitem__©rˆ   rR   r)   c                 C   s†   || j |< g }t| jƒD ]\}\}}||kr| |¡ qt|dd … ƒD ]}| j|= qH|rr|d }||f| j|< n| j ||f¡ d S )Nr   r   )r†   Ú	enumerater…   ÚappendÚreversed)r6   rˆ   rR   Úfound_indexesÚidxrŠ   Ú_r8   r8   r9   Ú__setitem__K  s    

zQueryParams.__setitem__c                 C   s
   || j kS rS   r“   r�   r8   r8   r9   Ú__contains__\  s    zQueryParams.__contains__c                 C   s   t |  ¡ ƒS rS   ©Úiterr�   r>   r8   r8   r9   Ú__iter___  s    zQueryParams.__iter__c                 C   s
   t | jƒS rS   )r€   r†   r>   r8   r8   r9   Ú__len__b  s    zQueryParams.__len__rb   c                 C   s$   t || jƒsdS t| jƒt|jƒkS ©NF)r+   ri   Úsortedr…   rd   r8   r8   r9   re   e  s    zQueryParams.__eq__c                 C   s
   t | jƒS rS   )r   r…   r>   r8   r8   r9   rf   j  s    zQueryParams.__str__c                 C   s    | j j}t| ƒ}|› d|›d�S )Nrg   rh   )ri   rj   r,   )r6   rl   r7   r8   r8   r9   rm   m  s    zQueryParams.__repr__)N)N) rj   rn   ro   rw   rq   rt   rv   r:   ÚListr,   rŽ   ÚKeysViewr�   Ú
ValuesViewr�   Ú	ItemsViewr„   ÚTupler‚   r•   r—   r˜   r    rW   r¡   ÚIteratorr¤   rL   r¥   re   rf   rm   r8   r8   r8   r9   r"     s"   c                   @   sŽ  e Zd ZdZd2eeddœdd„Zeedœdd„ƒZej	edd	œd
d„ƒZee
je
jeef  dœdd„ƒZe
je dœdd„Ze
je dœdd„Ze
je
jeef  dœdd„Zd3ee
je
jdœdd„Zd4eee
je dœdd„Zd5eddœdd„Zd dœdd„Zeedœd d!„Zeedd"œd#d$„Zeddœd%d&„Ze
jedœd'd(„Ze
je
j dœd)d*„Zedœd+d,„Ze
jed-œd.d/„Z edœd0d1„Z!dS )6r#   z9
    HTTP headers, as a case-insensitive multi-dict.
    N)ÚheadersÚencodingr)   c                    sj   |d krg | _ nPt|tƒr(t|jƒ| _ n8t|tƒrL‡ fdd„| ¡ D ƒ| _ n‡ fdd„|D ƒ| _ ˆ | _d S )Nc                    s$   g | ]\}}t |ˆ ƒt|ˆ ƒf‘qS r8   ©r   r   rz   ©r¯   r8   r9   r~   ~  s   ÿz$Headers.__init__.<locals>.<listcomp>c                    s$   g | ]\}}t |ˆ ƒt|ˆ ƒf‘qS r8   r°   rz   r±   r8   r9   r~   ƒ  s   ÿ)r…   r+   r#   rƒ   ÚrawÚdictr„   Ú	_encoding)r6   r®   r¯   r8   r±   r9   r:   x  s    


þ

þzHeaders.__init__r;   c              
   C   sn   | j dkrhdD ]R}| jD ]<\}}z| |¡ | |¡ W q tk
rR   Y  qY qX q|| _  qhqd| _ | j S )zn
        Header encoding is mandated as ascii, but we allow fallbacks to utf-8
        or iso-8859-1.
        N)Úasciiúutf-8ú
iso-8859-1)r´   r²   ÚdecodeÚUnicodeDecodeError)r6   r¯   rˆ   rR   r8   r8   r9   r¯   ‰  s    

zHeaders.encodingrQ   c                 C   s
   || _ d S rS   ©r´   rT   r8   r8   r9   r¯   ¢  s    c                 C   s   | j S )zi
        Returns a list of the raw header items, as byte pairs.
        May be mutated in-place.
        rŒ   r>   r8   r8   r9   r²   ¦  s    zHeaders.rawc                    s   ‡ fdd„ˆ j D ƒS )Nc                    s   g | ]\}}|  ˆ j¡‘qS r8   ©r¸   r¯   ©r{   rˆ   rR   r>   r8   r9   r~   ¯  s     z Headers.keys.<locals>.<listcomp>rŒ   r>   r8   r>   r9   r�   ®  s    zHeaders.keysc                    s   ‡ fdd„ˆ j D ƒS )Nc                    s   g | ]\}}|  ˆ j¡‘qS r8   r»   r¼   r>   r8   r9   r~   ²  s     z"Headers.values.<locals>.<listcomp>rŒ   r>   r8   r>   r9   r�   ±  s    zHeaders.valuesc                    s   ‡ fdd„ˆ j D ƒS )Nc                    s(   g | ] \}}|  ˆ j¡|  ˆ j¡f‘qS r8   r»   r¼   r>   r8   r9   r~   µ  s   ÿz!Headers.items.<locals>.<listcomp>rŒ   r>   r8   r>   r9   r„   ´  s    
þzHeaders.itemsr‘   c                 C   s(   z
| | W S  t k
r"   | Y S X d S rS   )ÚKeyErrorr”   r8   r8   r9   r•   º  s    
zHeaders.getF)rˆ   Úsplit_commasr)   c                    sZ   |  ¡  ˆj¡‰ ‡ ‡fdd„ˆjD ƒ}|s.|S g }|D ]}| dd„ | d¡D ƒ¡ q6|S )z0
        Return multiple header values.
        c                    s$   g | ]\}}|ˆ kr|  ˆj¡‘qS r8   r»   r‰   ©Úget_header_keyr6   r8   r9   r~   Æ  s   þz#Headers.getlist.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r8   )Ústrip)r{   Úitemr8   r8   r9   r~   Ñ  s     ú,)Úlowerr.   r¯   r…   ÚextendÚsplit)r6   rˆ   r¾   r�   Zsplit_valuesrR   r8   r¿   r9   rŽ   À  s    þzHeaders.getlist)r®   r)   c                 C   s"   t |ƒ}|D ]}|| | |< qd S rS   )r#   )r6   r®   Úheaderr8   r8   r9   r—   Ô  s    zHeaders.updatec                 C   s   t |  ¡ | jd�S )Nr±   )r#   r„   r¯   r>   r8   r8   r9   ÚcopyÙ  s    zHeaders.copyr‡   c                 C   sX   |  ¡  | j¡}g }| jD ]"\}}||kr| | | j¡¡ q|rLd |¡S t|ƒ‚dS )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
        ú, N)rÄ   r.   r¯   r…   r›   r¸   r_   r½   )r6   rˆ   Znormalized_keyr„   Ú
header_keyZheader_valuer8   r8   r9   r˜   Ü  s    
zHeaders.__getitem__r™   c           	      C   s˜   |  ¡  | j¡}| | j¡}g }t| jƒD ]\}\}}||kr*| |¡ q*t|dd… ƒD ]}| j|= qZ|r„|d }||f| j|< n| j ||f¡ dS )zs
        Set the header `key` to `value`, removing any duplicate entries.
        Retains insertion order.
        r   Nr   )rÄ   r.   r¯   rš   r…   r›   rœ   )	r6   rˆ   rR   Zset_keyÚ	set_valuer�   rž   rŠ   rŸ   r8   r8   r9   r    ï  s    
zHeaders.__setitem__c                 C   sd   |  ¡  | j¡}g }t| jƒD ]\}\}}||kr| |¡ q|sJt|ƒ‚t|ƒD ]}| j|= qRdS )z*
        Remove the header `key`.
        N)rÄ   r.   r¯   rš   r…   r›   r½   rœ   )r6   rˆ   Zdel_keyZpop_indexesrž   rŠ   rŸ   r8   r8   r9   Ú__delitem__  s    zHeaders.__delitem__c                 C   s2   |  ¡  | j¡}| jD ]\}}||kr dS qdS ©NTF)rÄ   r.   r¯   r…   )r6   rˆ   rÀ   rÊ   rŸ   r8   r8   r9   r¡     s
    zHeaders.__contains__c                 C   s   t |  ¡ ƒS rS   r¢   r>   r8   r8   r9   r¤     s    zHeaders.__iter__c                 C   s
   t | jƒS rS   )r€   r…   r>   r8   r8   r9   r¥     s    zHeaders.__len__rb   c                 C   s"   t |tƒsdS t| jƒt|jƒkS r¦   )r+   r#   r§   r…   rd   r8   r8   r9   re   "  s    
zHeaders.__eq__c                 C   sv   | j j}d}| jdkr"d| j›�}tt|  ¡ ƒƒ}t|ƒ}t|ƒt|ƒk}|rb|› d|›|› d�S |› d|›|› d�S )Nr=   rµ   z, encoding=rg   rh   )ri   rj   r¯   rƒ   r   r„   r³   r€   )r6   rl   Zencoding_strZas_listZas_dictZno_duplicate_keysr8   r8   r9   rm   '  s    
zHeaders.__repr__)NN)N)F)N)"rj   rn   ro   rw   ÚHeaderTypesr,   r:   rr   r¯   rs   rt   r¨   r¬   Úbytesr²   r�   r�   r„   rv   r•   rW   rŽ   r—   rÈ   r˜   r    rÌ   r¡   r­   r¤   rL   r¥   re   rm   r8   r8   r8   r9   r#   s  s.    c                   @   s†   e Zd Zddddœeejeef eee	dœdd„Z
deeejejeef dœdd„Zdd	œd
d„Zedd	œdd„ƒZed	œdd„ZdS )ÚBaseRequestN)r(   r®   Úcookies©Úmethodr&   r(   r®   rÑ   c                C   s@   |  ¡ | _t||d�| _t|ƒ| _|r<t|ƒ| _| j | ¡ d S )N)r(   )	ÚupperrÓ   r!   r&   r#   r®   r$   Ú_cookiesÚset_cookie_header)r6   rÓ   r&   r(   r®   rÑ   r8   r8   r9   r:   8  s    	


zBaseRequest.__init__)ÚdataÚfilesÚjsonr)   c                 C   sj   |d k	rt  |¡ d¡}d}nD|d k	r:t|p.i |ƒ\}}n(|d k	rZt|dd� d¡}d}nd}d}||fS )Nr¶   zapplication/jsonT)Údoseqz!application/x-www-form-urlencodedó    r=   )ÚjsonlibÚdumpsr.   r   r   )r6   r×   rØ   rÙ   ÚcontentÚcontent_typer8   r8   r9   Úencode_dataH  s    zBaseRequest.encode_datar;   c                 C   s"  t | dd ƒ}t | ddƒ}g }d| jk}d| jk}d| jk}d| jkpLd| jk}d	| jk}d
| jk}	|s~| d| jj d¡f¡ |s–| dt d¡f¡ |s¤| d¡ |sÚ|r¸| d¡ n"|rÚtt|ƒƒ ¡ }
| d|
f¡ |sð| dt	 ¡ f¡ |	sþ| d¡ t
|ƒD ]}| jj d|¡ �qd S )NrÞ   Úis_streamingFr4   z
user-agentÚacceptzcontent-lengthztransfer-encodingzaccept-encodingZ
connections   hostrµ   s
   user-agent)s   accepts   */*)s   transfer-encodings   chunkeds   content-lengths   accept-encoding)s
   connections
   keep-aliver   )Úgetattrr®   r›   r&   r?   r.   r   r,   r€   r	   rœ   r²   Úinsert)r6   rÞ   rá   Zauto_headersZhas_hostZhas_user_agentZ
has_acceptZhas_content_lengthZhas_accept_encodingZhas_connectionZcontent_lengthrÂ   r8   r8   r9   ÚprepareX  s8    


ÿ



zBaseRequest.preparer$   c                 C   s   t | dƒstƒ | _| jS ©NrÕ   )Úhasattrr$   rÕ   r>   r8   r8   r9   rÑ   {  s    
zBaseRequest.cookiesc                 C   s,   | j j}t| jƒ}d|› d| j›d|›d�S )Nú<rg   rÉ   z)>)ri   rj   r,   r&   rÓ   )r6   rl   r&   r8   r8   r9   rm   �  s    
zBaseRequest.__repr__)NNN)rj   rn   ro   r,   rt   ÚUnionr!   rq   rÎ   ÚCookieTypesr:   r³   ÚRequestFilesrv   r¬   rÏ   rà   rå   rr   rÑ   rm   r8   r8   r8   r9   rÐ   7  s.   ùù     ÿ  þ#rÐ   c                
       sn   e Zd Zdddddddœeejeef eee	e
eejdœ‡ fdd„Zedœdd„Zeje dœd	d
„Z‡  ZS )r%   N©r(   r®   rÑ   r×   rØ   rÙ   ©rÓ   r&   r(   r®   rÑ   r×   rØ   rÙ   c                   s°   t ƒ j|||||d� |d ks(t|tƒrV|  |||¡\}	}
d| _|	| _|
r¤|
| jd< nNt|tt	fƒrŠt|tƒrx| 
d¡n|}d| _|| _nt|dƒs˜t‚d| _|| _|  ¡  d S )NrÒ   FúContent-Typer¶   Ú	__aiter__T)Úsuperr:   r+   r³   rà   rá   rÞ   r®   r,   rÏ   r.   rç   r�   Úcontent_aiterrå   ©r6   rÓ   r&   r(   r®   rÑ   r×   rØ   rÙ   rÞ   rß   ©ri   r8   r9   r:   ˆ  s*        ÿzAsyncRequest.__init__r;   c                 Ã   s0   t | dƒs*d dd„ |  ¡ 2 ƒI dH ¡| _| jS )ú7
        Read and return the response content.
        rÞ   rÛ   c                 Ó   s   g | z3 d H W }|‘q6 S rS   r8   ©r{   Úpartr8   r8   r9   r~   ­  s     z%AsyncRequest.read.<locals>.<listcomp>N©rç   r_   ÚstreamrÞ   r>   r8   r8   r9   Úread¨  s    
 zAsyncRequest.readc                 C  s6   | j r$| j2 z3 d H W }|V  q6 n| jr2| jV  d S rS   )rá   rñ   rÞ   ©r6   rö   r8   r8   r9   rø   °  s
    zAsyncRequest.stream)rj   rn   ro   r,   rt   ré   r!   rq   rÎ   rê   ÚAsyncRequestDatarë   rv   r:   rÏ   rù   ÚAsyncIteratorrø   Ú__classcell__r8   r8   ró   r9   r%   ‡  s$   öö c                
       sn   e Zd Zdddddddœeejeef eee	e
eejdœ‡ fdd„Zedœdd„Zeje dœd	d
„Z‡  ZS )ÚRequestNrì   rí   c                   s°   t ƒ j|||||d� |d ks(t|tƒrV|  |||¡\}	}
d| _|	| _|
r¤|
| jd< nNt|tt	fƒrŠt|tƒrx| 
d¡n|}d| _|| _nt|dƒs˜t‚d| _|| _|  ¡  d S )NrÒ   Frî   r¶   r¤   T)rð   r:   r+   r³   rà   rá   rÞ   r®   r,   rÏ   r.   rç   r�   Úcontent_iterrå   rò   ró   r8   r9   r:   ¹  s*        ÿzRequest.__init__r;   c                 C   s*   t | dƒs$d dd„ |  ¡ D ƒ¡| _| jS )NrÞ   rÛ   c                 S   s   g | ]}|‘qS r8   r8   rõ   r8   r8   r9   r~   Ü  s     z Request.read.<locals>.<listcomp>r÷   r>   r8   r8   r9   rù   Ú  s    
zRequest.readc                 c   s,   | j r| jD ]
}|V  qn| jr(| jV  d S rS   )rá   rÿ   rÞ   rú   r8   r8   r9   rø   ß  s
    

zRequest.stream)rj   rn   ro   r,   rt   ré   r!   rq   rÎ   rê   ÚRequestDatarë   rv   r:   rÏ   rù   r­   rø   rý   r8   r8   ró   r9   rþ   ¸  s$   öö!rþ   c                   @   sv  e Zd Zddddddœeeeeeje	j
dœdd„Zeedœdd„ƒZeeje dœd	d
„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZejeddœdd„ƒZeeje dœdd„ƒZeeje dœdd„ƒZeedœdd„ƒZeedœdd„ƒZddœdd„Zejejee f dœdd„Z!ed dœd!d"„ƒZ"eej#eje ej#eef f dœd#d$„ƒZ$edœd%d&„Z%dS )'ÚBaseResponseN)Úhttp_versionr®   ÚrequestÚon_closeÚelapsed©Ústatus_coder  r®   r  r  r  c                C   sD   || _ || _t|ƒ| _|| _|| _|d kr4t d¡n|| _d | _	d S )Nr   )
r  r  r#   r®   r  r  ÚdatetimeÚ	timedeltar  Ú	call_next)r6   r  r  r®   r  r  r  r8   r8   r9   r:   è  s    

zBaseResponse.__init__r;   c                 C   s   t  | j¡S rS   )r   Zget_reason_phraser  r>   r8   r8   r9   Úreason_phraseû  s    zBaseResponse.reason_phrasec                 C   s   | j dkrdS | j jS )z�
        Returns the URL for which the request was made.

        Requires that `request` was provided when instantiating the response.
        N)r  r&   r>   r8   r8   r9   r&   ÿ  s    zBaseResponse.urlc                 C   sH   t | dƒsBt | dƒr<| j}| j |¡}|| j ¡ 7 }|| _ntƒ ‚| jS )NÚ_contentÚ_raw_content)rç   r  Údecoderr¸   Úflushr  r   )r6   Zraw_contentrÞ   r8   r8   r9   rÞ     s    

zBaseResponse.contentc                 C   s8   t | dƒs2| j}|sd| _n| j}|j|dd�| _| jS )NÚ_textr=   Úreplace)Úerrors)rç   rÞ   r  r¯   r¸   )r6   rÞ   r¯   r8   r8   r9   Útext  s    
zBaseResponse.textc                 C   sF   t | dƒs@| j}|d ks t|ƒs:| j}|d ks6t|ƒs:d}|| _| jS )Nr´   r¶   )rç   Úcharset_encodingr   Úapparent_encodingr´   )r6   r¯   r8   r8   r9   r¯     s    
zBaseResponse.encodingrQ   c                 C   s
   || _ d S rS   rº   rT   r8   r8   r9   r¯   *  s    c                 C   s\   | j  d¡}|dkrdS t |¡}|d |d  }}d|krJ|d  d¡S | d¡rXdS dS )	zO
        Return the encoding, as specified by the Content-Type header.
        rî   Nr   éÿÿÿÿÚcharsetz'"ztext/r·   )r®   r•   ÚcgiÚparse_headerrÁ   Ú
startswith)r6   rß   ÚparsedZ
media_typer(   r8   r8   r9   r  .  s    

zBaseResponse.charset_encodingc                 C   s   t  | j¡d S )zF
        Return the encoding, as it appears to autodetection.
        r¯   )ÚchardetÚdetectrÞ   r>   r8   r8   r9   r  D  s    zBaseResponse.apparent_encodingc              	   C   s¤   t | dƒsžg }| jjddd�}|D ]B}| ¡  ¡ }zt| }| |ƒ ¡ W q" tk
rb   Y q"Y q"X q"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   )rç   r®   rŽ   rÁ   rÄ   r
   r›   r½   r€   r  r   r   )r6   Údecodersr�   rR   Zdecoder_clsr8   r8   r9   r  K  s     
zBaseResponse.decoderc                 C   s   t  | j¡od| jkS )NÚlocation)r   Úis_redirectr  r®   r>   r8   r8   r9   r!  e  s    zBaseResponse.is_redirectc                 C   sT   d}t  | j¡r |j| dd�}n t  | j¡r<|j| dd�}nd}|rPt|| 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)Z
error_typezServer Errorr=   ©ÚresponseN)r   Zis_client_errorr  ÚformatZis_server_errorr   )r6   Úmessager8   r8   r9   Úraise_for_statusi  s    ÿzBaseResponse.raise_for_statusr[   c                 K   sn   | j d kr^| jr^t| jƒdkr^t| jƒ}|d k	r^ztj| j |¡f|ŽW S  tk
r\   Y nX tj| jf|ŽS )Né   )	r  rÞ   r€   r   rÜ   Úloadsr¸   r¹   r  )r6   r\   r¯   r8   r8   r9   rÙ   {  s    
zBaseResponse.jsonr$   c                 C   s2   t | dƒs,| jd k	st‚tƒ | _| j | ¡ | jS ræ   )rç   r  r�   r$   rÕ   Úextract_cookiesr>   r8   r8   r9   rÑ   …  s
    
zBaseResponse.cookiesc                 C   sF   | j  d¡}i }|rBt|ƒ}|D ] }| d¡p6| d¡}|||< q |S )zI
        Returns the parsed header links of the response, if any
        ÚlinkÚrelr&   )r®   r•   r   )r6   rÇ   ZldictÚlinksr*  rˆ   r8   r8   r9   r,  �  s    
zBaseResponse.linksc                 C   s   d| j › d| j› d�S )Nz<Response [ú z]>)r  r  r>   r8   r8   r9   rm   ›  s    zBaseResponse.__repr__)&rj   rn   ro   rL   r,   rÎ   rÐ   rt   ÚCallabler  r	  r:   rr   r  ru   r!   r&   rÏ   rÞ   r  r¯   rs   r  r  r   r  rW   r!  r&  rv   ré   r³   rƒ   rÙ   rÑ   ÚDictr,  rm   r8   r8   r8   r9   r  ç  sP   øø


*r  c                
       s²   e Zd Zddddddddœeeeeeje	ej
d ejdœ‡ fdd„Zedœdd	„Zeje dœd
d„Zeje dœdd„Zeje dœdd„Zd dœdd„Zddœdd„Z‡  ZS )ÚAsyncResponseN©r  r®   rÞ   r  r  Úhistoryr  r  ©r  r  r®   rÞ   r  r  r2  r  c          	         sn   t ƒ j||||||d� |d kr$g nt|ƒ| _|d ks@t|tƒrXd| _d| _|pRd| _nd| _d| _|| _	d S ©Nr  TrÛ   F©
rð   r:   rƒ   r2  r+   rÏ   Ú	is_closedÚis_stream_consumedr  Ú_raw_stream©	r6   r  r  r®   rÞ   r  r  r2  r  ró   r8   r9   r:      s     ú	zAsyncResponse.__init__r;   c                 Ã   s0   t | dƒs*d dd„ |  ¡ 2 ƒI dH ¡| _| jS )rô   r  rÛ   c                 Ó   s   g | z3 d H W }|‘q6 S rS   r8   rõ   r8   r8   r9   r~   Å  s     z&AsyncResponse.read.<locals>.<listcomp>N©rç   r_   rø   r  r>   r8   r8   r9   rù   À  s    
 zAsyncResponse.readc                 C  sJ   t | dƒr| jV  n2|  ¡ 2 z3 dH W }| j |¡V  q6 | 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  r²   r  r¸   r  ©r6   Úchunkr8   r8   r9   rø   È  s
    

zAsyncResponse.streamc                 C  s>   t | jd�}|  ¡ 2 z3 dH W }| |¡V  q6 | ¡ 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   r  rø   r¸   r  ©r6   r  r>  r8   r8   r9   Ústream_textÔ  s    zAsyncResponse.stream_textc                 C  s`   t | dƒr| jV  nH| jr tƒ ‚| jr,tƒ ‚d| _| j2 z3 dH W }|V  q86 |  ¡ I dH  dS ©z@
        A byte-iterator over the raw response content.
        r  TN©rç   r  r7  r   r6  r   r8  Úcloserú   r8   r8   r9   r²   ß  s    


zAsyncResponse.rawc                 Ã   s(   | j stƒ ‚| jdk	st‚|  ¡ I dH S )zA
        Get the next response from a redirect response.
        N)r!  r   r
  r�   r>   r8   r8   r9   Únextð  s    zAsyncResponse.nextc                 Ã   s(   | j s$d| _ | jdk	r$|  ¡ I dH  dS ©z‰
        Close the response and release the connection.
        Automatically called if the response body is read to completion.
        TN©r6  r  r>   r8   r8   r9   rE  ù  s    
zAsyncResponse.close)rj   rn   ro   rL   r,   rÎ   ÚAsyncResponseContentrt   r.  r%   r¨   r  r	  r:   rÏ   rù   rü   rø   rB  r²   rF  rE  rý   r8   r8   ró   r9   r0  Ÿ  s.   öö 	r0  c                
       s¤   e Zd Zddddddddœeeeeeje	ej
d ejdœ‡ fdd„Zedœdd	„Zeje dœd
d„Zeje dœdd„Zeje dœdd„Zddœdd„Z‡  ZS )ÚResponseNr1  r  r3  c          	         sn   t ƒ j||||||d� |d kr$g nt|ƒ| _|d ks@t|tƒrXd| _d| _|pRd| _nd| _d| _|| _	d S r4  r5  r9  ró   r8   r9   r:     s     ú	zResponse.__init__r;   c                 C   s*   t | dƒs$d dd„ |  ¡ D ƒ¡| _| jS )rô   r  rÛ   c                 S   s   g | ]}|‘qS r8   r8   rõ   r8   r8   r9   r~   *  s     z!Response.read.<locals>.<listcomp>r:  r>   r8   r8   r9   rù   %  s    
zResponse.readc                 c   s@   t | dƒr| jV  n(|  ¡ D ]}| j |¡V  q| j ¡ V  dS r;  r<  r=  r8   r8   r9   rø   -  s
    

zResponse.streamc                 c   s4   t | jd�}|  ¡ D ]}| |¡V  q| ¡ V  dS r?  r@  rA  r8   r8   r9   rB  9  s    zResponse.stream_textc                 c   sP   t | dƒr| jV  n8| jr tƒ ‚| jr,tƒ ‚d| _| jD ]
}|V  q8|  ¡  dS rC  rD  rú   r8   r8   r9   r²   D  s    


zResponse.rawc                 C   s"   | j sd| _ | jdk	r|  ¡  dS rG  rH  r>   r8   r8   r9   rE  U  s    
zResponse.close)rj   rn   ro   rL   r,   rÎ   ÚResponseContentrt   r.  rþ   r¨   r  r	  r:   rÏ   rù   r­   rø   rB  r²   rE  rý   r8   r8   ró   r9   rJ    s,   öö rJ  c                   @   s8  e Zd ZdZd/eddœdd„Zeddœdd„Zedd	œd
d„Z	d0e
e
e
e
ddœdd„Zd1e
e
e
e
eje
 dœdd„Zd2e
e
e
ddœdd„Zd3e
e
ddœdd„Zd4eddœdd„Ze
e
ddœdd„Ze
e
dœd d!„Ze
ddœd"d#„Zed$œd%d&„Zeje
 d$œd'd(„Zed$œd)d*„ZG d+d,„ d,ejjƒZG d-d.„ d.ƒZdS )5r$   z-
    HTTP Cookies, as a mutable mapping.
    N)rÑ   r)   c                 C   sz   |d kst |tƒrDtƒ | _t |tƒrv| ¡ D ]\}}|  ||¡ q,n2t |tƒrptƒ | _|jD ]}| j |¡ q\n|| _d S rS   )r+   r³   r   Újarr„   Úsetr$   Ú
set_cookie)r6   rÑ   rˆ   rR   Úcookier8   r8   r9   r:   e  s    


zCookies.__init__)r#  r)   c                 C   s6   |j dk	st‚|  |¡}|  |j ¡}| j ||¡ dS )zO
        Loads any cookies based on the response `Set-Cookie` headers.
        N)r  r�   Ú_CookieCompatResponseÚ_CookieCompatRequestrL  r)  )r6   r#  Zurlib_responseÚurllib_requestr8   r8   r9   r)  r  s    
zCookies.extract_cookies©r  r)   c                 C   s   |   |¡}| j |¡ dS )zM
        Sets an appropriate 'Cookie:' HTTP header on the `Request`.
        N)rQ  rL  Zadd_cookie_header)r6   r  rR  r8   r8   r9   rÖ   |  s    
zCookies.set_cookie_headerr=   rM   )ÚnamerR   ÚdomainrN   r)   c                 C   sT   d||dd|t |ƒ| d¡|t |ƒdddddddiddœ}tf |Ž}| j |¡ dS )zU
        Set a cookie value by name. May optionally include domain and path.
        r   NFÚ.TZHttpOnly)ÚversionrT  rR   rK   Zport_specifiedrU  Zdomain_specifiedZdomain_initial_dotrN   Zpath_specifiedZsecureZexpiresÚdiscardÚcommentZcomment_urlÚrestZrfc2109)rW   r  r   rL  rN  )r6   rT  rR   rU  rN   r\   rO  r8   r8   r9   rM  ƒ  s(    ï
zCookies.set)rT  r’   rU  rN   r)   c                 C   sn   d}| j D ]R}|j|kr
|dks*|j|kr
|dks<|j|kr
|dk	rVd|› �}t|ƒ‚|j}q
|dkrj|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=)rL  rT  rU  rN   r   rR   )r6   rT  r’   rU  rN   rR   rO  r%  r8   r8   r9   r•   �  s    


zCookies.get)rT  rU  rN   r)   c                 C   sŒ   |dk	r |dk	r | j  |||¡S g }| j D ]<}|j|kr*|dksJ|j|kr*|dks\|j|kr*| |¡ q*|D ]}| j  |j|j|j¡ qldS )z�
        Delete a cookie by name. May optionally include domain and path
        in order to specify exactly which cookie to delete.
        N)rL  ÚclearrT  rU  rN   r›   )r6   rT  rU  rN   ÚremoverO  r8   r8   r9   Údelete²  s    

zCookies.delete)rU  rN   r)   c                 C   sD   g }|dk	r|  |¡ |dk	r4|dk	s*t‚|  |¡ | 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�   rL  r[  )r6   rU  rN   rx   r8   r8   r9   r[  Ä  s    

zCookies.clearc                 C   s$   t |ƒ}|jD ]}| j |¡ qd S rS   )r$   rL  rN  )r6   rÑ   rO  r8   r8   r9   r—   Ñ  s    
zCookies.update)rT  rR   r)   c                 C   s   |   ||¡S rS   )rM  ©r6   rT  rR   r8   r8   r9   r    Ö  s    zCookies.__setitem__)rT  r)   c                 C   s   |   |¡}|d krt|ƒ‚|S rS   )r•   r½   r^  r8   r8   r9   r˜   Ù  s    
zCookies.__getitem__c                 C   s
   |   |¡S rS   )r]  )r6   rT  r8   r8   r9   rÌ   ß  s    zCookies.__delitem__r;   c                 C   s
   t | jƒS rS   )r€   rL  r>   r8   r8   r9   r¥   â  s    zCookies.__len__c                 C   s   dd„ | j D ƒS )Nc                 s   s   | ]}|j V  qd S rS   )rT  )r{   rO  r8   r8   r9   Ú	<genexpr>æ  s     z#Cookies.__iter__.<locals>.<genexpr>©rL  r>   r8   r8   r9   r¤   å  s    zCookies.__iter__c                 C   s   | j D ]} dS dS rÍ   r`  )r6   rŸ   r8   r8   r9   Ú__bool__è  s    
zCookies.__bool__c                       s>   e Zd ZdZeddœ‡ fdd„Zeeddœ‡ fdd„Z‡  ZS )	zCookies._CookieCompatRequestú‚
        Wraps a `Request` instance up in a compatibility interface suitable
        for use with `CookieJar` operations.
        NrS  c                    s*   t ƒ jt|jƒt|jƒ|jd� || _d S )N)r&   r®   rÓ   )rð   r:   r,   r&   r³   r®   rÓ   r  )r6   r  ró   r8   r9   r:   ó  s    ýz%Cookies._CookieCompatRequest.__init__r™   c                    s   t ƒ  ||¡ || jj|< d S rS   )rð   Úadd_unredirected_headerr  r®   )r6   rˆ   rR   ró   r8   r9   rc  û  s    z4Cookies._CookieCompatRequest.add_unredirected_header)	rj   rn   ro   rw   rÐ   r:   r,   rc  rý   r8   r8   ró   r9   rQ  í  s   rQ  c                   @   s0   e Zd ZdZedœdd„Zejjdœdd„Z	dS )	zCookies._CookieCompatResponserb  r"  c                 C   s
   || _ d S rS   r"  )r6   r#  r8   r8   r9   r:     s    z&Cookies._CookieCompatResponse.__init__r;   c                 C   s,   t j ¡ }| jj ¡ D ]\}}|||< q|S rS   )Úemailr%  ÚMessager#  r®   r„   )r6   Úinforˆ   rR   r8   r8   r9   rf    s    

z"Cookies._CookieCompatResponse.infoN)
rj   rn   ro   rw   r  r:   rd  r%  re  rf  r8   r8   r8   r9   rP  ÿ  s   rP  )N)r=   rM   )NNN)NN)NN)N) rj   rn   ro   rw   rê   r:   r  r)  rÐ   rÖ   r,   rM  rt   ru   r•   r]  r[  r—   r    r˜   rÌ   rL   r¥   r­   r¤   rW   ra  Úurllibr  rþ   rQ  rP  r8   r8   r8   r9   r$   `  s4   
     ÿ   þ)]r  r  Úemail.messagerd  rÙ   rÜ   rt   Zurllib.requestrg  Úcollections.abcr   Zhttp.cookiejarr   r   Úurllib.parser   r   r  r-   Úconfigr   r  r	   r
   r   r   r   r   Ú
exceptionsr   r   r   r   r   r   r   Ú	multipartr   Zstatus_codesr   Úutilsr   r   r   r   r   r   r   ZTYPE_CHECKINGZmiddleware.baser   Zdispatch.baser    ru   ré   r,   rL   ÚfloatrW   ZPrimitiveDatarp   ÚMappingr¨   r¬   rq   r/  ZAnyStrrÎ   rê   rÏ   r.  Z	AuthTypesZProxiesTypesr³   rü   rû   r­   r   ZIOrë   rI  rK  r!   rY   r"   r#   rÐ   r%   rþ   r  r0  rJ  r$   r8   r8   r8   r9   Ú<module>   sš    $	$
ýÿþÿ þÿþÿ
ÿþÿÿÿ ^ EP1/ 9e\