a
    |fN0                     @   s"  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mZ ddlmZ ddlmZ d	g d
Ze dZG dd dZe Zd eje eeeej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ddZ$dZ%dS )!    N)Path   )set_minimum_tls_version_1_2)Headers)	CertTypesHeaderTypesTimeoutTypesURLTypesVerifyTypes)URL)get_ca_bundle_from_env:)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   GD:\Projects\storyit_web\backend\venv\Lib\site-packages\httpx/_config.pyr   &   s   r   TFcertverify	trust_envhttp2returnc                 C   s   t | |||djS )Nr   r   r   r   )	SSLConfigssl_contextr   r   r   r   create_ssl_context-   s    r   c                   @   s   e Zd ZdZee Zdddddej	e
 eeeddddZejd	d
dZejd	ddZejd	ddZejd	ddZejddddZdS )r   z
    SSL Configuration.
    NTFr   r   c                C   s&   || _ || _|| _|| _|  | _d S N)r   r   r   r   load_ssl_contextr   )selfr   r   r   r   r   r   r   __init__?   s
    zSSLConfig.__init__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   M   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&   Z   s
    
z$SSLConfig.load_ssl_context_no_verifyc                 C   s:  | j r$| jdu r$t }|du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y   Y n0 z
d|_W n ty   Y n0 | rt|}td| |j|d n*| r,t|}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   
isinstancer*   
SSLContextr-   boolDEFAULT_CA_BUNDLE_PATHr   existsIOErrorformatr(   CERT_REQUIREDr,   r)   post_handshake_authAttributeErrorhostname_checks_common_nameis_filestrr#   r$   load_verify_locationsis_dir)r    Z	ca_bundler.   Zca_bundle_pathr/   r0   r   r   r   r%   d   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)r*   r2   PROTOCOL_TLS_CLIENTr   optionsOP_NO_COMPRESSIONset_ciphersDEFAULT_CIPHERSHAS_ALPNr   set_alpn_protocolsosenvirongetr   keylog_filename)r    r.   Zalpn_idents
keylogfiler   r   r   r(      s    


z%SSLConfig._create_default_ssl_context)r   r   c                 C   s   | j du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   )rM   keyfile   )rM   rO   password)r   r1   r=   load_cert_chaintuplelen)r    r   r   r   r   r-      s    
zSSLConfig._load_client_certs)r   r   r   __doc__r   certifiwherer4   typingOptionalr   r
   r3   r!   r*   r2   r   r&   r%   r(   r-   r   r   r   r   r   8   s$   
7r   c                
   @   s   e Zd ZdZefeeeedejeef ejde	ef ejde	ef ejde	ef ejde	ef ddddZ
ejeeje	 f ddd	Zejed
ddZedddZdS )Timeouta  
    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poolN)timeoutr\   r]   r^   r_   r   c                C   sd  t |tr^|tu sJ |tu s"J |tu s.J |tu s:J |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   rP   rN      zShttpx.Timeout must either include a default, or set all four parameters explicitly.)r1   rZ   UNSETr\   r]   r^   r_   rS   rT   r   
ValueError)r    r`   r\   r]   r^   r_   r   r   r   r!      sD    	



zTimeout.__init__r"   c                 C   s   | j | j| j| jdS )Nr[   r[   r'   r   r   r   as_dict   s
    zTimeout.as_dictotherr   c                 C   s<   t || jo:| j|jko:| j|jko:| j|jko:| j|jkS r   )r1   	__class__r\   r]   r^   r_   r    rf   r   r   r   __eq__  s    



zTimeout.__eq__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=)rg   r   rT   r\   r]   r^   r_   r    
class_namer   r   r   __repr__  s    zTimeout.__repr__)r   r   r   rU   rb   rX   Unionr   r   floatr!   Dictr=   rY   rd   Anyr3   ri   rm   r   r   r   r   rZ      s$   .	rZ   c                   @   s`   e Zd ZdZddddeje eje eje ddddZej	e
dd	d
ZedddZdS )Limitsa  
    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_expiry)ru   rv   rw   r   c                C   s   || _ || _|| _d S r   rt   )r    ru   rv   rw   r   r   r   r!   %  s    zLimits.__init__re   c                 C   s0   t || jo.| j|jko.| j|jko.| j|jkS r   )r1   rg   ru   rv   rw   rh   r   r   r   ri   0  s    


zLimits.__eq__r"   c                 C   s*   | j j}| d| j d| j d| j dS )Nz(max_connections=z, max_keepalive_connections=z, keepalive_expiry=rj   )rg   r   ru   rv   rw   rk   r   r   r   rm   8  s    zLimits.__repr__)r   r   r   rU   rX   rY   intro   r!   rq   r3   ri   r=   rm   r   r   r   r   rr     s   rr   c                   @   sz   e Zd Zddddeejej ejeje	e	f  eje
 ddddZeejejeef  dddZe	dd	d
ZdS )ProxyN)r   authheaders)urlr   rz   r{   r   c                C   sj   t |}t|}|jdvr(td||js4|jrN|j|jf}|jd d d}|| _|| _|| _	|| _
d S )N)httphttpssocks5zUnknown scheme for proxy URL )usernamerQ   )r   r   schemerc   r   rQ   	copy_withr|   rz   r{   r   )r    r|   r   rz   r{   r   r   r   r!   B  s    
zProxy.__init__r"   c                 C   s.   | j d u rd S | j d d| j d dfS )Nr   zutf-8r   )rz   encoder'   r   r   r   raw_authZ  s    zProxy.raw_authc                 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(rj   )rz   r=   r|   r{   dict)r    rz   Zurl_strauth_strZheaders_strr   r   r   rm   c  s
    zProxy.__repr__)r   r   r   r	   rX   rY   r*   r2   Tupler=   r   r!   propertybytesr   rm   r   r   r   r   ry   A  s   
 ry   rs   )r`   d      )ru   rv   )NTTF)&loggingrH   r*   rX   pathlibr   rV   _compatr   Z_modelsr   _typesr   r   r   r	   r
   Z_urlsr   Z_utilsr   joinrE   	getLoggerr#   r   rb   rY   r3   r2   r   r   rZ   rr   ry   ZDEFAULT_TIMEOUT_CONFIGZDEFAULT_LIMITSZDEFAULT_MAX_REDIRECTSr   r   r   r   <module>   sF   
     	W*-
