
     h%                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ d	d
lmZ 	 ddlZddlmZ ej        ej        ej        ej        dZn# e$ r	 dxZxZZY nw xY wdZdZ eg d          Z G d de          ZdS )zHTTP Client using pyCurl.    )deque)partial)BytesIO)time)READWRITEget_event_loop)	HttpError)bytes_to_str   )
BaseClientNCurl)GETPOSTPUTHEAD)
CurlClientz Mozilla/5.0 (compatible; pycurl))DELETEOPTIONSPATCHc                        e Zd ZdZeZd fd	Zd Zd Zd Zd Z	e
fd	Zd
 Ze
fdZe
fdZe
fdZe
fdZd Zd Zdde
fdZe
fdZ xZS )r   zCurl HTTP Client.N
   c                     t           t          d          |pt                      }t                                          |           | _        t          j                     _         j                            t           j	         j
                    j                            t           j         j                    fdt          |          D              _         j        d d           _        t!                       _        i  _         j        j         _         j                            d j                   _        t          j                    } j                            |            j                            |           d S )Nz,The curl client requires the pycurl library.c                 8    g | ]}                                 S  r   ).0iselfs     X/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/kombu/asynchronous/http/curl.py
<listcomp>z'CurlClient.__init__.<locals>.<listcomp>1   s!    ???qtyy{{???    g      ?)pycurlImportErrorr	   super__init__max_clients	CurlMulti_multisetoptM_TIMERFUNCTION_set_timeoutM_SOCKETFUNCTION_handle_socketrange_curls
_free_listr   _pending_fdssocket_action_socket_actionhubcall_repeatedly_timeout_check_timeout_check_trefr   
add_handleremove_handle)r   r6   r'   dummy_curl_handle	__class__s   `   r    r&   zCurlClient.__init__'   sK   >LMMM%^%%&&((6143DEEE62D4GHHH????E+,>,>???+aaa.	"k7#'8#;#;$$
 $
 
 #KMM0111!!"344444r"   c                     | j                                          | j        D ]}|                                 | j                                         d S N)r9   cancelr0   closer)   )r   _curls     r    rA   zCurlClient.close@   sQ     '')))[ 	 	EKKMMMMr"   c                     | j                             |           |                                  |                     d           |S Nr   )r2   append_process_queuer,   )r   requests     r    add_requestzCurlClient.add_requestF   sC    W%%%!r"   c                 N    | j         D ]}| j                            |           d S r?   )r3   r6   remove)r   fds     r    _pop_from_hubzCurlClient._pop_from_hubO   s4    ) 	  	 BHOOB	  	 r"   c                     | j                                         D ][\  }}|t          z  r!| j                            || j        |           |t          z  r!| j                            || j        |           \d S r?   )	r3   itemsr   r6   
add_readeron_readabler   
add_writeron_writable)r   rK   eventss      r    _push_to_hubzCurlClient._push_to_hubS   s~    )//++ 	> 	>JB} >##B(8"===~ >##B(8"===		> 	>r"   c                 $   ||j         k    r(|| j        v r| j                            |d            d S d S ||j        k    rt          | j        |<   d S ||j        k    rt          | j        |<   d S ||j        k    rt          t          z  | j        |<   d S d S r?   )POLL_REMOVEr3   popPOLL_INr   POLL_OUTr   
POLL_INOUT)r   eventrK   multidata_pycurls         r    r.   zCurlClient._handle_socketZ   s    G'''TY	b$'''''  '' $	"'*** %	"',,, $u	" -,r"   c                 F    | j                             || j                   d S r?   )r6   
call_laterr8   )r   msecss     r    r,   zCurlClient._set_timeoutf   s#    E4#677777r"   c                 `   |                                   	 	 	 | j                                        \  }}n)# t          j        $ r}|j        d         }Y d }~nd }~ww xY w||j        k    rnT	 |                                  n# |                                  w xY w|                                  d S Nr   r   )	rL   r)   
socket_allr#   errorargsE_CALL_MULTI_PERFORMrT   _process_pending_requests)r   r^   ret_excs        r    r8   zCurlClient._timeout_checki   s    		 &![3355FC| & & &(1+CCCCCC&'666 D&&(((((s1   B 5 B AAB AB Bc                 8    |                      ||j                  S r?   )	_on_event
CSELECT_INr   rK   r^   s      r    rP   zCurlClient.on_readablew   s    ~~b'"4555r"   c                 8    |                      ||j                  S r?   )rm   CSELECT_OUTro   s      r    rR   zCurlClient.on_writablez   s    ~~b'"5666r"   c                 Z   |                                   	 	 	 |                     ||          \  }}n)# t          j        $ r}|j        d         }Y d }~nd }~ww xY w||j        k    rnQ	 |                                  n# |                                  w xY w|                                  d S rc   )rL   r5   r#   re   rf   rg   rT   rh   )r   rK   r[   r^   ri   rj   rk   s          r    rm   zCurlClient._on_event}   s    		 &!00U;;FC| & & &(1+CCCCCC&'666 D&&(((((s1   A> 2 A> AAA> AA> >Bc                     	 | j                                         \  }}}|D ]}|                     |           |D ]\  }}}|                     |||           |dk    rn_|                                  d S rc   )r)   	info_read_processrF   )r   q	succeededfailedcurlerrnoreasons          r    rh   z$CurlClient._process_pending_requests   s    	#';#8#8#:#: Ay&! $ $d####'- 3 3#eVdE62222Avv	 	r"   c                    	 d}| j         r| j        r|dz  }| j                                         }| j                                        }|                                 }t                      }|||t                      d|_        |                     ||||           | j	        
                    |           | j         r| j        |sd S )Nr   r   )headersbufferrG   curl_start_time)r1   r2   rW   popleftHeadersr   r   info_setup_requestr)   r:   )r   startedry   rG   r}   bufs         r    rF   zCurlClient._process_queue   s    	G/ -dm -1**,,-//11,,..ii&!&'+vv	 	 ##D'3@@@&&t,,, / -dm -  #	r"   c           
         |j         d c}|_         | j                            |           | j                            |           |d         }|r2d}t          ||          }||_        d }	|                                 d }nKd }|                    |j	                  }|                    |j
                  }	|                    d           |d         }
