o
    í6WjŸ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r"d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„Z7ej8d!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ÚAsyncHTTPTransportú,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+   úh/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/httpx/_transports/default.pyÚ_load_httpcore_exceptionsJ   s    òr-   útyping.Iterator[None]c               
   c  sŽ   � t tƒdkr
tƒ azd V  W d S  tyF }  z*d }t ¡ D ]\}}t| |ƒs(q|d u s1t||ƒr3|}q|d u r9‚ t| ƒ}||ƒ| ‚d } ~ ww r)   )Úlenr'   r-   Ú	ExceptionÚitemsÚ
isinstanceÚ
issubclassÚstr)ÚexcÚ
mapped_excÚfrom_excÚto_excÚmessager+   r+   r,   Úmap_httpcore_exceptions_   s&   €
€
€ðr:   c                   @  ó*   e Zd Zddd„Zddd	„Zdd
d„ZdS )ÚResponseStreamÚhttpcore_streamútyping.Iterable[bytes]r(   ÚNonec                 C  ó
   || _ d S ©N©Ú_httpcore_stream©Úselfr=   r+   r+   r,   Ú__init__z   ó   
zResponseStream.__init__útyping.Iterator[bytes]c                 c  s@   � t ƒ � | jD ]}|V  qW d   ƒ d S 1 sw   Y  d S rA   ©r:   rC   ©rE   Úpartr+   r+   r,   Ú__iter__}   s   €
ÿ"ÿzResponseStream.__iter__c                 C  s   t | jdƒr| j ¡  d S d S )NÚclose)ÚhasattrrC   rM   ©rE   r+   r+   r,   rM   ‚   s   ÿzResponseStream.closeN)r=   r>   r(   r?   )r(   rH   ©r(   r?   )Ú__name__Ú
__module__Ú__qualname__rF   rL   rM   r+   r+   r+   r,   r<   y   ó    

r<   c                   @  ó^   e Zd Zdddddedddddfd/dd„Zd0dd„Z			d1d2d&d'„Zd3d+d,„Zd4d-d.„ZdS )5r"   TNFr   Úverifyússl.SSLContext | str | boolÚcertúCertTypes | NoneÚ	trust_envÚboolÚhttp1Úhttp2Úlimitsr   ÚproxyúProxyTypes | NoneÚudsú
str | NoneÚlocal_addressÚretriesÚintÚsocket_optionsú%typing.Iterable[SOCKET_OPTION] | Noner(   r?   c                 C  sN  dd l }t|ttfƒrt|d�n|}t|||d�}|d u r2|j||j|j|j	||||	|
|d�
| _
d S |jjdv ra|j|j|jj|jj|jj|jjd�|j|jj||j|j|j|j	|||d�| _
d S |jjdv r�zdd l}W n tyy   td	ƒd ‚w |j|j|jj|jj|jj|jjd�|j||j|j|j	||d
�| _
d S td|jj›d�ƒ‚)Nr   ©Úurl©rV   rX   rZ   ©
Ússl_contextÚmax_connectionsÚmax_keepalive_connectionsÚkeepalive_expiryr\   r]   ra   rc   rd   rf   ©ÚhttpÚhttps©ÚschemeÚhostÚportÚtarget)Ú	proxy_urlÚ
proxy_authÚproxy_headersrl   Úproxy_ssl_contextrm   rn   ro   r\   r]   rf   ©Úsocks5Úsocks5hú{Using SOCKS proxy, but the 'socksio' package is not installed. Make sure to install httpx using `pip install httpx[socks]`.©rx   ry   rl   rm   rn   ro   r\   r]   zOProxy protocol must be either 'http', 'https', 'socks5', or 'socks5h', but got Ú.)r*   r2   r4   r   r   r   ÚConnectionPoolrm   rn   ro   Ú_poolri   rt   Ú	HTTPProxyÚ
raw_schemeÚraw_hostrv   Úraw_pathÚraw_authÚheadersÚrawrl   ÚsocksioÚImportErrorÚ
SOCKSProxyÚ
ValueError©rE   rV   rX   rZ   r\   r]   r^   r_   ra   rc   rd   rf   r*   rl   r‹   r+   r+   r,   rF   ˆ   s‚   öüðÿýÿüóÿÿzHTTPTransport.__init__rE   r!   c                 C  s   | j  ¡  | S rA   )rƒ   Ú	__enter__rO   r+   r+   r,   r�   Ù   s   
zHTTPTransport.__enter__Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackúTracebackType | Nonec                 C  s<   t ƒ � | j |||¡ W d   ƒ d S 1 sw   Y  d S rA   )r:   rƒ   Ú__exit__©rE   r‘   r“   r•   r+   r+   r,   r—   Ý   s   "ÿzHTTPTransport.__exit__Úrequestr   r   c                 C  s´   t |jtƒsJ ‚dd l}|j|j|j|jj|jj	|jj
|jjd�|jj|j|jd�}tƒ � | j |¡}W d   ƒ n1 s>w   Y  t |jtjƒsLJ ‚t|j|jt|jƒ|jd�S ©Nr   rs   )Úmethodri   r‰   ÚcontentÚ
extensions)Ústatus_coder‰   Ústreamr�   )r2   rŸ   r   r*   r   r›   r   ri   r…   r†   rv   r‡   r‰   rŠ   r�   r:   rƒ   Úhandle_requestÚtypingÚIterabler   Ústatusr<   ©rE   r™   r*   ÚreqÚrespr+   r+   r,   r    æ   s0   üöÿüzHTTPTransport.handle_requestc                 C  s   | j  ¡  d S rA   )rƒ   rM   rO   r+   r+   r,   rM     s   zHTTPTransport.close©rV   rW   rX   rY   rZ   r[   r\   r[   r]   r[   r^   r   r_   r`   ra   rb   rc   rb   rd   re   rf   rg   r(   r?   )rE   r!   r(   r!   ©NNN©r‘   r’   r“   r”   r•   r–   r(   r?   ©r™   r   r(   r   rP   )	rQ   rR   rS   r   rF   r�   r—   r    rM   r+   r+   r+   r,   r"   ‡   ó(    ô
Qü
	c                   @  r;   )ÚAsyncResponseStreamr=   útyping.AsyncIterable[bytes]r(   r?   c                 C  r@   rA   rB   rD   r+   r+   r,   rF   
  rG   zAsyncResponseStream.__init__útyping.AsyncIterator[bytes]c                 C sJ   �t ƒ � | j2 z	3 d H W }|V  q6 W d   ƒ d S 1 sw   Y  d S rA   rI   rJ   r+   r+   r,   Ú	__aiter__  s   €ÿ"ÿzAsyncResponseStream.__aiter__c                 Ã  s&   �t | jdƒr| j ¡ I d H  d S d S )NÚaclose)rN   rC   r°   rO   r+   r+   r,   r°     s   €ÿzAsyncResponseStream.acloseN)r=   r­   r(   r?   )r(   r®   rP   )rQ   rR   rS   rF   r¯   r°   r+   r+   r+   r,   r¬   	  rT   r¬   c                   @  rU   )5r%   TNFr   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r   r_   r`   ra   rb   rc   rd   re   rf   rg   r(   r?   c                 C  sB  dd l }t|ttfƒrt|d�n|}t|||d�}|d u r2|j||j|j|j	||||	|
