U
    nËjŸ6  ã                   @  s¶  U d Z ddlmZ ddlZddlZddlmZ ejrDddlZddl	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mZmZmZmZmZ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' ddl(m)Z)m*Z* ej+ddd�Z,ej+ddd�Z-ej.ej/e0e0e0f ej/e0e0ej.e1e2f f ej/e0e0de0f f Z3ddgZ4i a5de6d< ddœdd„Z7ej8ddœdd„ƒZ9G dd„ de%ƒZ:G dd„ de*ƒZ;G dd„ de"ƒZ<G dd„ de)ƒZ=dS ) a   
Custom transports, with nicely configured defaults.

The following additional keyword arguments are currently supported by httpcore...

* uds: str
* local_address: str
* retries: int

Example usages...

# Disable HTTP/2 on a single specific domain.
mounts = {
    "all://": httpx.HTTPTransport(http2=True),
    "all://*example.org": httpx.HTTPTransport()
}

# Using advanced httpcore configuration, with connection retries.
transport = httpx.HTTPTransport(retries=1)
client = httpx.Client(transport=transport)

# Using advanced httpcore configuration, with unix domain sockets.
transport = httpx.HTTPTransport(uds="socket.uds")
client = httpx.Client(transport=transport)
é    )ÚannotationsN)ÚTracebackTypeé   )ÚDEFAULT_LIMITSÚLimitsÚProxyÚcreate_ssl_context)ÚConnectErrorÚConnectTimeoutÚLocalProtocolErrorÚNetworkErrorÚPoolTimeoutÚProtocolErrorÚ
ProxyErrorÚ	ReadErrorÚReadTimeoutÚRemoteProtocolErrorÚTimeoutExceptionÚUnsupportedProtocolÚ
WriteErrorÚWriteTimeout)ÚRequestÚResponse)ÚAsyncByteStreamÚ	CertTypesÚ
ProxyTypesÚSyncByteStream)ÚURLé   )ÚAsyncBaseTransportÚBaseTransportÚTÚHTTPTransport)ÚboundÚAÚAsyncHTTPTransportz,dict[type[Exception], type[httpx.HTTPError]]ÚHTTPCORE_EXC_MAP©Úreturnc                  C  s`   dd l } | jt| jt| jt| jt| jt| jt| jt| jt| j	t	| j
t
| jt| jt| jt| jtiS ©Nr   )Úhttpcorer   r
   r   r   r   r   r	   r   r   r   r   r   r   r   )r*   © r+   ú=/tmp/pip-unpacked-wheel-7ig9zwdf/httpx/_transports/default.pyÚ_load_httpcore_exceptionsJ   s<                  òr-   ztyping.Iterator[None]c               
   c  s˜   t tƒdkrtƒ az
d V  W nv tk
r’ }  zXd }t ¡ D ]*\}}t| |ƒsNq:|d ks`t||ƒr:|}q:|d krp‚ t| ƒ}||ƒ| ‚W 5 d } ~ X Y nX d S r)   )Úlenr&   r-   Ú	ExceptionÚitemsÚ
isinstanceÚ
issubclassÚstr)ÚexcZ
mapped_excZfrom_excZto_excÚmessager+   r+   r,   Úmap_httpcore_exceptions_   s    

