
    tcH0                        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mZ d	                    g d
          Z ee          Z G d d          Z e            Z	 	 	 	 d"dej        e         dedededej        f
dZ G d d          Z  G d d          Z! G d d          Z" G d d          Z# e!d          Z$ e"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
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                       e Zd ZdS )	UnsetTypeN)__name__
__module____qualname__     //usr/lib/python3/dist-packages/httpx/_config.pyr   r   &   s        Dr   r   TFcertverify	trust_envhttp2returnc                 2    t          | |||          j        S )Nr   r   r   r   )	SSLConfigssl_contextr   s       r   create_ssl_contextr!   -   s'     &IU  r   c            	           e Zd ZdZ e ej                              Zddddddej	        e
         deded	efd
Zdej        fdZdej        fdZdej        fdZdej        fdZdej        ddfdZdS )r   z
    SSL Configuration.
    NTFr   r   r   r   r   c                p    || _         || _        || _        || _        |                                 | _        d S N)r   r   r   r   load_ssl_contextr    )selfr   r   r   r   s        r   __init__zSSLConfig.__init__?   s:     	"
0022r   r   c           
          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&   s    r   r%   zSSLConfig.load_ssl_contextM   s    $k$ $I$ $ $ $ Z	$ $	
 	
 	
 ; 	2//111..000r   c                     |                                  }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&   contexts     r   r,   z$SSLConfig.load_ssl_context_no_verifyZ   s@     2244!&!m(((r   c                 .   | j         r | j        du rt                      }||| _        t          | j        t          j                  r| j        }|                     |           |S t          | j        t                    r| j        }nbt          | j                  
                                rt          | j                  }n't          d                    | j                            |                                 }t          j        |_        d|_        t"          j        dk    r	 d|_        n# t(          $ r Y nw xY w	 d|_        n# t(          $ r Y nw xY w|                                rAt.                              d|           |                    t5          |                     nT|                                r@t.                              d|           |                    t5          |          	           |                     |           |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   
isinstancer1   
SSLContextr4   boolDEFAULT_CA_BUNDLE_PATHr   existsIOErrorformatr/   CERT_REQUIREDr3   r0   sysversion_infopost_handshake_authAttributeErrorhostname_checks_common_nameis_filer)   r*   load_verify_locationsstris_dir)r&   	ca_bundler5   ca_bundle_paths       r   r+   z!SSLConfig.load_ssl_context_verifyd   s-    > 	(dkT11.00I$'dk3>22 	kG##G,,,NT** 	!8NN$+%%'' 	!$+..NN##)6$+#6#6  
 2244!/!% v%%.2++!   
	27G// 	 	 	D	 !!## 	FLLKKKLLL))^1D1D)EEEE""$$ 	FLLKKKLLL))^1D1D)EEE(((s$   &D. .
D;:D;?E 
EEc                    t          j        t           j                  }t          |           |xj        t           j        z  c_        |                    t                     t           j        r#| j	        rddgndg}|
                    |           t          j        dk    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h2r7   SSLKEYLOGFILE)r1   r=   PROTOCOL_TLS_CLIENTr   optionsOP_NO_COMPRESSIONset_ciphersDEFAULT_CIPHERSHAS_ALPNr   set_alpn_protocolsrD   rE   osenvirongetr   keylog_filename)r&   r5   alpn_idents
keylogfiles       r   r/   z%SSLConfig._create_default_ssl_context   s    
 .!899#G,,,300O,,,< 	404
L:t,,K&&{333v%%88J 5dn 5*4'r   r    c                 (   | j         t          | j         t                    r|                    | j                    dS t          | j         t                    rGt          | j                   dk    r/|                    | j         d         | j         d                    dS t          | j         t                    rUt          | j                   dk    r?|                    | j         d         | j         d         | j         d                    dS dS dS dS )	zF
        Loads client certificates into our SSLContext object
        N)certfile   r   r   )r`   keyfiler8   )r`   rb   password)r   r<   rK   load_cert_chaintuplelen)r&   r    s     r   r4   zSSLConfig._load_client_certs   s    9 $)S)) 	++TY+?????DIu-- #di..A2E2E++TYq\49UV<+XXXXXDIu-- #di..A2E2E++!Yq\ IaL!Yq\ ,      ! 
 2E2Er   )r   r   r   __doc__r   certifiwherer?   typingOptionalr   r   r>   r'   r1   r=   r%   r,   r+   r/   r4   r   r   r   r   r   8   s,         "T-'-//22
 ,0"3 3 3 oi(3 	3
 3 3 3 3 31#. 1 1 1 1CN    4 4 4 4 4lS^    *cn       r   r   c                   *   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	Z
