o
    "`^h/                     @  s&  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 g d
Zdg dZedZG dd dZe Z				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'd(d)Z#d(Z$dS ),    )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!DSShttpxc                   @  s   e Zd ZdS )	UnsetTypeN)__name__
__module____qualname__ r   r   K/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/httpx/_config.pyr   *   s    r   TFcertCertTypes | Noneverifyr
   	trust_envboolhttp2returnssl.SSLContextc                 C  s   t | |||djS )Nr   r   r   r   )	SSLConfigssl_contextr!   r   r   r   r   1   s
   r   c                   @  sd   e Zd ZdZee ZddddddddZdddZ	dddZ
dddZdddZdddZdS ) r"   z
    SSL Configuration.
    NTFr!   r   r   r   r
   r   r   r   r   Nonec                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    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  s6  | j r| jdu rt }|dur|| _t| jtjr#| j}| | |S t| jtr-| j}nt	| j
 r:t	| j}ntd| j|  }tj|_d|_zd|_W n	 ty[   Y nw zd|_W n	 tyj   Y nw | rt|}td| |j|d n| rt|}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   
isinstancer0   
SSLContextr3   r   DEFAULT_CA_BUNDLE_PATHr   existsIOErrorformatr.   CERT_REQUIREDr2   r/   post_handshake_authAttributeErrorhostname_checks_common_nameis_filestrr)   r*   load_verify_locationsis_dir)r'   	ca_bundler4   ca_bundle_pathr5   r6   r   r   r   r+   h   sN   



z!SSLConfig.load_ssl_context_verifyc                 C  sr   t t j}t| | jt jO  _|t t jr)| j	r!ddgndg}|
| tjd}|r7| jr7||_|S )zy
        Creates the default SSLContext object that's used for both verified
        and unverified connections.
        zhttp/1.1h2SSLKEYLOGFILE)r0   r8   PROTOCOL_TLS_CLIENTr   optionsOP_NO_COMPRESSIONset_ciphersDEFAULT_CIPHERSHAS_ALPNr   set_alpn_protocolsosenvirongetr   keylog_filename)r'   r4   alpn_idents
keylogfiler   r   r   r.      s   


z%SSLConfig._create_default_ssl_contextr#   c                 C  s   | j durPt| j tr|j| j d dS t| j tr0t| j dkr0|j| j d | j d d dS t| j trRt| j dkrT|j| j d | j d | j d d dS dS dS dS )	zF
        Loads client certificates into our SSLContext object
        N)certfile   r   r   )rV   keyfile   )rV   rX   password)r   r7   rB   load_cert_chaintuplelen)r'   r#   r   r   r   r3      s   

zSSLConfig._load_client_certs)
r   r   r   r
   r   r   r   r   r   r$   )r   r    )r#   r    r   r$   )r   r   r   __doc__r   certifiwherer9   r(   r&   r,   r+   r.   r3   r   r   r   r   r"   <   s    




7r"   c                   @  sH   e Zd ZdZefeeeeddddZdddZdddZ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pooltimeoutTimeoutTypes | UnsetTyperb   None | float | UnsetTyperc   rd   re   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| _d S t |tr]|d | _|d | _t|dk rFd n|d | _t|dk rVd | _d S |d | _d S t |t	st |t	st |t	st |t	s|| _|| _|| _|| _d S t |t	rt
dt |t	r|n|| _t |t	r|n|| _t |t	r|n|| _t |t	r|n|| _d S )Nr   r   rY   rW      zShttpx.Timeout must either include a default, or set all four parameters explicitly.)r7   r   UNSETrb   rc   rd   re   r\   r]   r   
ValueError)r'   rf   rb   rc   rd   re   r   r   r   r(      sD   
	


$

zTimeout.__init__dict[str, float | None]c                 C  s   | j | j| j| jdS )Nra   ra   r-   r   r   r   as_dict   s
   zTimeout.as_dictother
typing.Anyr   c                 C  s<   t || jo| j|jko| j|jko| j|jko| j|jkS r%   )r7   	__class__rb   rc   rd   re   r'   rn   r   r   r   __eq__  s   



zTimeout.__eq__rB   c              
   C  s`   | j j}t| j| j| j| jhdkr| 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=)rp   r   r]   rb   rc   rd   re   r'   
class_namer   r   r   __repr__  s   zTimeout.__repr__N)rf   rg   rb   rh   rc   rh   rd   rh   re   rh   r   r$   )r   rl   rn   ro   r   r   r   rB   )	r   r   r   r^   rj   r(   rm   rr   rv   r   r   r   r   r      s    
.
	r   c                   @  s8   e Zd ZdZdddddddZdddZ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_expiryr{   
int | Noner|   r}   float | Noner   r$   c                C  s   || _ || _|| _d S r%   rz   )r'   r{   r|   r}   r   r   r   r(   )  s   
zLimits.__init__rn   ro   r   c                 C  s0   t || jo| j|jko| j|jko| j|jkS r%   )r7   rp   r{   r|   r}   rq   r   r   r   rr   4  s   


zLimits.__eq__rB   c                 C  s*   | j j}| d| j d| j d| j dS )Nz(max_connections=z, max_keepalive_connections=z, keepalive_expiry=rs   )rp   r   r{   r|   r}   rt   r   r   r   rv   <  s   zLimits.__repr__)r{   r~   r|   r~   r}   r   r   r$   rw   rx   )r   r   r   r^   r(   rr   rv   r   r   r   r   r     s    
r   c                   @  s8   e Zd ZdddddddZedddZdddZdS )r   N)r#   authheadersurl	URL | strr#   ssl.SSLContext | Noner   tuple[str, str] | Noner   HeaderTypes | Noner   r$   c                C  sj   t |}t|}|jdvrtd||js|jr'|j|jf}|jd d d}|| _|| _|| _	|| _
d S )N)httphttpssocks5zUnknown scheme for proxy URL )usernamerZ   )r   r   schemerk   r   rZ   	copy_withr   r   r   r#   )r'   r   r#   r   r   r   r   r   r(   F  s   

zProxy.__init__tuple[bytes, bytes] | Nonec                 C  s.   | j d u rd S | j d d| j d dfS )Nr   zutf-8r   )r   encoder-   r   r   r   raw_auth^  s
   
zProxy.raw_authrB   c                 C  sd   | j r
| j d dfnd }t| j}|rd|nd}| jr&dt| jnd}d| | | dS )Nr   z********z, auth= z
, headers=zProxy(rs   )r   rB   r   r   dict)r'   r   url_strauth_strheaders_strr   r   r   rv   g  s
   zProxy.__repr__)
r   r   r#   r   r   r   r   r   r   r$   )r   r   rx   )r   r   r   r(   propertyr   rv   r   r   r   r   r   E  s    r   ry   )rf   d      )r{   r|   )NTTF)
r   r   r   r
   r   r   r   r   r   r    )%
__future__r   loggingrP   r0   typingpathlibr   r_   _compatr   _modelsr   _typesr   r   r	   r
   _urlsr   _utilsr   __all__joinrM   	getLoggerr)   r   rj   r   r"   r   r   r   DEFAULT_TIMEOUT_CONFIGDEFAULT_LIMITSDEFAULT_MAX_REDIRECTSr   r   r   r   <module>   s@    
 	W*
-