K iHadZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddl mZmZddlmZmZmZmZmZddlmZdd lmZmZmZmZmZddlZej<rdd lmZm Z ejBd Z"ejFd Z$Gd deZ%GddeZ&e'dk(rejPe%eyy)z5Non-blocking HTTP client implementation using pycurl.N)BytesIO)httputil)ioloop)utf8 native_str) HTTPRequest HTTPResponse HTTPErrorAsyncHTTPClientmain)app_log)DictAnyCallableUnionOptional)DequeTupleztornado.curl_httpclients | c eZdZ d&dedeeeefddffd Zd'fd Z de de e gdfddfd Z d ed ed ed eddf dZdeddfdZd ededdfdZd'dZd'dZd'dZd'dZ d(dej.deedeeddfdZdeddfdZdej.fdZdej.de dedej:ddf dZdej:d e egdfd!eddfd"Zd#ed$eddfd%Z xZ!S))CurlAsyncHTTPClientN max_clientsdefaultsreturnct||tj|_|jj tj |j|jj tj|jt|Dcgc]}|jc}|_ |jdd|_ tj|_i|_d|_t'j(|j*d|_|j,j/tj0}|jj3||jj5|ycc}w)N)r)super initializepycurl CurlMulti_multisetoptM_TIMERFUNCTION _set_timeoutM_SOCKETFUNCTION_handle_socketrange _curl_create_curls _free_list collectionsdeque _requests_fds_timeoutrPeriodicCallback_handle_force_timeout_force_timeout_callbackstartCurl add_handle remove_handle)selfrridummy_curl_handle __class__s ]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/tornado/curl_httpclient.pyrzCurlAsyncHTTPClient.initialize4s% H-&&(  61143D3DE 622D4G4GH49+4FGqt((*G ++a.       (.'>'>  & &( $ $$**,#KKM 01 !!"341Hs FcJ|jj|j%|jj |j|j D]}|j |jj t|d|_d|_yN) r1stopr.io_loopremove_timeoutr(closer r)r6curlr9s r:r@zCurlAsyncHTTPClient.closeVs{ $$))+ == $ LL ' ' 6KK D JJL     (,$ requestcallbackc|jj|||jjf|j |j dyNr)r,appendr>time_process_queuer#)r6rCrDs r: fetch_implzCurlAsyncHTTPClient.fetch_implesD w$,,2C2C2EFG  !rBeventfdmultidatac tjtjjtj tjj tjtjjtjtjj tjjzi}|tjk(r8||jvr)|jj||j|=yy||}||jvr|jj||jj||j|||j|<y)z_Called by libcurl when it wants to change the file descriptors it cares about. N)r POLL_NONErIOLoopNONEPOLL_INREADPOLL_OUTWRITE POLL_INOUT POLL_REMOVEr-r>remove_handler add_handler_handle_events)r6rKrLrMrN event_map ioloop_events r:r%z"CurlAsyncHTTPClient._handle_socketls   fmm00 NNFMM.. OOV]]00   v}}11FMM4G4GG  F&& &TYY ++B/IIbM%U+LTYY ++B/ LL $ $R)<)r? add_timeoutrH_handle_timeout)r6r^s r:r#z CurlAsyncHTTPClient._set_timeoutsY == $ LL ' ' 6 00 LL   %&. 0$2F2F  rBeventscd}|tjjzr|tjz}|tjj zr|tj z} |jj||\}}|tjk7rn5|jy#tj$r}|jd}Yd}~Md}~wwxYw)zXCalled by IOLoop when there is activity on one of our file descriptors. rN) rrQrTr CSELECT_INrV CSELECT_OUTr socket_actionerrorargsE_CALL_MULTI_PERFORM_finish_pending_requests)r6rLrbactionret num_handleses r:r[z"CurlAsyncHTTPClient._handle_eventss FMM&& & f'' 'F FMM'' ' f(( (F #';;#<# $E7H # T" #(0 3$ff T662 3z rBc d}|jr|jr|dz }|jj}|jj\}}}t j t |||tj|jjjd|_ |j|||jd|jd|jj||jr|jr|sy##t$r9}|jj||t!|d|Yd}~\d}~wwxYw)Nr)headersbufferrCrDqueue_start_timecurl_start_timecurl_start_ioloop_timerrW)rCcoderg)r)r,poppopleftr HTTPHeadersrrHr>currentinfo_curl_setup_requestr r4 ExceptionrGr )r6startedrArCrDrrns r:rIz"CurlAsyncHTTPClient._process_queues3G//dnn1 **,8<8N8N8P5($4 (335%i& ((8'+yy{.2ll.B.B.D.I.I.K 1,, (+ ), $KK**40C//dnnFM.! OOO**40\'1MNN Os=.D%% E'./E""E'rA curl_error curl_messagecv|j}d|_|jj||jj ||d}|r5|Jt ||}|J|j }d}|jd}nQd}|jtj}|jtj}|jdt|d|dz |jtj|jtj|jtj |jtj"|jtj$|jtj&|jtj(} |dt+|d||d||||dj-d d|j.j1|dz |d | y#t2$r|j5|dYywxYw) Nrrrr)queue namelookupconnect appconnect pretransfer starttransfertotalredirectrDrCrz X-Http-Reasonr) rCrrr effective_urlrgreason request_time start_time time_info)rr r5r)rG CurlErrorrr@getinfor HTTP_CODE EFFECTIVE_URLseekdictNAMELOOKUP_TIME CONNECT_TIMEAPPCONNECT_TIMEPRETRANSFER_TIMESTARTTRANSFER_TIME TOTAL_TIME REDIRECT_TIMEr getr>rHrhandle_callback_exception) r6rArrrrrgrrrs r:rwzCurlAsyncHTTPClient._finishs yy  !!$' t$h + ++j,7E$ $$::D M LLNFE<< 0 01D LL)=)=>M KKN/048J3KK||F$:$:;LL!4!45||F$:$:; V%<%<=,,v'@'@A,,v001\\&"6"67   = D  O O!"/ ?..E!%!2!2!4t.> ?  K  KK((&*;*;f>P>P*P Q KK..0A0AFDVDV0V W rBrrc  jtjtjdj vrdj d<dj vrdj d<j j Dcgc]<\}}dt|jdt|jdfz>}}}|D]%}tj|std|zjtj|jtjtjj|j j"r!dt$t&t(fd t*ffd } n |j,} jtj.| jtj0j2jtj4j6j8Jjtj:t+d j8zj<Jjtj>t+d j<zj@r4jtjBtj@n jtjBd jDr*jtjFjDjHr!jtjJd n jtjJdjLrejNrXjtjPjLjtjRjNjTrXjVJtYjZjTjV} jtj\| j^j^dk(r/jtj`tjbnj^dk(r/jtj`tjdnWtdj^z jgtjPjgtj\jjrAjtjldjtjndn@jtjldjtjndjp+jtjrjpn jtdur/jtjvtjxn.jtjvtjztj|tj~tjtjd} hd} | jD]} j| dj| vr?jgtjj| jdn]jsj| vr+jtjjntdjzjdv}jdu}js(|r|r|r"|s td|rdnddjd|s|r3jdk(r tdttjxsdd t*d dffd! }jtjjjtj|jd"k(r8jtjtjxsdnWjtjdjtjtjxsdj/jJjjdk(r/jtjtjbnVjdk(r/jtjtjdntd#jztYjZjj}jtj|tjd$jjjnJjgtjtjd%jjj*jtjjj*jtjjj td&tjdkDr jtjdjjyycc}}w#th$r$jtjPdY|wxYw)'NExpectPragmas%s: %sASCIIz ISO8859-1z+Illegal characters in header (CR or LF): %rbrcjJjjj|t|Sr<)streaming_callbackr> add_callbacklen)rrCr6s r:write_functionz?CurlAsyncHTTPClient._curl_setup_request..write_functionss811=== ))'*D*DaH1v rBrz Mozilla/5.0 (compatible; pycurl)z gzip,deflatebasicdigestzUnsupported proxy_auth_mode %sr~rF)GETPOSTPUTHEAD>PATCHDELETEOPTIONSTzunknown method )rrrz Body must znot zbe None for method z+ (unless allow_nonstandard_methods is true)rz!Body must be None for GET requestcmdcH|jk(rjdyyrF)IOCMD_RESTARTREADr)rrArequest_buffers r:ioctlz6CurlAsyncHTTPClient._curl_setup_request..ioctls$$000"''*1rBrzUnsupported auth_mode %sz%s %s (username: %r)%s %sz,ssl_options not supported in curl_httpclient)`r!rURLrurlrget_allencode CR_OR_LF_REsearch ValueError HTTPHEADERHEADERFUNCTION functoolspartial_curl_header_callbackheader_callbackrrbytes bytearrayintwrite WRITEFUNCTIONFOLLOWLOCATIONfollow_redirects MAXREDIRS max_redirectsconnect_timeoutCONNECTTIMEOUT_MSrequest_timeout TIMEOUT_MS user_agent USERAGENTnetwork_interface INTERFACEdecompress_responseENCODING proxy_host proxy_portPROXY PROXYPORTproxy_usernameproxy_passwordrencode_username_password PROXYUSERPWDproxy_auth_mode PROXYAUTHHTTPAUTH_BASICHTTPAUTH_DIGESTunsetopt TypeError validate_certSSL_VERIFYPEERSSL_VERIFYHOSTca_certsCAINFO allow_ipv6 IPRESOLVE IPRESOLVE_V4IPRESOLVE_WHATEVERHTTPGETrUPLOADNOBODYvaluesmethod CUSTOMREQUESTallow_nonstandard_methodsKeyErrorbodyrr READFUNCTIONread IOCTLFUNCTION POSTFIELDSIZEr INFILESIZE auth_username auth_password auth_modeHTTPAUTHUSERPWDrdebug client_certSSLCERT client_keySSLKEY ssl_options threading active_countNOSIGNALprepare_curl_callback)r6rArCrrkvencoded_headersliner credentials curl_optionscustom_methodso body_expected body_presentruserpwdrs``` @r:rz'CurlAsyncHTTPClient._curl_setup_requestIs FJJ 7;; 78 7?? *(*GOOH % 7?? *(*GOOH %  //1 1 !}##G,jm.B.B;.OP Q  $ WD!!$' !NQU!UVV W F%%7  ! !   **GW5L5L   % % %y(8"9 c  $\\N F((.9 F))7+C+CD F$$g&;&;<&&222 F,,c$9P9P2P.QR&&222 F%%s4'2I2I+I'JK    KK((*W5G5G*H I KK((*L M  $ $ KK(('*C*C D  & & KK 8 KK .   '"4"4 KK g&8&8 9 KK(('*<*< =%%--999&??**G,B,B  F//=&&.'2I2IW2T F,,f.C.CD((H4 F,,f.D.DE 4w7N7NN . fll+ MM&-- .  KK--q 1 KK--q 1 KK--q 1 KK--q 1    ' KK w'7'7 8     & KK((&*=*= > KK((&*C*C D >>KK==MM  8$$& "A KK5 ! " >>\ ) MM&.. / KK W^^4d ;  . .'..N2R KK,,gnn =,w~~=> >*BB ||4/ 00l] "/vB6H L~~& !!DEE$T',,*<"%=>N +3 +4 + KK++^-@-@ A KK,,e 4~~' F00#gll6Hb2IJ FMM40 F--s7<<3E2/FG  ,((4 44  (G,=,=,H FOOV-B-BC""h. FOOV-C-CD !;g>O>O!OPP77%%w'<'<G KK 0 NN& %%   MM&.. ) NN7GNNGKK @    * KK(;(; <    ) KK w'9'9 :    *KL L  ! ! #a ' KK +  ( ( 4  ) )$ / 5y ~ . FLL"- .sAm1m )n  n rheader_line_bytescnt|jd}||jj|||j }|j dr/|j  tj|\}}}d|z}|sy|j|y#tj$rYywxYw)Nlatin1zHTTP/zX-Http-Reason: %s) rdecoder>rrstrip startswithclearrparse_response_start_lineHTTPInputError parse_line)r6rrr6 header_line_version_coders r:rz)CurlAsyncHTTPClient._curl_header_callback s !!2!9!9(!CD  & LL % %o{ C"((*  ! !' * MMO ,4,N,N-)5&2F:  ;' **  s+BB43B4 debug_type debug_msgc0d}|dk(r0t|}tjd|jy|dvr;t|}|j D]}tjd|||y|dk(rtjd|||yy)N)I<>rGrHrz%s)r~rrz%s %r)rrr!strip splitlines)r6rCrD debug_typesr.s r:rzCurlAsyncHTTPClient._curl_debug9s/ ?"9-I NN4!2 3 6 !"9-I!,,. Gw J(?F G 1_ NN7K $;Y GrB) N)rN)NN)"__name__ __module__ __qualname__rrrstrrrr@rrr rJrr%r#r[rar0rjrIrr3rwrr'rrrrrr __classcell__)r9s@r:rr3sJN 5 5/7S#X/G 5  5D ".6 ~t7K.L )C)S))E)d): # $ ((c(d($+: ( 'X%)&* 4=kk4=SM4=sm 4=  4=lK#K$K fkk U0kkU0U0 U0 %% U0  U0n(%%("3%+.(! (  (2 Hc Hc Hd HrBrc eZdZdededdfdZy)rerrnomessagerNc@tj|d|||_y)Nr)r __init__rT)r6rTrUs r:rWzCurlError.__init__Gs4g. rB)rNrOrPrrQrWrBr:rrFscCDrBr__main__))__doc__r*rrrrer'rHiortornadorrtornado.escaperrtornado.httpclientrr r r r tornado.logr typingrrrrr TYPE_CHECKINGrr getLoggerrcompilerrrrN configurerXrBr:rfs <  + 77  # 7  6 7bjj" PH/PHf   zO12FrB