o
    Eh1                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dl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mZ dg d	ZeeZG d
d dZe 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)	b64encode)Path   )URLHeaders)	CertTypesHeaderTypesTimeoutTypesURLTypesVerifyTypes)get_ca_bundle_from_env
get_loggerwarn_deprecated:)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   H/var/www/html/env_mimamsha/lib/python3.10/site-packages/httpx/_config.pyr   $   s    r   c                	   @   s   e Zd ZdZee Zddddddede	de
d	e
fd
dZdejde
fddZ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 )	SSLConfigz
    SSL Configuration.
    NTF)certverify	trust_envhttp2r   r   r   r   c                C   s&   || _ || _|| _|| _|  | _d S N)r   r   r   r   load_ssl_contextssl_context)selfr   r   r   r   r   r   r   __init__2   s
   zSSLConfig.__init__otherreturnc                 C   $   t || jo| j|jko| j|jkS r   )
isinstance	__class__r   r   r   r    r   r   r   __eq__@   
   

zSSLConfig.__eq__c                 C   "   | j j}| d| j d| j dS )Nz(cert=z	, verify=))r$   r   r   r   r   
class_namer   r   r   __repr__G   s   zSSLConfig.__repr__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$   |   }tj|_d|_| | |S )zC
        Return an SSL context for unverified connections.
        F)_create_default_ssl_contextssl	CERT_NONEverify_modecheck_hostname_load_client_certs)r   contextr   r   r   r0   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   r#   r3   
SSLContextr7   boolDEFAULT_CA_BUNDLE_PATHr   existsIOErrorformatr2   CERT_REQUIREDr5   r6   post_handshake_authAttributeErrorhostname_checks_common_nameis_filer-   r.   load_verify_locationsstris_dir)r   	ca_bundler8   ca_bundle_pathr   r   r   r/   b   sJ   



z!SSLConfig.load_ssl_context_verifyc                 C   s   t t j}| jt jO  _| jt jO  _| jt jO  _| jt jO  _| jt jO  _|	t
 t jrE| jr=ddgndg}|| t|drXtjd}|rX| jrX||_|S )zy
        Creates the default SSLContext object that's used for both verified
        and unverified connections.
        zhttp/1.1h2keylog_filenameSSLKEYLOGFILE)r3   r;   PROTOCOL_TLSoptionsOP_NO_SSLv2OP_NO_SSLv3OP_NO_TLSv1OP_NO_TLSv1_1OP_NO_COMPRESSIONset_ciphersDEFAULT_CIPHERSHAS_ALPNr   set_alpn_protocolshasattrosenvirongetr   rL   )r   r8   alpn_idents
keylogfiler   r   r   r2      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   )r_   keyfile   )r_   ra   password)r   r#   rG   load_cert_chaintuplelen)r   r   r   r   r   r7      s   

zSSLConfig._load_client_certs)r   r   r   __doc__r   certifiwherer=   r   r   r<   r   typingAnyr&   rG   r,   r3   r;   r   r0   r/   r2   r7   r   r   r   r   r   +   s.    

5r   c                   @   s   e Zd ZdZ	deeeedde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()                           # No timeout.
    Timeout(5.0)                        # 5s timeout on all operations.
    Timeout(connect_timeout=5.0)        # 5s timeout on connect, no other timeouts.
    Timeout(5.0, connect_timeout=10.0)  # 10s timeout on connect. 5s timeout elsewhere.
    Timeout(5.0, pool_timeout=None)     # No timeout on acquiring connection from pool.
                                        # 5s timeout elsewhere.
    Nconnect_timeoutread_timeoutwrite_timeoutpool_timeouttimeoutrn   ro   rp   rq   c                C   s  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	rd|n|| _t |t	rn|n|| _t |t	rx|n|| _t |t	r|n|| _d S )Nr   r   rb   r`      )
r#   rl   UNSETrn   ro   rp   rq   re   rf   r   )r   rr   rn   ro   rp   rq   r   r   r   r      s.   
	


$zTimeout.__init__r!   c                 C   s   | j | j| j| jdS )N)connectreadwritepoolrm   r1   r   r   r   as_dict   s
   zTimeout.as_dictr    c                 C   s<   t || jo| j|jko| j|jko| j|jko| j|jkS r   )r#   r$   rn   ro   rp   rq   r%   r   r   r   r&      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=r)   z(connect_timeout=z, read_timeout=z, write_timeout=z, pool_timeout=)r$   r   rf   rn   ro   rp   rq   r*   r   r   r   r,     s&   
zTimeout.__repr__r   )r   r   r   rg   rt   r	   rj   Unionfloatr   r   DictrG   Optionalry   rk   r<   r&   r,   r   r   r   r   rl      s,    
)	rl   c                	   @   sX   e Zd ZdZddddddedededefdd	Zd
ejdefddZ	de
fddZdS )
PoolLimitsaR  
    Limits on the number of connections in a connection pool.

    **Parameters:**

    * **max_keepalive** - Allow the connection pool to maintain keep-alive connections
                       below this point.
    * **max_connections** - The maximum number of concurrent connections that may be
                       established.
    N)max_keepalivemax_connections
soft_limit
hard_limitr   r   r   r   c                C   s@   || _ || _|d ur|| _ td |d ur|| _td d S d S )Nz8'soft_limit' is deprecated. Use 'max_keepalive' instead.z:'hard_limit' is deprecated. Use 'max_connections' instead.)r   r   r   )r   r   r   r   r   r   r   r   r   )  s   zPoolLimits.__init__r    r!   c                 C   r"   r   )r#   r$   r   r   r%   r   r   r   r&   <  r'   zPoolLimits.__eq__c                 C   r(   )Nz(max_keepalive=z, max_connections=r)   )r$   r   r   r   r*   r   r   r   r,   C  s
   zPoolLimits.__repr__)r   r   r   rg   intr   rj   rk   r<   r&   rG   r,   r   r   r   r   r~     s"    
r~   c                   @   sN   e Zd ZddddededefddZd	ed
edefddZdefddZdS )ProxyNDEFAULT)headersmodeurlr   r   c                C   s   t |}t|}|jdvrtd||dvrtd||js%|jr8|d| |j|j |jd d d}|| _	|| _
|| _d S )N)httphttpszUnknown scheme for proxy URL )r   FORWARD_ONLYTUNNEL_ONLYzUnknown proxy mode zProxy-Authorization)usernamerc   )r   r   scheme
ValueErrorr   rc   
setdefaultbuild_auth_header	copy_withr   r   r   )r   r   r   r   r   r   r   r   L  s   

zProxy.__init__r   rc   r!   c                 C   s4   | d| df}td|  }d| S )Nzutf-8   :zBasic )encoder   joindecodestrip)r   r   rc   userpasstokenr   r   r   r   d  s   
zProxy.build_auth_headerc                 C   s&   dt | jdt| jd| jdS )Nz
Proxy(url=z
, headers=z, mode=r)   )rG   r   dictr   r   r1   r   r   r   r,   i  s   zProxy.__repr__)	r   r   r   r
   r   rG   r   r   r,   r   r   r   r   r   K  s    
r   g      @)rr   
   d   )r   r      )"rZ   r3   rj   base64r   pathlibr   rh   _modelsr   r   _typesr   r   r	   r
   r   _utilsr   r   r   r   rV   r   r-   r   rt   r   rl   r~   r   DEFAULT_TIMEOUT_CONFIGDEFAULT_POOL_LIMITSDEFAULT_MAX_REDIRECTSr   r   r   r   <module>   s.     ].
&