U
    ¶ÜŸjc!  ã                   @  sÔ   d dl 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 ejrVd dlZddd	d
gZG dd„ dƒZeƒ Zddddddœdd
„ZG dd	„ d	ƒZG dd„ dƒZG dd„ dƒZedd�Zeddd�ZdZdS )é    )ÚannotationsNé   )ÚHeaders)Ú	CertTypesÚHeaderTypesÚTimeoutTypes)ÚURLÚLimitsÚProxyÚTimeoutÚcreate_ssl_contextc                   @  s   e Zd ZdS )Ú	UnsetTypeN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú1/tmp/pip-unpacked-wheel-jth03pvz/httpx/_config.pyr      s   r   Tzssl.SSLContext | str | boolzCertTypes | NoneÚboolzssl.SSLContext)ÚverifyÚcertÚ	trust_envÚreturnc                 C  s  dd l }dd l}dd l}| dkrz|rDtj d¡rD|jtjd d�}qà|rhtj d¡rh|jtjd d�}qà|j| ¡ d�}nf| dkrž| |j	¡}d|_
|j|_nBt| tƒrÜd}| |t¡ tj | ¡rÐ|j| d�S |j| d�S | }|�rd	}| |t¡ t|tƒ�r| |¡ n
|j|Ž  |S )
Nr   TÚSSL_CERT_FILE)ÚcafileÚSSL_CERT_DIR)ÚcapathFz�`verify=<str>` is deprecated. Use `verify=ssl.create_default_context(cafile=...)` or `verify=ssl.create_default_context(capath=...)` instead.zz`cert=...` is deprecated. Use `verify=<ssl_context>` instead,with `.load_cert_chain()` to configure the certificate chain.)ÚsslÚwarningsÚcertifiÚosÚenvironÚgetÚcreate_default_contextÚwhereÚ
SSLContextÚPROTOCOL_TLS_CLIENTÚcheck_hostnameÚ	CERT_NONEÚverify_modeÚ
isinstanceÚstrÚwarnÚDeprecationWarningÚpathÚisdirÚload_cert_chain)r   r   r   r   r   r   ÚctxÚmessager   r   r   r      s:    

ÿÿ
c                	   @  sd   e Zd ZdZefeeeedœdddddddœdd„Zd	d
œdd„Zdddœdd„Zdd
œdd„ZdS )r   aÄ  
    Timeout configuration.

    **Usage**:

    Timeout(None)               # No timeouts.
    Timeout(5.0)                # 5s timeout on all operations.
    Timeout(None, connect=5.0)  # 5s timeout on connect, no other timeouts.
    Timeout(5.0, connect=10.0)  # 10s timeout on connect. 5s timeout elsewhere.
    Timeout(5.0, pool=None)     # No timeout on acquiring connection from pool.
                                # 5s timeout elsewhere.
    ©ÚconnectÚreadÚwriteÚpoolzTimeoutTypes | UnsetTypezNone | float | UnsetTypeÚNone)Útimeoutr3   r4   r5   r6   r   c                C  sd  t |tƒr^|tkst‚|tks"t‚|tks.t‚|tks:t‚|j| _|j| _|j| _|j| _�nt |tƒr²|d | _|d | _t	|ƒdk rŒd n|d | _t	|ƒdk r¦d n|d | _n®t |t
ƒsôt |t
ƒsôt |t
ƒsôt |t
ƒsô|| _|| _|| _|| _nlt |t
ƒ�rtdƒ‚t |t
ƒ�r|n|| _t |t
ƒ�r.|n|| _t |t
ƒ�rD|n|| _t |t
ƒ�rZ|n|| _d S )Nr   r   é   é   é   zShttpx.Timeout must either include a default, or set all four parameters explicitly.)r)   r   ÚUNSETÚAssertionErrorr3   r4   r5   r6   ÚtupleÚlenr   Ú
ValueError)Úselfr8   r3   r4   r5   r6   r   r   r   Ú__init__V   sD    	



ÿþýüÿzTimeout.__init__zdict[str, float | None]©r   c                 C  s   | j | j| j| jdœS )Nr2   r2   ©rA   r   r   r   Úas_dict„   s
    üzTimeout.as_dictú
