
    6j                     $   d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
Z
ddlZddlZddlmZmZ erddlmZ  ej        e          Z e            Z G d	 d
          Z G d d          Zg dZdeez  dej        fdZ G d d          ZdS )zPTemporary HTTP client for 'backend=duckduckgo'. Delete when HttpClient is fixed.    N)SystemRandom)TracebackType)TYPE_CHECKINGAny   )DDGSExceptionTimeoutException)Callablec                   .    e Zd ZdZdZdedededdfdZdS )	ResponsezHTTP response.)contentstatus_codetextr   r   r   returnNc                 0    || _         || _        || _        d S )Nr   r   r   )selfr   r   r   s       S/root/.hermes/hermes-agent/venv/lib64/python3.11/site-packages/ddgs/http_client2.py__init__zResponse.__init__   s    &			    )	__name__
__module____qualname____doc__	__slots__intbytesstrr    r   r   r   r      sO        2IC % s t      r   r   c                       e Zd ZdZ	 	 	 ddddeeef         dz  dedz  dedz  d	eez  d
df
dZde	de	d
e
fdZde	de	d
e
fdZde	de	d
e
fdZdS )HttpClient2zTemporary HTTP client.N
   Tverifyheadersproxytimeoutr$   r   c                h    t          j        ||||rt          |          nddd          | _        dS )a  Initialize the HttpClient object.

        Args:
            headers (dict, optional): headers for the HTTP client.
            proxy (str, optional): proxy for the HTTP client, supports http/https/socks5 protocols.
                example: "http://user:pass@example.com:3128". Defaults to None.
            timeout (int, optional): Timeout value for the HTTP client. Defaults to 10.
            verify: (bool | str):  True to verify, False to skip or str path to a PEM file. Defaults to True.

        r#   FT)r%   r&   r'   r$   follow_redirectshttp2N)httpxClient_get_random_ssl_contextclient)r   r%   r&   r'   r$   s        r   r   zHttpClient2.__init__%   sH    $ l=CN*&9999"
 
 
r   argskwargsc                 d   t                      5  	  | j        j        |i |}t          |j        |j        |j                  cddd           S # t          $ rH}d| v rd|}t          |          |t          |          j
         d|}t          |          |d}~ww xY w# 1 swxY w Y   dS )z"Make a request to the HTTP client.r   Nz	timed outzRequest timed out: z: )Patchr.   requestr   r   r   r   	Exceptionr	   typer   r   )r   r/   r0   respexmsgs         r   r3   zHttpClient2.request@   s    WW 		1 		11*t{*D;F;;D,<dlY]Ybccc		1 		1 		1 		1 		1 		1 		1 		1  1 1 1R'))666C*3//R7b*44b44#C((b01			1 		1 		1 		1 		1 		1 		1 		1 		1 		1s/   B%2A
B"ABB""B%%B),B)c                       | j         |ddi|S )z&Make a GET request to the HTTP client.methodGETr3   r   r/   r0   s      r   getzHttpClient2.getM   s    t|T:%:6:::r   c                       | j         |ddi|S )z'Make a POST request to the HTTP client.r:   POSTr<   r=   s      r   postzHttpClient2.postQ   s    t|T;&;F;;;r   )NNr"   )r   r   r   r   dictr   r   boolr   r   r   r3   r>   rA   r   r   r   r!   r!   "   s          *.  	
 "
 
 
c3h$&
 Tz
 t	
 s

 

 
 
 
61S 1C 1H 1 1 1 1; ; ; ; ; ; ;<# < < < < < < < <r   r!   )TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-ECDSA-CHACHA20-POLY1305ECDHE-RSA-AES128-GCM-SHA256ECDHE-RSA-CHACHA20-POLY1305ECDHE-ECDSA-AES256-GCM-SHA384ECDHE-RSA-AES256-GCM-SHA384rG   rH   rI   rJ   rK   rL   zECDHE-ECDSA-AES128-SHA256zECDHE-RSA-AES128-SHA256zECDHE-ECDSA-AES256-SHA384zECDHE-RSA-AES256-SHA384zECDHE-ECDSA-AES128-SHAzECDHE-RSA-AES128-SHAzAES128-GCM-SHA256zAES128-SHA256z
AES128-SHAzECDHE-RSA-AES256-SHAzAES256-GCM-SHA384zAES256-SHA256z
AES256-SHAzDES-CBC3-SHAr$   r   c                    t          j        t          | t                    r| nd           }t                              t          dd          t          t                    dz
            }|                    d	                    t          d d         |z                        d d d d g}t          
                    |          }|r ||           |S )N)cafile	   :c                 B    t          | dt          j        j                  S )Nmaximum_version)setattrssl