r6   c                   @  s8   e Zd Zdddœdd„Zddœdd	„Zddœd
d„ZdS )ÚResponseStreamztyping.Iterable[bytes]ÚNone©Úhttpcore_streamr(   c                 C  s
   || _ d S ©N©Ú_httpcore_stream©Úselfr:   r+   r+   r,   Ú__init__z   s    zResponseStream.__init__ztyping.Iterator[bytes]r'   c              	   c  s(   t ƒ � | jD ]
}|V  qW 5 Q R X d S r;   ©r6   r=   ©r?   Úpartr+   r+   r,   Ú__iter__}   s    
zResponseStream.__iter__c                 C  s   t | jdƒr| j ¡  d S )NÚclose)Úhasattrr=   rE   ©r?   r+   r+   r,   rE   ‚   s    zResponseStream.closeN)Ú__name__Ú
__module__Ú__qualname__r@   rD   rE   r+   r+   r+   r,   r7   y   s   r7   c                   @  sŒ   e Zd Zdddddedddddfddddddd	d
d
ddddœdd„Zdddœdd„Zd#dddddœdd„Zdddœdd„Zdd œd!d"„ZdS )$r"   TNFr   ússl.SSLContext | str | boolúCertTypes | NoneÚboolr   úProxyTypes | Noneú
str | NoneÚintú%typing.Iterable[SOCKET_OPTION] | Noner8   ©ÚverifyÚcertÚ	trust_envÚhttp1Úhttp2ÚlimitsÚproxyÚudsÚlocal_addressÚretriesÚsocket_optionsr(   c                 C  sT  dd l }t|ttfƒr t|d�n|}t|||d�}|d krb|j||j|j|j	||||	|
|d�
| _
nî|jjdkr¾|j|j|jj|jj|jj|jjd�|j|jj||j|j|j|j	|||d�| _
n’|jjdk�r<zdd l}W n tk
rö   td	ƒd ‚Y nX |j|j|jj|jj|jj|jjd�|j||j|j|j	||d
�| _
ntd|jj›d�ƒ‚d S )Nr   ©Úurl©rS   rT   rU   ©
Ússl_contextÚmax_connectionsÚmax_keepalive_connectionsÚkeepalive_expiryrV   rW   rZ   r[   r\   r]   ©ÚhttpÚhttps©ÚschemeÚhostÚportÚtarget)Ú	proxy_urlÚ
proxy_authÚproxy_headersrb   Úproxy_ssl_contextrc   rd   re   rV   rW   r]   ©Zsocks5Zsocks5hú{Using SOCKS proxy, but the 'socksio' package is not installed. Make sure to install httpx using `pip install httpx[socks]`.©rn   ro   rb   rc   rd   re   rV   rW   zOProxy protocol must be either 'http', 'https', 'socks5', or 'socks5h', but got Ú.)r*   r1   r3   r   r   r   ÚConnectionPoolrc   rd   re   Ú_poolr_   rj   Z	HTTPProxyÚ
raw_schemeÚraw_hostrl   Úraw_pathÚraw_authÚheadersÚrawrb   ÚsocksioÚImportErrorZ
SOCKSProxyÚ
ValueError©r?   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r*   rb   r~   r+   r+   r,   r@   ˆ   s|    ö
üð
ÿýüó
ÿzHTTPTransport.__init__r!   ©r?   r(   c                 C  s   | j  ¡  | S r;   )rw   Ú	__enter__rG   r+   r+   r,   rƒ   Ù   s    
zHTTPTransport.__enter__útype[BaseException] | NoneúBaseException | NoneúTracebackType | None©Úexc_typeÚ	exc_valueÚ	tracebackr(   c              	   C  s&   t ƒ � | j |||¡ W 5 Q R X d S r;   )r6   rw   Ú__exit__©r?   rˆ   r‰   rŠ   r+   r+   r,   r‹   Ý   s    zHTTPTransport.__exit__r   r   ©Úrequestr(   c              	   C  s    t |jtƒst‚dd l}|j|j|j|jj	|jj
|jj|jjd�|jj|j|jd�}tƒ � | j |¡}W 5 Q R X t |jtjƒs„t‚t|j|jt|jƒ|jd�S ©Nr   ri   )Úmethodr_   r|   ÚcontentÚ
extensions)Ústatus_coder|   Ústreamr’   )r1   r”   r   ÚAssertionErrorr*   r   r�   r   r_   rx   ry   rl   rz   r|   r}   r’   r6   rw   Úhandle_requestÚtypingÚIterabler   Ústatusr7   ©r?   rŽ   r*   ÚreqÚrespr+   r+   r,   r–   æ   s.    üöüzHTTPTransport.handle_requestr'   c                 C  s   | j  ¡  d S r;   )rw   rE   rG   r+   r+   r,   rE     s    zHTTPTransport.close)NNN)	rH   rI   rJ   r   r@   rƒ   r‹   r–   rE   r+   r+   r+   r,   r"   ‡   s&   ô&Q   ü	c                   @  s8   e Zd Zdddœdd„Zddœdd	„Zddœd
d„ZdS )ÚAsyncResponseStreamztyping.AsyncIterable[bytes]r8   r9   c                 C  s
   || _ d S r;   r<   r>   r+   r+   r,   r@   
  s    zAsyncResponseStream.__init__ztyping.AsyncIterator[bytes]r'   c              	   C s2   t ƒ �" | j2 z3 d H W }|V  q6 W 5 Q R X d S r;   rA   rB   r+   r+   r,   Ú	__aiter__  s    zAsyncResponseStream.__aiter__c                 Ã  s    t | jdƒr| j ¡ I d H  d S )NÚaclose)rF   r=   rŸ   rG   r+   r+   r,   rŸ     s    zAsyncResponseStream.acloseN)rH   rI   rJ   r@   rž   rŸ   r+   r+   r+   r,   r�   	  s   r�   c                   @  sŒ   e Zd Zdddddedddddfddddddd	d