typing.Anyr   ©Úotherr   c                 C  s<   t || jƒo:| j|jko:| j|jko:| j|jko:| j|jkS ©N)r)   Ú	__class__r3   r4   r5   r6   ©rA   rH   r   r   r   Ú__eq__Œ   s    
ÿ
þ
ý
ûzTimeout.__eq__r*   c              
   C  s`   | j j}t| j| j| j| jhƒdkr6|› d| j› d�S |› d| j› d| j› d| j› d| j› d�
S )Nr   z	(timeout=ú)z	(connect=z, read=z, write=z, pool=)rJ   r   r?   r3   r4   r5   r6   ©rA   Ú
class_namer   r   r   Ú__repr__•   s
    (ÿzTimeout.__repr__N)	r   r   r   Ú__doc__r<   rB   rE   rL   rP   r   r   r   r   r   H   s   þù.	c                   @  sL   e Zd ZdZddddœdddddœd	d
„Zdddœdd„Zddœdd„ZdS )r	   aÖ  
    Configuration for limits to various client behaviors.

    **Parameters:**

    * **max_connections** - The maximum number of concurrent connections that may be
            established.
    * **max_keepalive_connections** - Allow the connection pool to maintain
            keep-alive connections below this point. Should be less than or equal
            to `max_connections`.
    * **keepalive_expiry** - Time limit on idle keep-alive connections in seconds.
    Nç      @©Úmax_connectionsÚmax_keepalive_connectionsÚkeepalive_expiryz
int | Nonezfloat | Noner7   )rT   rU   rV   r   c                C  s   || _ || _|| _d S rI   rS   )rA   rT   rU   rV   r   r   r   rB   ­   s    zLimits.__init__rF   r   rG   c                 C  s0   t || jƒo.| j|jko.| j|jko.| j|jkS rI   )r)   rJ   rT   rU   rV   rK   r   r   r   rL   ¸   s    
ÿ
þ
üzLimits.__eq__r*   rC   c                 C  s*   | j j}|› d| j› d| j› d| j› d�S )Nz(max_connections=z, max_keepalive_connections=z, keepalive_expiry=rM   )rJ   r   rT   rU   rV   rN   r   r   r   rP   À   s     ÿzLimits.__repr__)r   r   r   rQ   rB   rL   rP   r   r   r   r   r	   Ÿ   s   ûc                   @  sL   e Zd Zddddœddddddœd	d
„Zeddœdd„ƒZddœdd„ZdS )r
   N)Ússl_contextÚauthÚheadersz	URL | strzssl.SSLContext | Noneztuple[str, str] | NonezHeaderTypes | Noner7   )ÚurlrW   rX   rY   r   c                C  sj   t |ƒ}t|ƒ}|jdkr(td|›�ƒ‚|js4|jrN|j|jf}|jd d d�}|| _|| _|| _	|| _
d S )N)ÚhttpÚhttpsZsocks5Zsocks5hzUnknown scheme for proxy URL )ÚusernameÚpassword)r   r   Úschemer@   r]   r^   Ú	copy_withrZ   rX   rY   rW   )rA   rZ   rW   rX   rY   r   r   r   rB   Ê   s    
zProxy.__init__ztuple[bytes, bytes] | NonerC   c                 C  s.   | j d krd S | j d  d¡| j d  d¡fS )Nr   zutf-8r   )rX   ÚencoderD   r   r   r   Úraw_authâ   s    ÿýzProxy.raw_authr*   c                 C  sd   | j r| j d dfnd }t| jƒ›}|r2d|›�nd}| jrLdt| jƒ›�nd}d|› |› |› d�S )Nr   z********z, auth=Ú z
, headers=zProxy(rM   )rX   r*   rZ   rY   Údict)rA   rX   Zurl_strÚauth_strZheaders_strr   r   r   rP   ë   s
    zProxy.__repr__)r   r   r   rB   Úpropertyrb   rP   r   r   r   r   r
   É   s   úrR   )r8   éd   é   )rT   rU   )TNT)Ú
__future__r   r   ÚtypingZ_modelsr   Ú_typesr   r   r   Z_urlsr   ÚTYPE_CHECKINGr   Ú__all__r   r<   r   r   r	   r
   ZDEFAULT_TIMEOUT_CONFIGZDEFAULT_LIMITSZDEFAULT_MAX_REDIRECTSr   r   r   r   Ú<module>   s(      ý1W*-
