+
    '(j0i                       ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHt ^ RIt^ RIt^RIHtHt ^RIHtHtHtHtHt ^RIHt R	 R
 lt]! 4       t]P@                  ! R4      t!]P@                  ! R4      t"]'       d    ! R R4      t# ! R R]$4      t%^ t&^t'^t(^t)^t*^t+^t,Rt-Rt.Rt/Rt0]Pb                  ! 4       R R l4       t2R%R R llt3R R lt4]Pb                  ! 4       R 4       t5R t6]Pb                  ! 4       R 4       t7]Pb                  ! 4       R 4       t8]Pb                  ! 4       R 4       t9R R  lt: ! R! R"4      t; ! R# R$4      t<R# )&    )annotationsN)SimpleCookie)Path)TYPE_CHECKINGAnyLiteralcast)ffilib)	CurlECodeCurlHttpVersionCurlInfoCurlOpt
CurlWsFlag)CurlCffiWarningc                   V ^8  d   QhRR/# )   returnstr )formats   "C/home/ubuntu/cf-venv/lib/python3.14/site-packages/curl_cffi/curl.py__annotate__r      s           c                    R FU  p \         P                  P                  V 4      pV'       g   K,  \         P                  P	                  V4      '       g   KS  Vu # 	  \
        P                  ! 4       pVP                  '       d<   \         P                  P	                  VP                  4      '       d   VP                  # \        P                  ! 4       # )SSL_CERT_FILE)r   CURL_CA_BUNDLEREQUESTS_CA_BUNDLE)
osenvirongetpathexistssslget_default_verify_pathscafilecertifiwhere)env_varr"   defaultss      r   _default_cacertr+      s    Lzz~~g&4BGGNN4((K M ++-H277>>(//:: ==?r   s   HTTP/\d\.\d [0-9]{3} (.*)s   HTTP/(\d\.\d) ([0-9]{3}) (.*)c                  J    ] tR t^,t$ R]R&   R]R&   R]R&   R]R&   R]R&   RtR# )	CurlWsFrameintageflagsoffset	bytesleftlenr   N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r   r   r   r-   r-   ,   s    
r   r-   c                  6   a  ] tR t^4tRtRR V 3R llltRtV ;t# )	CurlErrorz$Base exception for curl_cffi packagec               $    V ^8  d   QhRRRRRR/# )r   msgr   codezint | CurlECode | Literal[0]r   Noner   )r   s   "r   r   CurlError.__annotate__7   s$     7 77:7	7r   c                	<   < \         SV `  ! V.VO5/ VB  W n        R # N)super__init__r>   )selfr=   r>   argskwargs	__class__s   &&&*,r   rD   CurlError.__init__7   s!     	.t.v.26	r   r>   r   )r4   r5   r6   r7   __doc__rD   r9   __classcell__)rH   s   @r   r;   r;   4   s    .7 7 7r   r;   i  l    i   c               $    V ^8  d   QhRRRRRR/# )r   type_r.   sizer   r   )r   s   "r   r   r   M   s!        # r   c                |    \         P                  ! V4      p\         P                  ! W#4      R,          pV! W4       ^ # )z ffi callback for curl debug infoNNN)r
   from_handlebuffer)curlrO   datarP   clientpcallbacktexts   &&&&&  r   debug_functionrZ   L   s0     w'H::d!!$DUr   c               $    V ^8  d   QhRRRRRR/# )r   bbytes	uppercaseboolr   r   r   )r   s   "r   r   r   U   s!     4 4E 4d 4s 4r   c                R   a V'       d   RMRoRP                  V3R lV  4       4      # )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} c              3  F   <"   T F  pSP                  V4      x  K  	  R # 5irB   )r   ).0bytefmts   & r   	<genexpr>bytes_to_hex.<locals>.<genexpr>[   s     3CJJt$$s   !)join)r\   r^   re   s   &&@r   bytes_to_hexri   U   s#    
  (XC883333r   c               $    V ^8  d   QhRRRRRR/# )r   rO   r.   rV   r]   r   r?   r   )r   s   "r   r   r   ^   s&     T T# TU Tt Tr   c                   \         R \        R\        R\        R\        R\
        R\        R/p^(pVP                  V R 4      pV \
        \        39   dX   \        VRV 4      p\        V4      V8:  d   RMR	p\        P                  P                  V R
\        V4       RV V R24       R#  VP                  R4      p\        P                  P                  V RV 24       V \         \        \        39  d"   \        P                  P                  R4       R# R#   \         dZ    \        TRT 4      p\        T4      T8:  d   RMR	p\        P                  P                  T R
\        T4       RT T R24        R# i ; i)*<>z< DATAz> DATAz< SSLz> SSLN z...z [z	 bytes]: 
zutf-8ra   )CURLINFO_TEXTCURLINFO_HEADER_INCURLINFO_HEADER_OUTCURLINFO_DATA_INCURLINFO_DATA_OUTCURLINFO_SSL_DATA_INCURLINFO_SSL_DATA_OUTr!   ri   r3   sysstderrwritedecodeUnicodeDecodeError)rO   rV   PREFIXESMAX_SHOW_BYTESprefixhex_strpostfixrY   s   &&      r   debug_function_defaultr   ^   s_   sCS(8gwH N\\%%F %'<==tO^45D	^3"

F82c$i[	'7)2NO		T;;w'DJJxq/0],>@STT

  & U! 	T"4#89GI7bUGJJxr#d)IgYwirRS		Ts   *A*D A E<;E<c                    \         P                  ! V4      pVP                  \         P                  ! W4      R,          4       W!,          # )zAffi callback for curl write function, directly writes to a bufferrR   )r
   rS   rz   rT   )ptrrP   nmembuserdatarT   s   &&&& r   buffer_callbackr   }   s4     __X&F
