U
    Wi/                     @  sF  d dl m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Zddl	m
Z
 ddlmZ ddlmZmZmZmZ ddlmZ dd	lmZ d
dddgZdddddddddddddddgZedZG dd dZe Zd2d"d#d$d$d%d&d'dZG 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/d0d1Z#d0Z$dS )3    )annotationsN)Path   )set_minimum_tls_version_1_2)Headers)	CertTypesHeaderTypesTimeoutTypesVerifyTypes)URL)get_ca_bundle_from_envLimitsProxyTimeoutcreate_ssl_context:zECDHE+AESGCMzECDHE+CHACHA20z
DHE+AESGCMzDHE+CHACHA20zECDH+AESGCMz	DH+AESGCMzECDH+AESzDH+AESz
RSA+AESGCMzRSA+AESz!aNULLz!eNULLz!MD5z!DSSZhttpxc                   @  s   e Zd ZdS )	UnsetTypeN)__name__
__module____qualname__ r   r   S/home/afrizal/public_html/fastapi/venv/lib/python3.8/site-packages/httpx/_config.pyr   *   s   r   TFCertTypes | Noner
   boolssl.SSLContextcertverify	trust_envhttp2returnc                 C  s   t | |||djS )Nr   r   r   r   )	SSLConfigssl_contextr!   r   r   r   r   1   s       c                   @  s   e Zd ZdZee Zdddddddddd	d
ddZddddZ	ddddZ
ddddZddddZdd	dddZdS )r"   z
    SSL Configuration.
    NTFr!   r   r
   r   Noner   c                C  s&   || _ || _|| _|| _|  | _d S N)r   r   r   r   load_ssl_contextr#   )selfr   r   r   r   r   r   r   __init__C   s
    zSSLConfig.__init__r   r    c                 C  s0   t d| j| j| j| j | jr(|  S |  S )Nz8load_ssl_context verify=%r cert=%r trust_env=%r http2=%r)loggerdebugr   r   r   r   load_ssl_context_verifyload_ssl_context_no_verifyr'   r   r   r   r&   Q   s    zSSLConfig.load_ssl_contextc                 C  s$   |   }d|_tj|_| | |S )zC
        Return an SSL context for unverified connections.
        F)_create_default_ssl_contextcheck_hostnamessl	CERT_NONEverify_mode_load_client_certs)r'   contextr   r   r   r-   ^   s
    
z$SSLConfig.load_ssl_context_no_verifyc                 C  s>  | j r$| jdkr$t }|dk	r$|| _t| jtjrF| j}| | |S t| jtrZ| j}n*t	| j
 rtt	| j}ntd| j|  }tj|_d|_z
d|_W n tk
r   Y nX z
d|_W n tk
r   Y nX | rt|}td| |j|d n*| r0t|}td| |j|d | | |S )	zA
        Return an SSL context for verified connections.
        TNzECould not find a suitable TLS CA certificate bundle, invalid path: {}Fzload_verify_locations cafile=%r)cafilezload_verify_locations capath=%r)capath)r   r   r   
isinstancer1   
SSLContextr4   r   DEFAULT_CA_BUNDLE_PATHr   existsIOErrorformatr/   CERT_REQUIREDr3   r0   post_handshake_authAttributeErrorhostname_checks_common_nameis_filestrr*   r+   load_verify_locationsis_dir)r'   Z	ca_bundler5   Zca_bundle_pathr6   r7   r   r   r   r,   h   sL    





z!SSLConfig.load_ssl_context_verifyc                 C  sr   t t j}t| | jt jO  _|t t jrR| j	rBddgndg}|
| tjd}|rn| jrn||_|S )zy
        Creates the default SSLContext object that's used for both verified
        and unverified connections.
        zhttp/1.1Zh2SSLKEYLOGFILE)r1   r9   PROTOCOL_TLS_CLIENTr   optionsOP_NO_COMPRESSIONset_ciphersDEFAULT_CIPHERSHAS_ALPNr   set_alpn_protocolsosenvirongetr   keylog_filename)r'   r5   Zalpn_idents