|
                    |                     |
||d         ||	|                     d S )Nr~   iW  r   rG   r}   )rG   coder}   r~   effective_urlre   )r   r)   r;   r1   rE   r
   rz   rA   getinfo	HTTP_CODEEFFECTIVE_URLseekon_readyResponse)r   ry   rz   r{   r^   r   r~   r   re   r   rG   s              r    ru   zCurlClient._process   s   )Tdi!!$'''t$$$h 	DdF++EEK MLLNNNFFE<< 122D LL)>??MKKNNNy/$Ye ' 
 
 	 	 	 	 	r"   c                 
	   |j         } |j        t          |j                             |j                            dd           |j                            dd            |j        d |j                                        D                         |j        t          |j
        p| j
        |j                              |j        |j        p|j                    |j        |j                    |j        t          |j        pt$                               |j        r |j        |j                    |j        |j        rdnd           |j        rz|j        st3          d           |j        |j                    |j        |j                   |j        r1 |j        d                    |j        |j        pd                      |j         |j!        rd	nd
            |j"        |j!        rdnd
           |j#         |j$        |j#                    |j%        tL          j'                   tP          )                                D ]} ||d           	 tP          |j*                 }|+                    j,                    ||d           n0# tZ          $ r# |                     j,        |j*                   Y nw xY w|j*        dv r|j.        r|j.        /                    d          nta                      }tc          |           |j2        j3                   |j*        dk    r6fd}	 |j4        |	            |j5        tm          |                     n3 |j7        tm          |                     n|j*        dk    r	|j.        rJ |j8        aj9        j:        d|j;        pd         }
 |j<        |
           d                    |j8        |j=        pd          } |j>        |           n|+                    j>                   |j?         |j@        |j?                   |jA         |jB        |jA                   |jC        |C                    |           d S d S )NExpect Pragmac                 "    g | ]} d j         | S )z{}: {})format)r   hs     r    r!   z-CurlClient._setup_request.<locals>.<listcomp>   s!    BBBQ_X_a BBBr"   zgzip,deflatenonez)Request with proxy_host but no proxy_portz{}:{}r   r      FT)r   r   zutf-8r   c                 L    | j         k    r                    d           d S d S rD   )IOCMD_RESTARTREADr   )cmdr^   	reqbuffers    r    ioctlz(CurlClient._setup_request.<locals>.ioctl  s1    g777!q))))) 87r"   r   )basicdigestr   )Dr*   URLr   urlr}   
setdefault
HTTPHEADERrN   HEADERFUNCTIONr   	on_headerWRITEFUNCTION	on_streamwriteFOLLOWLOCATIONfollow_redirects	USERAGENT
user_agentDEFAULT_USER_AGENTnetwork_interface	INTERFACEENCODINGuse_gzip
proxy_host
proxy_port
ValueErrorPROXY	PROXYPORTproxy_usernamePROXYUSERPWDr   proxy_passwordSSL_VERIFYPEERvalidate_certSSL_VERIFYHOSTca_certsCAINFO	IPRESOLVEr#   IPRESOLVE_WHATEVERMETH_TO_CURLvaluesmethodunsetoptCUSTOMREQUESTKeyErrorbodyencodebytesr   READFUNCTIONreadIOCTLFUNCTIONPOSTFIELDSIZElen
INFILESIZEauth_usernameHTTPAUTH_BASICHTTPAUTH_DIGEST	auth_modeHTTPAUTHauth_passwordUSERPWDclient_certSSLCERT
client_keySSLKEY
on_prepare)r   ry   rG   r~   r}   r^   r*   methr   r   r   userpwdr   s        `      @r    r   zCurlClient._setup_request   sK   w{L55666 	""8R000""8R000BB'/*?*?*A*ABBB	
 	
 	

 	"G%7II	
 	
 	
 	!7#4#D	
 	
 	
 	"G$<	
 	
 	
 	+A/ABB	
 	
 	
 $ 	AF7$g&?@@@0@Lnnf	
 	
 	
  	K% N !LMMMF7='"4555F7$g&8999% Kw+W^^*G,B,Hb.J .J K K K 	w%G,A'HqqqIIIw%G,A'HqqqIII'F7>7#3444w &";<<< '')) 	  	 DF4	/D MM'/000F4	  	? 	? 	?KK-w~>>>>>	? >_,,3:<L7<&&w///UWWDIF7'888~''* * * * * * w,e444w,c$ii8888w)3t995555^u$$|### , /!1  *7,I F7#Y///nn%w'<'B G F7?G,,,,MM'/****F7?G$7888)F7>7#5666)t$$$$$ *)s   /J( (*KK)Nr   )__name__
__module____qualname____doc__r   r&   rA   rH   rL   rT   r#   r.   r,   r8   rP   rR   rm   rh   rF   ru   r   __classcell__)r=   s   @r    r   r   "   so       D5 5 5 5 5 52         > > > >D 
- 
- 
- 
-8 8 8 &, ) ) ) ) '- 6 6 6 6 '- 7 7 7 7 ,2 ) ) ) )	 	 	  ( $(f    0 FL ]% ]% ]% ]% ]% ]% ]% ]%r"   r   )r   collectionsr   	functoolsr   ior   r   kombu.asynchronous.hubr   r   r	   kombu.exceptionsr
   kombu.utils.encodingr   baser   r#   r   HTTPGETr   UPLOADNOBODYr   r$   __all__r   	frozensetEXTRA_METHODSr   r   r"   r    <module>r      s~                             > > > > > > > > > > & & & & & & - - - - - -      MMM  ~}	 LL  ( ( (#''F'TLLL( 7 	88899}% }% }% }% }% }% }% }% }% }%s   A A,+A,