LLC'*+<r   c                ,    V '       g   ^ # \        V 4      # rK   )r.   )ss   &r   
ensure_intr      s    q6Mr   c                   \         P                  ! V4      pV! \         P                  ! W4      R,          4      p\        V4      pV\        8X  g   V\
        8X  d   V# WRV,          8w  d   \        P                  ! R\        ^R7       W!,          # )zHffi callback for curl write function, calls the callback python functionrR   zWrote bytes != received bytes.
stacklevel)	r
   rS   rT   r   CURL_WRITEFUNC_PAUSECURL_WRITEFUNC_ERRORwarningswarnr   )r   rP   r   r   rX   wrotes   &&&&  r   write_callbackr      sn     x(HSZZ+A./EuE$$1E(E6TUV<r   c                   \         P                  ! V4      pW,          pVP                  V4      pVf   ^ # \        V\        4      '       d   V# \        V\
        4      '       d   VP                  4       pV'       g   ^ # \        V4      V8  d   \        R\        V4       RV R24      h\         P                  ! W\        V4      4       \        V4      # )zIffi callback for curl read function, reads from a buffer/file-like objectRead callback returned  bytes, but only  bytes are allowed.)
r
   rS   read
isinstancer.   r   encoder3   r;   memmove)r   rP   r   r   rT   max_lenrV   s   &&&&   r   read_buffer_callbackr      s     __X&FlG;;wD|$${{}
4y7%c$i[0A'J]^
 	
 KK3t9%t9r   c                   \         P                  ! V4      pW,          pV! V4      pVf   ^ # \        V\        4      '       d   V# \        V\        4      '       d   VP                  4       pV'       g   ^ # \        V4      V8  d   \        R\        V4       RV R24      h\         P                  ! W\        V4      4       \        V4      # )zGffi callback for curl read function, calls the callback python functionr   r   r   )	r
   rS   r   r.   r   r   r3   r;   r   )r   rP   r   r   rX   r   rV   s   &&&&   r   read_callbackr      s     x(HlGGD|$${{}
4y7%c$i[0A'J]^
 	
 KK3t9%t9r   c                   V ^8  d   QhRR/# )r   r   list[bytes]r   )r   s   "r   r   r      s      ; r   c                    . pT pV'       d>   VP                  \        P                  ! VP                  4      4       VP                  pKE  \
        P                  ! V 4       V# )z%Converts curl slist to a python list.)appendr
   stringrV   nextr   curl_slist_free_all)headresultr   s   &  r   slist_to_listr      sD    F
C
cjj*+hhD!Mr   c                  t   ] tR t^tRtR2tR3R R lltR R ltR R ltR	 R
 lt	R R lt
R R ltR R ltR R ltR R ltR4R R lltR R ltR5R R lltR R ltR5R R lltR R  ltR! R" ltR# R$ lt]R% R& l4       t]R' R( l4       tR) R* ltR+ R, lt]P:                  3R- R. lltR6R/ R0 lltR1t R# )7Curlz3
Wrapper for ``curl_easy_*`` functions of libcurl.
Nc               $    V ^8  d   QhRRRRRR/# )r   cacertr   debugr_   r   r?   r   )r   s   "r   r   Curl.__annotate__   s!     3 3s 3 3d 3r   c                   V'       d   TM\         P                  ! 4       V n        \        P                  V n        \        P                  V n        \        P                  V n        T;'       g    \        V n	        RV n
        RV n        RV n        RV n        RV n        RV n        RV n        \        P"                  ! RR4      V n        W n        V P)                  4        \        P"                  ! RV P*                  4      V n        \        P"                  ! R4      V n        \        P"                  ! R4      V n        \        P"                  ! R4      V n        R# )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``.
FNzchar[]   zsize_t *zstruct curl_ws_frame **)r   curl_easy_init_curlr
   NULL_headers_proxy_headers_resolveDEFAULT_CACERT_cacert_is_cert_set_skip_cacert_write_handle_header_handle_debug_handle_body_handle_read_handlenew_error_buffer_debug_set_error_buffer_WS_RECV_BUFFER_SIZE_ws_recv_buffer_ws_recv_n_recv_ws_recv_p_frame_ws_send_n_sent)rE   r   r   handles   &&&&r   rD   Curl.__init__   s      &V3+=+=+?
!hh//!!"&#'"&!%!% WWXs3   #wwx1J1JK"wwz2 #(A B"wwz2r   c                   V ^8  d   QhRR/# r   r   r?   r   )r   s   "r   r   r      s      4 r   c                	
   \         P                  ! V P                  \        P                  V P
                  4      pV^ 8w  d   \        P                  ! R\        ^R7       V P                  '       d   V P                  4        R# R# )r   zFailed to set error bufferr   N)r   _curl_easy_setoptr   r   ERRORBUFFERr   r   r   r   r   r   rE   rets   & r   r   Curl._set_error_buffer   sV    ##DJJ0C0CTEWEWX!8MM6TUV;;;JJL r   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r      s     1 1t 1r   c                    V P                  \        P                  ^4       V P                  \        P                  R4       R# )zSet debug to TrueTN)setoptr   VERBOSEDEBUGFUNCTIONrE   s   &r   r   
Curl.debug   s(    GOOQ'G))40r   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r            r   c                	&    V P                  4        R # rB   closer   s   &r   __del__Curl.__del__      

r   c               $    V ^8  d   QhRRRRRR/# )r   errcoder.   rF   r   r   r?   r   )r   s   "r   r   r     s!      C   r   c                	L    V^ 8X  d   R# V P                   ! V.VO5!  pVe   VhR# )r   N)
_get_error)rE   r   rF   errors   &&* r   _check_errorCurl._check_error  s/    a</$/K r   c                    V ^8  d   QhRRRR/# )r   r   r.   rF   r   r   )r   s   "r   r   r     s     	 	# 	c 	r   c           	     	   V^ 8w  d   \         P                  ! V P                  4      P                  RR7      pRP	                  V Uu. uF  p\        V4      NK  	  up4      p\        RV RV RV R2\        \        V4      R7      # R	# u upi )
r   backslashreplaceerrorsra   z
Failed to z	, curl: (z) zK. See https://curl.se/libcurl/c/libcurl-errors.html first for more details.rJ   N)	r
   r   r   r{   rh   r   r;   r	   r   )rE   r   rF   errmsgaactions   &&*   r   r   Curl._get_error  s    a<ZZ 2 23::BT:UFXXt4t!s1vt45FVHIgYb A  )W-	  4s   B	c               $    V ^8  d   QhRRRRRR/# )r   optionr   valuer   r   r.   r   )r   s   "r   r   r     s&      W S S r   c                &   V P                   f   ^ # ^ RRRRRRRRR/pVP                  VR,          R,          4      pVR8X  g   VR8X  d   \        P                  ! WB4      pEMV\        P
                  8X  d]   \        P                  ! V4      pWPn        \        P                  ! V P                   \        P                  \        P                  4       EMwV\        P                  8X  d]   \        P                  ! V4      pWPn        \        P                  ! V P                   \        P                  \        P                  4       EMV\        P                  8X  d]   \        P                  ! V4      pWPn        \        P                  ! V P                   \        P"                  \        P$                  4       EMV\        P                  8X  dm   \        P                  ! V4      pWPn        \        P                  ! V P                   \        P                  \        P&                  4       \        P
                  pEMV\        P                  8X  dm   \        P                  ! V4      pWPn        \        P                  ! V P                   \        P                  \        P&                  4       \        P                  pEMV\        P"                  8X  dm   \        P                  ! V4      pWPn        \        P                  ! V P                   \        P"                  \        P(                  4       \        P                  pEMV\        P*                  8X  dy   VR	J d   \,        p\        P                  ! V4      pWPn        \        P                  ! V P                   \        P*                  \        P0                  4       \        P2                  pEMVR8X  Edp   \5        V\6        4      '       Ed;   \        P8                  \        P:                  \        P<                  \        P>                  \        P@                  \        PB                  \        PD                  \        PF                  \        PH                  \        PJ                  \        PL                  \        PN                  \        PP                  \        PR                  0p\T        PV                  PY                  R
4      '       d1   W9   d+   \Z        P\                  ! R4      pVP_                  VRR7      pMVP_                  4       pMTpV\        P`                  8X  d   WPn1        M\e        RV 24      hV\        Pf                  8X  d]   V F)  p\        Ph                  ! V Pj                  V4      V n5        K+  	  \        P                  ! V P                   WPj                  4      p	EM'V\        Pl                  8X  d\   V F)  p
\        Ph                  ! V Pn                  V
4      V n7        K+  	  \        P                  ! V P                   WPn                  4      p	MV\        Pp                  8X  d   V FO  p\5        V\6        4      '       d   VP_                  4       p\        Ph                  ! V Pr                  V4      V n9        KQ  	  \        P                  ! V P                   WPr                  4      p	M!\        P                  ! V P                   W4      p	V Pu                  V	RW4       V\        P8                  8X  d   R	V n;        V	# )zWrapper 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*i'  zchar*i N  zvoid*i0u  int64_t*i@  TwinFstrictr   zOption unsupported: r   )<r   r!   r
   r   r   	WRITEDATA