keylogfiler   r   r   r/      s    


z%SSLConfig._create_default_ssl_context)r#   r    c                 C  s   | j dk	rt| j tr&|j| j d nrt| j tr\t| j dkr\|j| j d | j d d n<t| j trt| j dkr|j| j d | j d | j d d dS )	zF
        Loads client certificates into our SSLContext object
        N)certfile   r   r   )rS   keyfile   )rS   rU   password)r   r8   rC   load_cert_chaintuplelen)r'   r#   r   r   r   r4      s    
zSSLConfig._load_client_certs)r   r   r   __doc__r   certifiwherer:   r(   r&   r-   r,   r/   r4   r   r   r   r   r"   <   s   
7r"   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 | UnsetTyper$   )timeoutr_   r`   ra   rb   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 rd n|d | _t	|dk rd n|d | _nt |t
st |t
st |t
st |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   rV   rT      zShttpx.Timeout must either include a default, or set all four parameters explicitly.)r8   r   UNSETAssertionErrorr_   r`   ra   rb   rY   rZ   r   
ValueError)r'   rc   r_   r`   ra   rb   r   r   r   r(      sD    	



zTimeout.__init__zdict[str, float | None]r)   c                 C  s   | j | j| j| jdS )Nr^   r^   r.   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 r%   )r8   	__class__r_   r`   ra   rb   r'   rk   r   r   r   __eq__  s    



zTimeout.__eq__rC   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=)rl   r   rZ   r_   r`   ra   rb   r'   
class_namer   r   r   __repr__  s
    (zTimeout.__repr__N)	r   r   r   r[   re   r(   rh   rn   rr   r   r   r   r   r      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 | Noner$   )ru   rv   rw   r    c                C  s   || _ || _|| _d S r%   rt   )r'   ru   rv   rw   r   r   r   r(   )  s    zLimits.__init__ri   r   rj   c                 C  s0   t || jo.| j|jko.| j|jko.| j|jkS r%   )r8   rl   ru   rv   rw   rm   r   r   r   rn   4  s    


zLimits.__eq__rC   r)   c                 C  s*   | j j}| d| j d| j d| j dS )Nz(max_connections=z, max_keepalive_connections=z, keepalive_expiry=ro   )rl   r   ru   rv   rw   rp   r   r   r   rr   <  s     zLimits.__repr__)r   r   r   r[   r(   rn   rr   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)r#   authheadersz	URL | strzssl.SSLContext | Noneztuple[str, str] | NonezHeaderTypes | Noner$   )urlr#   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Unknown scheme for proxy URL )usernamerW   )r   r   schemerg   r}   rW   	copy_withrz   rx   ry   r#   )r'   rz   r#   rx   ry   r   r   r   r(   F  s    
zProxy.__init__ztuple[bytes, bytes] | Noner)   c                 C  s.   | j d krd S | j d d| j d dfS )Nr   zutf-8r   )rx   encoder.   r   r   r   raw_auth^  s    zProxy.raw_authrC   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(ro   )rx   rC   rz   ry   dict)r'   rx   Zurl_strauth_strZheaders_strr   r   r   rr   g  s
    zProxy.__repr__)r   r   r   r(   propertyr   rr   r   r   r   r   r   E  s   rs   )rc   d      )ru   rv   )NTTF)%
__future__r   loggingrN   r1   typingpathlibr   r\   Z_compatr   Z_modelsr   _typesr   r   r	   r
   Z_urlsr   Z_utilsr   __all__joinrK   	getLoggerr*   r   re   r   r"   r   r   r   ZDEFAULT_TIMEOUT_CONFIGZDEFAULT_LIMITSZDEFAULT_MAX_REDIRECTSr   r   r   r   <module>   sZ   
     	W*-
