zL iR8ddlmZddlZddlZddlZddlZddlmZddlm Z ddl m Z m Z m Z mZmZmZddlZddlmZmZddlmZmZmZmZmZdd lmZej:Zej>d Z ej>d Z!e r Gd d Z"Gdde#Z$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-ej\d"dZ/d#d$dZ0d%dZ1ej\dZ2dZ3ej\dZ4d&dZ5GddZ6Gd d!Z7y)') annotationsN) SimpleCookie)Path) TYPE_CHECKINGAnyLiteralOptionalUnioncast)ffilib) CurlECodeCurlHttpVersionCurlInfoCurlOpt CurlWsFlag)CurlCffiWarningsHTTP/\d\.\d [0-9]{3} (.*)sHTTP/(\d\.\d) ([0-9]{3}) (.*)c@eZdZUded<ded<ded<ded<ded<y) CurlWsFrameintageflagsoffset bytesleftlenN)__name__ __module__ __qualname____annotations__T/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/curl_cffi/curl.pyrrs    r"rc&eZdZdZddfd ZxZS) CurlErrorz$Base exception for curl_cffi packagec:t||g|i|||_yN)super__init__code)selfmsgr*argskwargs __class__s r#r)zCurlError.__init__"s! .t.v.26 r")r)r*zUnion[CurlECode, Literal[0]])rrr__doc__r) __classcell__)r/s@r#r%r%s.77r"r%ilcrtj|}tj||dd}|||y)z ffi callback for curl debug infoNr)r from_handlebuffer)curltype_datasizeclientpcallbacktexts r#debug_functionrA3s4w'H ::dD !! $D UD r"cD|rdnddjfd|DS)u Convert a bytes object to a space-separated hex string, e.g. "0a ff 3c". If uppercase=True, letters will be A–F instead of a–f. z{:02X}z{:02x} c3@K|]}j|ywr')format).0bytefmts r# zbytes_to_hex..Bs3CJJt$3s)join)b uppercaserHs @r# bytes_to_hexrM<s#  (XC 8833 33r"ctdtdtdtdtdt dt di}d}|j|d}|t t fvrTt|d|}t||krd nd }tjj|d t|d ||d y |jd}tjj|d||tttfvr tjjd yy#t$rVt|d|}t||krd nd }tjj|d t|d ||d YywxYw)N*<>z< DATAz> DATAz< SSLz> SSL(z...z [z bytes]:  zutf-8rC) CURLINFO_TEXTCURLINFO_HEADER_INCURLINFO_HEADER_OUTCURLINFO_DATA_INCURLINFO_DATA_OUTCURLINFO_SSL_DATA_INCURLINFO_SSL_DATA_OUTgetrMrsysstderrwritedecodeUnicodeDecodeError)r;r<PREFIXESMAX_SHOW_BYTESprefixhex_strpostfixr@s r#debug_function_defaultrgEs_sCS(8gwHN \\% %F %'<==tO^45D ^3" F82c$i[ '7)2NO T;;w'D JJ  xq/ 0],>@STT   &U! T"4#89GI7bUG JJ  xr#d)IgYwirR S  Ts$A'D AE,+E,ctj|}|jtj||dd||zS)zAffi callback for curl write function, directly writes to a bufferN)r r8r_r9)ptrr=nmembuserdatar9s r#buffer_callbackrlds8__X &F LLC'*+ 4<r"c|syt|S)Nr)r)ss r# ensure_introms  q6Mr"ctj|}|tj||dd}t|}|tk(s |t k(r|S|||zk7rt jdtd||zS)zHffi callback for curl write function, calls the callback python functionNzWrote bytes != received bytes.r2 stacklevel) r r8r9roCURL_WRITEFUNC_PAUSECURL_WRITEFUNC_ERRORwarningswarnr)rir=rjrkr?wrotes r#write_callbackrxsstx(H SZZU+A. /E u E $$1E(E    6TUV 4<r"cg}|}|r=|jtj|j|j}|r=t j ||S)z%Converts curl slist to a python list.)appendr stringr<nextrcurl_slist_free_all)headresultris r# slist_to_listrsK F C  cjj*+hh D! Mr"ceZdZdZdddZddZddZddZddZddZ dd Z d d Z d!d Z d"d#d Z dd Zd"d$dZd%dZd"d$dZd&dZddZd'dZed(dZed)dZddZd*d+dZej6fd,dZd-d.dZy)/Curlz; Wrapper for ``curl_easy_*`` functions of libcurl. Nc|r|ntj|_tj|_tj|_tj|_|xst|_ d|_ d|_ d|_ d|_ d|_tjdd|_||_|j%y)z Parameters: cacert: CA cert path to use, by default, certs from ``certifi`` are used. debug: whether to show curl debug messages. handle: a curl handle instance from ``curl_easy_init``. FNchar[])rcurl_easy_init_curlr NULL_headers_proxy_headers_resolveDEFAULT_CACERT_cacert _is_cert_set _write_handle_header_handle _debug_handle _body_handlenew _error_buffer_debug_set_error_buffer)r+cacertdebughandles r#r)z Curl.__init__s &V3+=+=+?  !hh / !"&#'"&!% WWXs3   r"ctj|jtj|j }|dk7rt jdtd|jr|jyy)NrzFailed to set error bufferr2rq) r_curl_easy_setoptrr ERRORBUFFERrrurvrrrr+rets r#rzCurl._set_error_buffersT##DJJ0C0CTEWEWX !8 MM6TU V ;; JJL r"c|jtjd|jtjdy)zSet debug to Truer TN)setoptrVERBOSE DEBUGFUNCTIONr+s r#rz Curl.debugs( GOOQ' G))40r"c$|jyr'closers r#__del__z Curl.__del__  r"c2|j|g|}||yr') _get_error)r+errcoder-errors r# _check_errorzCurl._check_errors'/$/  K r"c |dk7r|tj|jjd}dj |Dcgc] }t |c}}t d|d|d|dtt| Sycc}w) Nrbackslashreplace)errorsrCz Failed to z , curl: (z) zK. See https://curl.se/libcurl/c/libcurl-errors.html first for more details.)r*) r r{rr`rJstrr%r r)r+rr-errmsgaactions r#rzCurl._get_errors a<ZZ 2 23::BT:UFXXt4!s1v45FVHIgYbA)W-   4sBcF dddddd}|j|dzdz}|dk(s|dk(rtj||}n|tjk(r[tj |}||_tj|jtjtjn@|tjk(r[tj |}||_ tj|jtjtjn|tjk(rktj |}||_tj|jtjtjtj}nT|tjk(rjtj |}||_ tj|jtjtjtj}n|tj k(rt|durt"}tj |}||_tj|jtj tj&tj(}nP|dk(r=t+|t,r|j/n|}|tj0k(r||_nt5d||tj6k(rY|D]'}tj8|j:||_)tj|j||j:}n|tj<k(rX|D]'}tj8|j>||_)tj|j||j>}n|tj@k(rx|D]G} t+| t,r| j/} tj8|jB| |_!Itj|j||jB}n!tj|j||}|jE|d |||tjFk(rd|_$|S) aWrapper for ``curl_easy_setopt``. Args: option: option to set, using constants from CurlOpt enum value: value to set, strings will be handled automatically Returns: 0 if no error, see ``CurlECode``. long*zchar*zvoid*int64_t*)r'i Ni0ui@rTzOption unsupported: r)%r\r rr WRITEDATA new_handlerrrr WRITEFUNCTIONrl HEADERDATArHEADERFUNCTIONrxrrgrrA DEBUGDATA isinstancerencode POSTFIELDSrNotImplementedError HTTPHEADERcurl_slist_appendr PROXYHEADERrRESOLVErrCAINFOr) r+optionvalue input_option value_typec_valueheaderr proxy_headerresolves r#rz Curl.setopts "%%v%&?@  J*$<ggj%0G w(( (nnU+G!(D   ! ! G1133F3F w)) )nnU+G")D   ! ! G22C4G4G w,, ,nnU+G!(D   ! !$**g.C.CSEWEW X&&F w-- -nnU+G")D   ! ! G22C4F4F ''F w,, ,}.nnU+G!(D   ! !$**g.C.CSEWEW X&&F 7 "(25#(>ellnEG+++$+!%(>r")rSFN)rrrboolreturnNoner)r*)rrr-rr)r*)rrr-r)rrrrr)r)rrr)zUnion[bytes, int, float, list])r)bytes)T)rrrr(r)r)rr(r)r*)r)r)r)r)r list[bytes]r)r)rr,r)r,)rr,r)z"tuple[CurlHttpVersion, int, bytes])i)rrr)ztuple[bytes, CurlWsFrame])r r,rrr)r)ir")r*rr&r,r)r)rrrr0r)rrrrrrrrrrrrrrrr staticmethodrrrrrBINARYr"r'r!r"r#rrs!,1  Wr!>F.  74*0+ ! (( 11,!60;E:K:K&?r"rcpeZdZdZd d dZddddd d dZed dZd ddZddZ dd Z y)CurlMimez#Wrapper for the ``curl_mime_`` API.Nc|r|n t|_tj|jj|_y)z? Args: curl: Curl instance to use. N)rrrcurl_mime_init_form)r+r:s r#r)zCurlMime.__init__ s- "Ttv '' (8(89 r") content_typefilename local_pathr<cptj|j}tj||j }|dk7r t d|4tj ||j }|dk7r t d|4tj||j }|dk7r t d|r |r t d|t|tr t|}n#t|tr|j}n|}t|jstd|tj||j }|dk7r t d|Jt|tst|j }tj ||t#|}yy)aAdd a mime part for a mutlipart html form. Note: You can only use either local_path or data, not both. Args: name: name of the field. content_type: content_type for the field. for example: ``image/png``. filename: filename for the server. local_path: file to upload on local disk. data: file content to upload. rzAdd field failed.Nz1Can not use local_path and data at the same time.zFile not found at )rcurl_mime_addpartr4curl_mime_namerr%curl_mime_typecurl_mime_filenamerrrr,r`existsFileNotFoundErrorcurl_mime_filedatacurl_mime_datar) r+namer5r6r7r<partrlocal_path_strs r#addpartzCurlMime.addparts($$TZZ0  t{{}5 !8/0 0  #$$T<+>+>+@ACax 344  ((x/@ACax 344 $OP P  !*d+!$ZJ.!+!2!2!4!+'..0'*<^ras4" %EELL"2::;<=>7 7 !!  4T>   w?w?t \\r"