o
    Þ­jã/  ã                   @  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   úJ/var/www/html/CropPilot/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 | ¡ 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   Ú
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	ƒrˆt
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*
-