d
ddddœdd„Zdddœdd„Zd#dddddœdd„Zdddœdd„Zdd œd!d"„ZdS )$r%   TNFr   rK   rL   rM   r   rN   rO   rP   rQ   r8   rR   c                 C  sH  dd l }t|ttfƒr t|d�n|}t|||d�}|d krb|j||j|j|j	||||	|
|d�
| _
nâ|jjdkr¾|j|j|jj|jj|jj|jjd�|j|jj|j||j|j|j	|||d�| _
n†|jjdk�r<zdd l}W n tk
rö   td	ƒd ‚Y nX |j|j|jj|jj|jj|jjd�|j||j|j|j	||d
�| _
ntdƒ‚d S )Nr   r^   r`   ra   rf   ri   )rn   ro   rp   rq   rb   rc   rd   re   rV   rW   r]   rr   rs   rt   zdProxy protocol must be either 'http', 'https', 'socks5', or 'socks5h', but got {proxy.url.scheme!r}.)r*   r1   r3   r   r   r   ZAsyncConnectionPoolrc   rd   re   rw   r_   rj   ZAsyncHTTPProxyrx   ry   rl   rz   r{   r|   r}   rb   r~   r   ZAsyncSOCKSProxyr€   r�   r+   r+   r,   r@     s|    ö
üð
ÿýüó
ÿzAsyncHTTPTransport.__init__r$   r‚   c                 Ã  s   | j  ¡ I d H  | S r;   )rw   Ú
__aenter__rG   r+   r+   r,   r    i  s    zAsyncHTTPTransport.__aenter__r„   r…   r†   r‡   c              	   Ã  s,   t ƒ � | j |||¡I d H  W 5 Q R X d S r;   )r6   rw   Ú	__aexit__rŒ   r+   r+   r,   r¡   m  s    zAsyncHTTPTransport.__aexit__r   r   r�   c              	   Ã  s¦   t |jtƒst‚dd l}|j|j|j|jj	|jj
|jj|jjd�|jj|j|jd�}tƒ � | j |¡I d H }W 5 Q R X t |jtjƒsŠt‚t|j|jt|jƒ|jd�S r�   )r1   r”   r   r•   r*   r   r�   r   r_   rx   ry   rl   rz   r|   r}   r’   r6   rw   Úhandle_async_requestr—   ÚAsyncIterabler   r™   r�   rš   r+   r+   r,   r¢   v  s.    üöüz'AsyncHTTPTransport.handle_async_requestr'   c                 Ã  s   | j  ¡ I d H  d S r;   )rw   rŸ   rG   r+   r+   r,   rŸ   •  s    zAsyncHTTPTransport.aclose)NNN)	rH   rI   rJ   r   r@   r    r¡   r¢   rŸ   r+   r+   r+   r,   r%     s&   ô&Q   ü	)>Ú__doc__Ú
__future__r   Ú
contextlibr—   Útypesr   ÚTYPE_CHECKINGÚsslZhttpxÚ_configr   r   r   r   Ú_exceptionsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Z_modelsr   r   Ú_typesr   r   r   r   Z_urlsr   Úbaser   r    ÚTypeVarr!   r$   ÚUnionÚTuplerP   ÚbytesÚ	bytearrayZSOCKET_OPTIONÚ__all__r&   Ú__annotations__r-   Úcontextmanagerr6   r7   r"   r�   r%   r+   r+   r+   r,   Ú<module>   s>   @þÿ 