
    ^f&                    0   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	 ddl
mZ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.    )annotations)deque)partial)BytesIO)time)READWRITEHub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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
   hub
Hub | Nonemax_clientsintc                    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     N/var/www/html/env/lib/python3.11/site-packages/kombu/asynchronous/http/curl.py
<listcomp>z'CurlClient.__init__.<locals>.<listcomp>3   s!    ???qtyy{{???    g      ?)pycurlImportErrorr   super__init__r   	CurlMulti_multisetoptM_TIMERFUNCTION_set_timeoutM_SOCKETFUNCTION_handle_socketrange_curls
_free_listr   _pending_fdssocket_action_socket_actionr   call_repeatedly_timeout_check_timeout_check_trefr   
add_handleremove_handle)r%   r   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)r=   cancelr5   closer.   )r%   _curls     r&   rE   zCurlClient.closeB   sQ     '')))[ 	 	EKKMMMMr(   c                    | j                             |           |                                  |                     d           |S Nr   )r7   append_process_queuer1   )r%   requests     r&   add_requestzCurlClient.add_requestH   sC    W%%%!r(   c                N    | j         D ]}| j                            |           d S rC   )r8   r   remove)r%   fds     r&   _pop_from_hubzCurlClient._pop_from_hubQ   s4    ) 	  	 BHOOB	  	 r(   c                    | j                                         D ][\  }}|t          z  r!| j                            || j        |           |t          z  r!| j                            || j        |           \d S rC   )	r8   itemsr   r   
add_readeron_readabler	   
add_writeron_writable)r%   rO   eventss      r&   _push_to_hubzCurlClient._push_to_hubU   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 rC   )POLL_REMOVEr8   popPOLL_INr   POLL_OUTr	   
POLL_INOUT)r%   eventrO   multidata_pycurls         r&   r3   zCurlClient._handle_socket\   s    G'''TY	b$'''''  '' $	"'*** %	"',,, $u	" -,r(   c                F    | j                             || j                   d S rC   )r   
call_laterr<   )r%   msecss     r&   r1   zCurlClient._set_timeouth   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   )	rP   r.   
socket_allr)   errorargsE_CALL_MULTI_PERFORMrX   _process_pending_requests)r%   rb   ret_excs        r&   r<   zCurlClient._timeout_checkk   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 rC   )	_on_event
CSELECT_INr%   rO   rb   s      r&   rT   zCurlClient.on_readabley   s    ~~b'"4555r(   c                8    |                      ||j                  S rC   )rq   CSELECT_OUTrs   s      r&   rV   zCurlClient.on_writable|   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 rg   )rP   r:   r)   ri   rj   rk   rX   rl   )r%   rO   r_   rb   rm   rn   ro   s          r&   rq   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 rg   )r.   	info_read_processrJ   )r%   q	succeededfailedcurlerrnoreasons          r&   rl   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bufferrK   curl_start_time)r6   r7   r[   popleftHeadersr   r   info_setup_requestr.   r>   )r%   startedr}   rK   r   bufs         r&   rJ   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   rK   r   )rK   coder   r   effective_urlri   )r   r.   r?   r6   rI   r   r~   rE   getinfo	HTTP_CODEEFFECTIVE_URLseekon_readyResponse)r%   r}   r~   r   rb   r   r   r   ri   r   rK   s              r&   ry   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d}ta          |           |j1        j2                   |j*        dk    r6fd}	 |j3        |	            |j4        tk          |                     n3 |j6        tk          |                     n|j*        dk    r	|j.        rJ |j7        aj8        j9        d|j:        pd         }
 |j;        |
           d                    |j7        |j<        pd          } |j=        |           n|+                    j=                   |j>         |j?        |j>                   |j@         |jA        |j@                   |jB        |B                    |           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(   r   c                L    | j         k    r                    d           d S d S rH   )IOCMD_RESTARTREADr   )cmdrb   	reqbuffers    r&   ioctlz(CurlClient._setup_request.<locals>.ioctl  s1    g777!q))))) 87r(   r   )basicdigestr   )Cr/   URLr   urlr   
setdefault
HTTPHEADERrR   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encoder   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%   r}   rK   r   r   rb   r/   methr   r   r   userpwdr   s        `      @r&   r   zCurlClient._setup_request   sG   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:<H7<&&w///SD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   )r   r   r   r   )__name__
__module____qualname____doc__r   r,   rE   rL   rP   rX   r)   r3   r1   r<   rT   rV   rq   rl   rJ   ry   r   __classcell__)rA   s   @r&   r   r   $   st       D5 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   
__future__r   collectionsr   	functoolsr   ior   r   kombu.asynchronous.hubr   r	   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     " " " " " "                         C C C C C C C C C C C C & & & & & & - - - - - -      MMM  ~}	 LL  ( ( (#''F'TLLL( 7 	88899}% }% }% }% }% }% }% }% }% }%s    A& &A43A4