o
    CZc)0                     @   s$  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	m
Z
 ddlmZmZmZmZmZ ddlmZmZ dg d	ZeeZG d
d dZe Z				d"deje dedededejf
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)URLHeaders)	CertTypesHeaderTypesTimeoutTypesURLTypesVerifyTypes)get_ca_bundle_from_env
get_logger:)zECDHE+AESGCMzECDHE+CHACHA20z
DHE+AESGCMzDHE+CHACHA20zECDH+AESGCMz	DH+AESGCMzECDH+AESzDH+AESz
RSA+AESGCMzRSA+AESz!aNULLz!eNULLz!MD5z!DSSc                   @   s   e Zd ZdS )	UnsetTypeN)__name__
__module____qualname__ r   r   C/var/www/chikooza/env/lib/python3.10/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dej	e
 deded	efd
dZdejfddZdejfddZdejfddZdejfddZdejddfddZdS )r   z
    SSL Configuration.
    NTFr   r   r   r   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   s@   t d| jd| jd| jd| j | jr|  S |  S )Nzload_ssl_context verify=z cert=z trust_env=z http2=)loggertracer   r   r   r   load_ssl_context_verifyload_ssl_context_no_verifyr    r   r   r   r   K   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%   X   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d| |jt|d n| rtd| |jt|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=)cafilezload_verify_locations capath=)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_filer"   r#   load_verify_locationsstris_dir)r    	ca_bundler-   ca_bundle_pathr   r   r   r$   b   sJ   



z!SSLConfig.load_ssl_context_verifyc                 C   s|   t t j}t| | jt jO  _|t t jr)| j	r!ddgndg}|
| t|dr<tjd}|r<| jr<||_|S )zy
        Creates the default SSLContext object that's used for both verified
        and unverified connections.
        zhttp/1.1h2keylog_filenameSSLKEYLOGFILE)r)   r1   PROTOCOL_TLS_CLIENTr   optionsOP_NO_COMPRESSIONset_ciphersDEFAULT_CIPHERSHAS_ALPNr   set_alpn_protocolshasattrosenvirongetr   rB   )r    r-   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   )rQ   keyfile   )rQ   rS   password)r   r0   r=   load_cert_chaintuplelen)r    r   r   r   r   r,      s   

zSSLConfig._load_client_certs)r   r   r   __doc__r   certifiwherer3   typingOptionalr   r   r2   r!   r)   r1   r   r%   r$   r'   r,   r   r   r   r   r   6   s*    

5r   c                   @   s   e Zd ZdZefeeeeddejeef dejde	ef dejde	ef dejde	ef dejde	ef f
d	d
Z
dejeeje	 f fddZdejdefddZdef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pooltimeoutr`   Nra   rb   rc   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   rT   rR      zShttpx.Timeout must either include a default, or set all four parameters explicitly.)r0   r^   UNSETr`   ra   rb   rc   rW   rX   r   
ValueError)r    rd   r`   ra   rb   rc   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otherc                 C   s<   t || jo| j|jko| j|jko| j|jko| j|jkS r   )r0   	__class__r`   ra   rb   rc   r    ri   r   r   r   __eq__  s   



zTimeout.__eq__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=)rj   r   rX   r`   ra   rb   rc   r    
class_namer   r   r   __repr__
  s   zTimeout.__repr__)r   r   r   rY   rf   r\   Unionr	   r   floatr!   Dictr=   r]   rh   Anyr2   rl   rp   r   r   r   r   r^      s,    
.	r^   c                   @   sd   e Zd ZdZdddddeje deje deje fdd	Zd
ej	de
fddZdef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_expiryrx   ry   rz   c                C   s   || _ || _|| _d S r   rw   )r    rx   ry   rz   r   r   r   r!   "  s   
zLimits.__init__ri   r   c                 C   s0   t || jo| j|jko| j|jko| j|jkS r   )r0   rj   rx   ry   rz   rk   r   r   r   rl   -  s   


zLimits.__eq__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   rx   ry   rz   rn   r   r   r   rp   5  s   zLimits.__repr__)r   r   r   rY   r\   r]   intrr   r!   rt   r2   rl   r=   rp   r   r   r   r   ru     s    
ru   c                   @   sp   e Zd Zddddedejejeef  deje fddZ	e
dejejeef  fd	d
ZdefddZdS )ProxyN)authheadersurlr}   r~   c                C   sd   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 )usernamerU   )
r   r   schemerg   r   rU   	copy_withr   r}   r~   )r    r   r}   r~   r   r   r   r!   ?  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   )r}   encoder&   r   r   r   raw_authU  s
   zProxy.raw_authc                 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(rm   )r}   r=   r   r~   dict)r    r}   url_strauth_strheaders_strr   r   r   rp   ^  s
   zProxy.__repr__)r   r   r   r
   r\   r]   Tupler=   r   r!   propertybytesr   rp   r   r   r   r   r|   >  s    
 r|   rv   )rd   d      )rx   ry   )NTTF)%rL   r)   r\   pathlibr   rZ   _compatr   _modelsr   r   _typesr   r   r	   r
   r   _utilsr   r   joinrH   r   r"   r   rf   r]   r2   r1   r   r   r^   ru   r|   DEFAULT_TIMEOUT_CONFIGDEFAULT_LIMITSDEFAULT_MAX_REDIRECTSr   r   r   r   <module>   sL    
 W*
+