new_handler   r   r   WRITEFUNCTIONr   
HEADERDATAr   HEADERFUNCTIONREADDATAr   READFUNCTIONr   r   r   r   r   r   rZ   	DEBUGDATAr   r   CAINFOCAPATHPROXY_CAINFOPROXY_CAPATHSSLCERTSSLKEYCRLFILE
ISSUERCERTSSH_PUBLIC_KEYFILESSH_PRIVATE_KEYFILE
COOKIEFILE	COOKIEJAR
NETRC_FILEUNIX_SOCKET_PATHrx   platform
startswithlocalegetpreferredencodingr   
POSTFIELDSr   NotImplementedError
HTTPHEADERcurl_slist_appendr   PROXYHEADERr   RESOLVEr   r   r   )rE   r   r   input_option
value_typec_valuefilepath_optsencheaderr   proxy_headerresolves   &&&         r   r   Curl.setopt  s    :: w77:7
 "%%v%&?@
 J*$<ggj0Gw(((nnU+G!(!!

G1133F3F w)))nnU+G")!!

G22C4G4G w'''nnU+G '!!

G00#2J2J w,,,nnU+G!(!!$**g.C.CSEWEWX&&Fw---nnU+G")!!

G22C4F4F ''Fw+++nnU+G '!!$**g.B.BCDUDUV%%Fw,,,}.nnU+G!(!!$**g.C.CSEWEWX&&F7"%%%
 NNNN((((OONNOO&&..//&&%%&&,,!  <<**511f6M 55e<C#ll3xl@G#llnG+++$+!%(<VH&EFFW''' # 5 5dmmV L  ''

FMMJCw*** %&)&;&;'''# !& ''

F<O<OPCw& gs++%nn.G # 5 5dmmW M ! ''

FMMJC''

FDC#x7W^^# $D
r   c                    V ^8  d   QhRRRR/# )r   r   r   r   z%bytes | int | float | list[str | int]r   )r   s   "r   r   r     s     +8 +8h +8+P +8r   c                   RRRRRRRRR	RR
R/pR\         P                  R\        R\        R\        R	\        R
\        /pVR,          pV P
                  f   VR8X  d   R# W4,          ! 4       # \         P                  ! W$,          4      p\        P                  ! V P
                  W4      pV P                  VRV4       VR8X  d   \        V^ ,          4      # V^ ,          \         P                  8X  d   R# W4,          ! V^ ,          4      # )zWrapper for ``curl_easy_getinfo``. Gets information in response after
curl.perform.

Parameters:
    option: option to get info of, using constants from ``CurlInfo`` enum

Returns:
    value retrieved from last perform.
i   zchar**i    r   i  0 zdouble*i  @ zstruct curl_slist **i  P i  ` r   i   r   getinfo)r
   r   r.   floatlistr   r   r   curl_easy_getinfor   r   r   )rE   r   
ret_optionret_cast_optionoption_typer  r   s   &&     r   r&  Curl.getinfo  s     hgi,gj

 cjjcedcc
 x'::h&"/11''*12##DJJ@#y&1(" ,,1:!+GAJ77r   c                   V ^8  d   QhRR/# )r   r   r]   r   )r   s   "r   r   r     s     . . .r   c                T    \         P                  ! \        P                  ! 4       4      # )z#Get the underlying libcurl version.)r
   r   r   curl_versionr   s   &r   versionCurl.version  s    zz#**,--r   c               $    V ^8  d   QhRRRRRR/# )r   targetr   default_headersr_   r   r.   r   )r   s   "r   r   r     s!     
 
# 
 
 
r   c                    V P                   f   ^ # \        P                  ! V P                   VP                  4       \	        V4      4      # )zSet the browser type to impersonate.

Parameters:
    target: browser to impersonate.
    default_headers: whether to add default headers, like User-Agent.

Returns:
    0 if no error.
)r   r   curl_easy_impersonater   r.   )rE   r4  r5  s   &&&r   impersonateCurl.impersonate  s:     ::((JJ_)=
 	
r   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r     s     7 7 7r   c                	F   V P                   '       d   R # V P                  '       g{   V P                  \        P                  V P
                  4      pV P                  VR4       V P                  \        P                  V P
                  4      pV P                  VR4       R # R # )Nz
set cacertzset proxy cacert)r   r   r   r   r  r   r   r  r   s   & r   _ensure_cacertCurl._ensure_cacert  su       ++gnndll;Cc<0++g22DLLACc#56	 !r   c               $    V ^8  d   QhRRRRRR/# r   clear_headersr_   clear_resolver   r?   r   )r   s   "r   r   r     s'     I IT I IQU Ir   c                   V P                   f   \        R4      hV P                  4        \        P                  ! V P                   4      p V P                  VR4       V P                  W4       R#   T P                  Y4       i ; i)zWrapper for ``curl_easy_perform``, performs a curl request.

Parameters:
    clear_headers: clear header slist used in this perform
    clear_resolve: clear resolve slist used in this perform

Raises:
    CurlError: if the perform was not successful.
Nz(Cannot perform request on closed handle.perform)r   r;   r<  r   curl_easy_performr   clean_handles_and_buffers)rE   r@  rA  r   s   &&& r   rC  Curl.perform  ss     ::FGG 	 ##DJJ/	Ic9- **=HD**=Hs   A0 0Bc                   V ^8  d   QhRR/# )r   r   r.   r   )r   s   "r   r   r     s     0 0 0r   c                	b    V P                   f   ^ # \        P                  ! V P                   4      # rB   )r   r   curl_easy_upkeepr   s   &r   upkeepCurl.upkeep  s$    ::##DJJ//r   c               $    V ^8  d   QhRRRRRR/# r?  r   )r   s   "r   r   r     s$     + +!+9=+	+r   c                h   RV n         RV n        RV n        RV n        RV n        V'       dU   V P
                  \        P                  8w  d!   \        P                  ! V P
                  4       \        P                  V n        V'       d   V P                  \        P                  8w  d!   \        P                  ! V P                  4       \        P                  V n
        V P                  \        P                  8w  d!   \        P                  ! V P                  4       \        P                  V n        R# R# )zmClean up handles and buffers after ``perform`` and ``close``,
called at the end of ``perform`` and ``close``.N)r   r   r   r   r   r   r
   r   r   r   r   r   )rE   r@  rA  s   &&&r   rE  Curl.clean_handles_and_buffers  s    
 ""!  }}(''6HHDM}}(''6HHDM""chh.''(;(;<"%((D r   c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r     s     	 	4 	r   c                    V P                   f   \        R4      h\        P                  ! V P                   4      p\	        V P
                  V P                  VR7      pV# )zWrapper for ``curl_easy_duphandle``.

This is not a full copy of entire curl object in python. For example, headers
handle is not copied, you have to set them again.zCannot duplicate closed handle.)r   r   r   )r   r;   r   curl_easy_duphandler   r   r   )rE   r   cs   &  r   	duphandleCurl.duphandle  sI    
 ::=>>,,TZZ8
DKK
Kr   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r   '  s     ! !t !r   c                    RV n         RV n        V P                  e1   \        P                  ! V P                  4       V P                  4        \        P                  V n        R# )z8Reset all curl options, wrapper for ``curl_easy_reset``.FN)	r   r   r   r   curl_easy_resetr   r
   r   r   r   s   &r   reset
Curl.reset'  sE    !!::!

+""$r   c                    V ^8  d   QhRRRR/# )r   headersr   r   r   r   )r   s   "r   r   r   0  s      K L r   c                    \        4       pV FP  pVP                  4       P                  R4      '       g   K*  VP                  VR,          P	                  4       4       KR  	  V# )zExtract ``cookies.SimpleCookie`` from header lines.

Parameters:
    headers: list of headers in bytes.

Returns:
    A parsed cookies.SimpleCookie instance.
s   set-cookie: :   NN)r   lowerr  loadr{   )rE   r[  cookier   s   &&  r   parse_cookie_headersCurl.parse_cookie_headers0  sL      ,~F||~((99F3K..01  r   c                    V ^8  d   QhRRRR/# )r   status_liner]   r   r   )r   s   "r   r   r   @  s     ( (u ( (r   c                b    \         P                  V 4      pV'       d   VP                  ^4      # R# )zLExtract reason phrase, like ``OK``, ``Not Found`` from response status
line.r   )REASON_PHRASE_REmatchgroup)rd  ms   & r   get_reason_phraseCurl.get_reason_phrase?  s)     "";/qwwqz'C'r   c                    V ^8  d   QhRRRR/# )r   rd  r]   r   z"tuple[CurlHttpVersion, int, bytes]r   )r   s   "r   r   r   G  s     1 1u 11S 1r   c                   \         P                  V 4      pV'       g   \        P                  ^ R3# VP	                  ^4      R8X  d   \        P
                  pM^VP	                  ^4      R8X  d   \        P                  pM7VP	                  ^4      R8X  d   \        P                  pM\        P                  p\        VP	                  ^4      4      pVP	                  ^4      pW#V3# )zNParse status line.

Returns:
    http_version, status_code, and reason phrase
r   z2.0z1.1z1.0)	STATUS_LINE_RErg  r   V1_0rh  V2_0V1_1NONEr.   )rd  ri  http_versionstatus_codereasons   &    r   parse_status_lineCurl.parse_status_lineF  s       -"''C//771:*//LWWQZ5 *//LWWQZ5 *//L*//L!''!*o&00r   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r   ]  s     ( (t (r   c                F   V P                  4        V P                  '       d(   \        P                  ! V P                  4       RV n        \        P
                  ! V P                  4       V P                  e*   \        P
                  ! V P                  4       RV n        R# R# )zAClose and cleanup curl handle, wrapper for ``curl_easy_cleanup``.N)rE  r   r   curl_easy_cleanupr
   releaser   r   r   s   &r   r   
Curl.close]  sm    &&(:::!!$**-DJD&&'+KK,,-#'D  ,r   c                   V ^8  d   QhRR/# )r   r   ztuple[bytes, CurlWsFrame]r   )r   s   "r   r   r   j  s     
 
2 
r   c                   V P                   f   \        R4      h\        P                  ! V P                   V P                  V P
                  V P                  V P                  4      ;p'       d   V P                  VR4       \        P                  ! V P                  4      RV P                  ^ ,           V P                  ^ ,          3# )zReceive a frame from a websocket connection.

Returns:
    a tuple of frame content and curl frame meta struct.

Raises:
    CurlError: if failed.
Nz/Cannot receive websocket data on closed handle.WS_RECV)r   r;   r   curl_ws_recvr   r   r   r   r   r
   rT   r   s   & r   ws_recvCurl.ws_recvj  s     ::MNN""JJ  %%  !!
 
3 
 c9- JJt++,-Ft/C/CA/FG!!!$
 	
r   c               $    V ^8  d   QhRRRRRR/# )r   payloadzbytes | memoryviewr0   zCurlWsFlag | intr   r.   r   )r   s   "r   r   r     s$     ' ')'2B'	'r   c                &   V P                   f   \        R4      h\        P                  ! V P                   \        P
                  ! V4      \        V4      V P                  ^ V4      ;p'       d   V P                  VR4       V P                  ^ ,          # )zSend data to a websocket connection.

Args:
    payload: content to send.
    flags: websocket flag to set for the frame, default: binary.

Returns:
    The number of bytes sent.

Raises:
    CurlError: if failed.
z,Cannot send websocket data on closed handle.WS_SEND)	r   r;   r   curl_ws_sendr
   from_bufferr3   r   r   )rE   r  r0   r   s   &&& r   ws_sendCurl.ws_send  s     ::JKK""JJOOG$L  
 
3 
 c9-##A&&r   c               $    V ^8  d   QhRRRRRR/# )r   r>   r.   messager]   r   r   )r   s   "r   r   r     s!     = =S =% =# =r   c                    \         P                  ! RV4      V,           pV P                  V\        P                  R7      # )aC  Close a websocket connection. Shorthand for :meth:`ws_send`
with close code and message. Note that to completely close the connection,
you must close the curl handle after this call with :meth:`close`.

Args:
    code: close code.
    message: close message.

Returns:
    0 if no error.

Raises:
    CurlError: if failed.
z!H)r0   )structpackr  r   CLOSE)rE   r>   r  r  s   &&& r   ws_closeCurl.ws_close  s2     ++dD)G3||G:+;+;|<<r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   i   )ro   FN)T)TT)i  r   )!r4   r5   r6   r7   rL   r   rD   r   r   r   r   r   r   r&  r1  r8  r<  rC  rJ  rE  rS  rX  ra  staticmethodrj  rv  r   r  r   BINARYr  r  r9   r   r   r   r   r      s     &3<1
	B+8Z.
 7I20
+2	! ( ( 1 1,(
8 FPEVEV':= =r   r   c                      ] tR tRtRtRR R lltRRRRRRR	R/R
 R llt]R R l4       tRR R llt	R R lt
R R ltRtR# )CurlMimei  z#Wrapper for the ``curl_mime_`` API.Nc                   V ^8  d   QhRR/# )r   rU   Curl | Noner   )r   s   "r   r   CurlMime.__annotate__  s     : :[ :r   c                    V'       d   TM	\        4       V n        \        P                  ! V P                  P                  4      V n        R# )z'
Args:
    curl: Curl instance to use.
N)r   r   r   curl_mime_init_form)rE   rU   s   &&r   rD   CurlMime.__init__  s-    
 "Ttv
''

(8(89
r   content_typefilename
local_pathrV   c               0    V ^8  d   QhRRRRRRRRRR	R
R/# )r   namer   r  z
str | Noner  r  zstr | bytes | Path | NonerV   zbytes | Noner   r?   r   )r   s   "r   r   r    sF     ;< ;<;< !	;<
 ;< .;< ;< 
;<r   c                  \         P                  ! V P                  4      p\         P                  ! WaP	                  4       4      pV^ 8w  d   \        R4      hVe7   \         P                  ! WbP	                  4       4      pV^ 8w  d   \        R4      hVe7   \         P                  ! WcP	                  4       4      pV^ 8w  d   \        R4      hV'       d   V'       d   \        R4      hVe   \        V\        4      '       d   \        V4      pM)\        V\        4      '       d   VP                  4       pMTp\        V4      P                  4       '       g   \        RV 24      h\         P                  ! WhP	                  4       4      pV^ 8w  d   \        R4      hVeR   \        V\        4      '       g   \        V4      P	                  4       p\         P                   ! We\#        V4      4      pR# R# )aM  Add 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.
zAdd field failed.Nz1Can not use local_path and data at the same time.zFile not found at )r   curl_mime_addpartr  curl_mime_namer   r;   curl_mime_typecurl_mime_filenamer   r   r   r]   r{   r#   FileNotFoundErrorcurl_mime_filedatacurl_mime_datar3   )	rE   r  r  r  r  rV   partr   local_path_strs	   &&$$$$   r   addpartCurlMime.addpart  s   ( $$TZZ0  {{}5!8/00 #$$T+>+>+@ACax 344 ((/@ACax 344$OPP !*d++!$ZJ..!+!2!2!4!+'..00'*<^<L(MNN((/D/D/FGCax 344dE**4y'')$$TT;C r   c                   V ^8  d   QhRR/# )r   filesz
list[dict]r   )r   s   "r   r   r    s      j r   c                J    V ! 4       pV F  pVP                   ! R/ VB  K  	  V# )zJCreate a multipart instance from a list of dict, for keys, see ``addpart``r   )r  )clsr  formfiles   &&  r   	from_listCurlMime.from_list  s)     uDLL 4  r   c                    V ^8  d   QhRRRR/# )r   rU   r  r   r?   r   )r   s   "r   r   r    s     / /; /$ /r   c                    V'       d   TMV P                   pVP                  \        P                  V P                  4       R# )z,Attach the mime instance to a curl instance.N)r   r   r   MIMEPOSTr  )rE   rU   rR  s   && r   attachCurlMime.attach  s'    Ddjj	!!4::.r   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r  
  s      t r   c                p    \         P                  ! V P                  4       \        P                  V n        R# )zjClose the mime instance and underlying files. This method must be called
after ``perform`` or ``request``.N)r   curl_mime_freer  r
   r   r   s   &r   r   CurlMime.close
  s!     	4::&XX
r   c                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r    r   r   c                	&    V P                  4        R # rB   r   r   s   &r   r   CurlMime.__del__  r   r   )r   r  rB   )r4   r5   r6   r7   rL   rD   r  classmethodr  r  r   r   r9   r   r   r   r  r    s`    -:;< $(	;<
  $;< 15;< ";<z  /
 r   r  )F)=
__future__r   r  rer  r$   rx   r   http.cookiesr   pathlibr   typingr   r   r   r	   r   r'   _wrapperr
   r   constr   r   r   r   r   utilsr   r+   r   compilerf  rn  r-   	Exceptionr;   rq   rr   rs   rt   ru   rv   rw   r   r   CURL_READFUNC_ABORTCURL_READFUNC_PAUSE
def_externrZ   ri   r   r   r   r   r   r   r   r   r  r   r   r   <module>r     sw   "  	  
 
  %  4 4 	   L L "  !"::;< => 7	 7       ! !       4T>      *  ,_= _=D\ \r   