|d�
| _
d S |jjdv ra|j|j|jj|jj|jj|jjd�|j|jj|j||j|j|j	|||d�| _
d S |jjdv r�zdd l}W n tyy   td	ƒd ‚w |j|j|jj|jj|jj|jjd�|j||j|j|j	||d
�| _
d S tdƒ‚)Nr   rh   rj   rk   rp   rs   )rx   ry   rz   r{   rl   rm   rn   ro   r\   r]   rf   r|   r   r€   zdProxy protocol must be either 'http', 'https', 'socks5', or 'socks5h', but got {proxy.url.scheme!r}.)r*   r2   r4   r   r   r   ÚAsyncConnectionPoolrm   rn   ro   rƒ   ri   rt   ÚAsyncHTTPProxyr…   r†   rv   r‡   rˆ   r‰   rŠ   rl   r‹   rŒ   ÚAsyncSOCKSProxyrŽ   r�   r+   r+   r,   rF     s~   öüðÿýÿüóÿzAsyncHTTPTransport.__init__rE   r$   c                 Ã  s   �| j  ¡ I d H  | S rA   )rƒ   Ú
__aenter__rO   r+   r+   r,   r´   i  s   €zAsyncHTTPTransport.__aenter__r‘   r’   r“   r”   r•   r–   c                 Ã  sD   �t ƒ � | j |||¡I d H  W d   ƒ d S 1 sw   Y  d S rA   )r:   rƒ   Ú	__aexit__r˜   r+   r+   r,   rµ   m  s   €"ÿzAsyncHTTPTransport.__aexit__r™   r   r   c                 Ã  s¼   �t |jtƒs	J ‚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 d   ƒ n1 sBw   Y  t |jtjƒsPJ ‚t|j|jt|jƒ|jd�S rš   )r2   rŸ   r   r*   r   r›   r   ri   r…   r†   rv   r‡   r‰   rŠ   r�   r:   rƒ   Úhandle_async_requestr¡   ÚAsyncIterabler   r£   r¬   r¤   r+   r+   r,   r¶   v  s2   €üöÿüz'AsyncHTTPTransport.handle_async_requestc                 Ã  s   �| j  ¡ I d H  d S rA   )rƒ   r°   rO   r+   r+   r,   r°   •  s   €zAsyncHTTPTransport.acloser§   )rE   r$   r(   r$   r¨   r©   rª   rP   )	rQ   rR   rS   r   rF   r´   rµ   r¶   r°   r+   r+   r+   r,   r%     r«   )r(   r&   )r(   r.   )>Ú__doc__Ú
__future__r   Ú
contextlibr¡   Útypesr   ÚTYPE_CHECKINGÚsslÚhttpxÚ_configr   r   r   r   Ú_exceptionsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Ú_modelsr   r   Ú_typesr   r   r   r   Ú_urlsr   Úbaser   r    ÚTypeVarr!   r$   ÚUnionÚTuplere   ÚbytesÚ	bytearrayÚSOCKET_OPTIONÚ__all__r'   Ú__annotations__r-   Úcontextmanagerr:   r<   r"   r¬   r%   r+   r+   r+   r,   Ú<module>   s@    @þÿ
 