TLSVersionTLSv1_2contexts    r   <lambda>z)_get_random_ssl_context.<locals>.<lambda>l       ):CN<RSS r   c                 B    t          | dt          j        j                  S )Nminimum_version)rS   rT   rU   TLSv1_3rW   s    r   rY   z)_get_random_ssl_context.<locals>.<lambda>m   rZ   r   c                 H    t          | d| j        t          j        z            S )Noptions)rS   r_   rT   OP_NO_TICKETrW   s    r   rY   z)_get_random_ssl_context.<locals>.<lambda>n   s    GOcFV4VWW r   )rT   create_default_context
isinstancer   randomsampleDEFAULT_CIPHERSlenset_ciphersjoinchoice)r$   ssl_contextshuffled_cipherscommandsrandom_commands        r   r-   r-   f   s    ,jQT>U>U4_FF[_```K}}_QRR%8#o:N:NQR:RSSCHH_RaR%8;K%KLLMMMSSSSWW	?H ]]8,,N ${###r   c            	       X    e Zd ZdZd	dZ	 	 	 d
dee         dz  dedz  dedz  ddfdZdS )r2   z7Patch the HTTP2Connection._send_connection_init method.r   Nc                     dt           j        j        j        dt           j        ddfd}t           j        j        j        j        | _        |t           j        j        j        _        dS )zEnter the context manager.r   r3   r   Nc                 ~   t           j                            dt           j        j        j        t
                              dd          t           j        j        j        t
                              dd          t           j        j        j        t
                              dd          t           j        j        j	        t
                              dd          t           j        j        j
        t
                              dd	          t           j        j        j        t
                              d
d          t           j        j        j        t
                              d
d          i          | j        _        | j                                         | j                            d           |                     |           d S )NTd      i  i  i @  i  i  i r   r   )r.   initial_valuesi   )h2settingsSettingsSettingCodesINITIAL_WINDOW_SIZErc   randintHEADER_TABLE_SIZEMAX_FRAME_SIZEMAX_CONCURRENT_STREAMSMAX_HEADER_LIST_SIZEENABLE_CONNECT_PROTOCOLENABLE_PUSH	_h2_statelocal_settingsinitiate_connectionincrement_flow_control_window_write_outgoing_data)r   r3   s     r   _send_connection_initz.Patch.__enter__.<locals>._send_connection_init|   s9   ,.K,@,@K,@&..QTVYBZBZK,>tUY@Z@ZK,;V^^ESX=Y=YK,CV^^TWY\E]E]K,A6>>RWY^C_C_K,DfnnUVXYFZFZK,8&..A:N:N  -A - -DN) N..000N88???%%g.....r   )httpcore_syncr*   HTTP2ConnectionRequestr   original_send_connection_init)r   r   s     r   	__enter__zPatch.__enter__y   sc    	/(<(L 	/W_Wg 	/lp 	/ 	/ 	/ 	/" .6^-A-Q-g*EZ,BBBr   exc_typeexc_valexc_tbc                 F    | j         t          j        j        j        _        dS )zExit the context manager.N)r   r   r   r*   r   r   )r   r   r   r   s       r   __exit__zPatch.__exit__   s     FJEg,BBBr   )r   N)NNN)	r   r   r   r   r   r5   BaseExceptionr   r   r   r   r   r2   r2   v   s        AA[ [ [ [2 04(,'+	h h}%,h %h $	h
 
h h h h h hr   r2   )r   loggingrT   rc   r   typesr   typingr   r   rt   r   r+   
exceptionsr   r	   collections.abcr
   	getLoggerr   loggerr   r!   re   rC   r   
SSLContextr-   r2   r   r   r   <module>r      s   V V  



             % % % % % % % % 				   7 7 7 7 7 7 7 7 )(((((( 
	8	$	$	       1< 1< 1< 1< 1< 1< 1< 1<j  tcz cn     !h !h !h !h !h !h !h !h !h !hr   