d
ej        eej        e	         f         fdZdej        d
efdZd
ef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timeoutro   Nrp   rq   rr   c                   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     rd n|d         | _        t          |          dk     rd n|d         | _        d S t          |t                    s]t          |t                    sHt          |t                    s3t          |t                    s|| _        || _        || _        || _        d S t          |t                    rt          d          t          |t                    r|n|| _        t          |t                    r|n|| _        t          |t                    r|n|| _        t          |t                    r|n|| _        d S )Nr   r   r8   ra      zShttpx.Timeout must either include a default, or set all four parameters explicitly.)r<   rm   UNSETro   rp   rq   rr   re   rf   r   
ValueError)r&   rs   ro   rp   rq   rr   s         r   r'   zTimeout.__init__   s    gw'' #	Ie####5====E>>>>5===="?DLDI DJDIII'' 	I"1:DL
DI!$W!1!1wqzDJ #Gq 0 0gajDIIIw	**	I$	**	I %++	I $	**		I #DLDIDJDIII'9--  2   '1)&D&DQ77'DL#-dI#>#>HDDI$.ui$@$@KeDJ#-dI#>#>HDDIIIr   r   c                 8    | j         | j        | j        | j        dS )Nrn   rn   r-   s    r   as_dictzTimeout.as_dict   s%    |IZI	
 
 	
r   otherc                     t          || j                  o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r$   )r<   	__class__ro   rp   rq   rr   r&   rz   s     r   __eq__zTimeout.__eq__  s^    udn-- (-(	UZ'( 
ek)( 	UZ'	
r   c           
          | 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=)r|   r   rf   ro   rp   rq   rr   r&   
class_names     r   __repr__zTimeout.__repr__  s    ^,
diTY?@@AEE ::4<:::: G GDL G GIG G'+zG G:>)G G G	
r   )r   r   r   rg   rv   rj   Unionr	   r   floatr'   DictrK   rk   ry   Anyr>   r~   r   r   r   r   rm   rm      sB         :?,I 9>5:6;5:,I ,I ,IlI56,I dE945	,I
 l4	12,I |D%23,I l4	12,I ,I ,I ,I\
S&/%*@%@A 
 
 
 

FJ 
4 
 
 
 

# 
 
 
 
 
 
r   rm   c                       e Zd ZdZdddddej        e         dej        e         dej        e         fdZd	ej	        d
e
fdZd
ef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_expiryr   r   r   c                0    || _         || _        || _        d S r$   r   )r&   r   r   r   s       r   r'   zLimits.__init__%  s"      /)B& 0r   rz   r   c                     t          || j                  o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r$   )r<   r|   r   r   r   r}   s     r   r~   zLimits.__eq__0  sT    udn-- @$(==@.%2QQ@ %)??		
r   c                 T    | j         j        }| d| j         d| j         d| j         dS )Nz(max_connections=z, max_keepalive_connections=z, keepalive_expiry=r   )r|   r   r   r   r   r   s     r   r   zLimits.__repr__8  sR    ^,
 9 9D,@ 9 9)-)G9 9 $ 59 9 9	
r   )r   r   r   rg   rj   rk   intr   r'   r   r>   r~   rK   r   r   r   r   r   r     s           15:>36	1 	1 	1  -	1 $*?3#7		1
 !/%0	1 	1 	1 	1
FJ 
4 
 
 
 

# 
 
 
 
 
 
r   r   c                       e Zd Zddddedej        ej        eef                  dej        e         fdZ	e
dej        ej        eef                  fd            Zdefd	ZdS )
ProxyN)authheadersurlr   r   c                   t          |          }t          |          }|j        dvrt          d|          |j        s|j        r%|j        |j        f}|                    d d           }|| _        || _        || _	        d S )N)httphttpssocks5zUnknown scheme for proxy URL )usernamerc   )
r   r   schemerw   r   rc   	copy_withr   r   r   )r&   r   r   r   s       r   r'   zProxy.__init__B  s     #hh'"":888DSDDEEE< 	>3< 	>L#,/D---==C	r   r   c                     | j         d n?| j         d                             d          | j         d                             d          fS )Nr   zutf-8r   )r   encoder-   s    r   raw_authzProxy.raw_authX  sH    
 y  D)A,%%g..	!0C0CG0L0LM	
r   c                     | 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(r   )r   rK   r   r   dict)r&   r   url_strauth_strheaders_strs        r   r   zProxy.__repr__a  s    -1Y@	!j))D ]]&)-5%T%%%2=A\Q94#5#5999r999;9999r   )r   r   r   r
   rj   rk   TuplerK   r   r'   propertybytesr   r   r   r   r   r   r   A  s        
 9=04   ofl3845	
 -   , 
&/&,ue|*DE 
 
 
 X
:# : : : : : :r   r   r   )rs   d      )r   r   )NTTF)'rY   r1   rD   rj   pathlibr   rh   _compatr   _modelsr   _typesr   r   r	   r
   r   _urlsr   _utilsr   r   joinrV   r   r)   r   rv   rk   r>   r=   r!   r   rm   r   r   DEFAULT_TIMEOUT_CONFIGDEFAULT_LIMITSDEFAULT_MAX_REDIRECTSr   r   r   <module>r      sk   				 



 



         0 0 0 0 0 0       O O O O O O O O O O O O O O       6 6 6 6 6 6 6 6((   ( 
H			 	 	 	 	 	 	 	 		 (,	 
/)
$  	
 	^   E E E E E E E EPT
 T
 T
 T
 T
 T
 T
 T
n'
 '
 '
 '
 '
 '
 '
 '
T(: (: (: (: (: (: (: (:V !--- rJJJ   r   