
    h                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	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mZmZmZmZmZmZmZ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%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z; ddl(m<Z<m=Z=m>Z> ddl?m@Z@mAZA  eeB          5  d dlCZCddd           n# 1 swxY w Y    eeB          5  d dlDZEddd           n# 1 swxY w Y   ejF        dk    r ede;e;          ZGn ede;          ZGerNd dlHmIZI  G d ded          ZJ G d deeG         ed          ZK G d  d!ed          ZL G d" d#eLd          ZMn( G d$ d%          ZN eN            ZIeOePePf         ZJeZKeecZLZMed&         ZQed'         ZRd8d,ZSd9d:d/ZTd9d;d1ZU G d2 d3eeG                   ZV G d4 d5eVeG                   ZW G d6 d7eVeG                   ZXdS )<    )annotationsN)ThreadPoolExecutor)asynccontextmanagercontextmanagersuppress)BytesIO)	TYPE_CHECKINGCallableGenericLiteralOptional	TypedDictTypeVarUnioncast)urlparse   )	AsyncCurl)CurlHttpVersionCurlInfoCurlOpt)Curl	CurlErrorCurlMime)CurlCffiWarning   )CookiesCookieTypes
CurlMorsel)RequestExceptionSessionClosed
code2error)HeadersHeaderTypes)BrowserTypeLiteralExtraFingerprintsExtraFpDict)
STREAM_ENDResponse)HttpVersionLiteralnot_setset_curl_options)AsyncWebSocket	WebSocket)      R)bounddefault)r2   )Unpackc                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   dS )	ProxySpecstrallhttphttpswswssN__name__
__module____qualname____annotations__     X/var/www/html/marketdash/venv/lib/python3.11/site-packages/curl_cffi/requests/session.pyr6   r6   5   s=         			


rC   r6   F)totalc                     e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   d	ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d	ed<   d	ed<   ded<   ded<   ded<   ded <   d!ed"<   d#ed$<   ded%<   d	ed&<   d'ed(<   d)ed*<   ded+<   d,S )-BaseSessionParamsOptional[HeaderTypes]headersOptional[CookieTypes]cookiesOptional[tuple[str, str]]authOptional[ProxySpec]proxiesOptional[str]proxy
proxy_authbase_urlOptional[dict]paramsboolverify!Union[float, tuple[float, float]]timeout	trust_envallow_redirectsintmax_redirectsOptional[BrowserTypeLiteral]impersonateja3akamai/Optional[Union[ExtraFingerprints, ExtraFpDict]]extra_fpdefault_headers"Union[str, Callable[[bytes], str]]default_encodingcurl_optionsOptional[list]
curl_infos4Optional[Union[CurlHttpVersion, HttpVersionLiteral]]http_versiondebug	interface%Optional[Union[str, tuple[str, str]]]certOptional[type[R]]response_classdiscard_cookiesNr=   rB   rC   rD   rG   rG   <   sM        &&&&&&&&''''$$$$----22221111AAAA<<<<$$$$""""JJJJ    3333))))rC   rG   c                  <   e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded <   ded!<   ded"<   d#ed$<   ded%<   d&ed'<   d(ed)<   d*ed+<   ded,<   d-ed.<   d/ed0<   d1ed2<   d3ed4<   d5S )6StreamRequestParams"Optional[Union[dict, list, tuple]]rU   AOptional[Union[dict[str, str], list[tuple], str, BytesIO, bytes]]dataOptional[dict | list]jsonrH   rI   rJ   rK   rT   filesrL   rM   3Optional[Union[float, tuple[float, float], object]]rY   Optional[bool]r[   Optional[int]r]   rN   rO   rP   rQ   rR   rW   refereraccept_encodingOptional[Callable]content_callbackr^   r_   r`   ra   rb   rc   rd   re   rf   Union[str, Literal[False]]quoterj   rk   rm   rn   ro   r\   max_recv_speedOptional[CurlMime]	multipartrV   rr   Nr=   rB   rC   rD   rt   rt   Y   sz        2222OOOO####&&&&&&&&''''DDDD''''$$$$$$$$----&&&&,,,,1111AAAA''''<<<<))))JJJJ    3333%%%%rC   rt   c                      e Zd ZU ded<   dS )RequestParamsr|   streamNr=   rB   rC   rD   r   r   y   s         rC   r   c                  $    e Zd Zed             ZdS )_Unpackc                     d S NrB   )argskwargss     rD   __getitem__z_Unpack.__getitem__   s    DrC   N)r>   r?   r@   staticmethodr   rB   rC   rD   r   r   ~   s-        		 	 
	 	 	rC   r   )eventletgevent)	GETPOSTPUTDELETEOPTIONSHEADTRACEPATCHQUERYurlr7   returnrV   c                V    t          |           }t          |j        o|j                  S )z,Check if the provided url is an absolute url)r   rV   schemehostname)r   
parsed_urls     rD   _is_absolute_urlr      s&    #J
!9j&9:::rC   qqueue.Queuec                B    	 | j         d         S # t          $ r |cY S w xY wNr   )queue
IndexErrorr   r3   s     rD   _peek_queuer      s7    wqz       asyncio.Queuec                B    	 | j         d         S # t          $ r |cY S w xY wr   )_queuer   r   s     rD   _peek_aio_queuer      s7    x{   r   c                      e Zd ZdZddddddddddddddddddddddddddddd=d3Zd>d6Zd7 Zed?d9            Zej	        d@d<            ZdS )ABaseSessionzMProvide common methods for setting curl options and reading info in sessions.NT   utf-8F)rI   rK   rM   rO   rQ   rR   rS   rU   rW   rY   rZ   r[   r]   r_   r`   ra   rc   rd   rf   rg   ri   rk   rl   rm   ro   rq   rr   rI   rH   rK   rJ   rM   rL   rO   rN   rQ   rP   rR   rS   rU   rT   rW   rV   rY   rX   rZ   r[   r]   r\   r_   r^   r`   ra   rc   rb   rd   rf   re   rg   ri   rh   rk   rj   rl   rm   ro   rn   rq   rp   rr   c               d   t          |          | _        t          |          | _        || _        || _        || _        |	| _        |
| _        || _	        || _
        || _        || _        || _        || _        || _        || _        || _        |pi | _        |pg | _        || _        || _        || _        || _        |*t1          |t2                    du rt5          d| d          |pt2          | _        || _        |r|rt5          d          |rd|i}|pi | _        || _        | j        r#t?          | j                  stA          d          d| _!        | j        du s| j        LtD          j#        $                    d          p%tD          j#        $                    d	          p| j        | _        d S d S )
NFzZ`response_class` must be a subclass of `curl_cffi.requests.models.Response`, not of type ``z)Cannot specify both 'proxy' and 'proxies'r8   z2You need to provide an absolute url for 'base_url'TREQUESTS_CA_BUNDLECURL_CA_BUNDLE)%r#   rI   r   _cookiesrM   rS   rU   rW   rY   rZ   r[   r]   r_   r`   ra   rc   rd   rf   rg   ri   rk   rl   rm   ro   
issubclassr)   	TypeErrorrq   rr   rO   rR   r   
ValueError_closedosenvironget)selfrI   rK   rM   rO   rQ   rR   rS   rU   rW   rY   rZ   r[   r]   r_   r`   ra   rc   rd   rf   rg   ri   rk   rl   rm   ro   rq   rr   s                               rD   __init__zBaseSession.__init__   s   > w''((	 ".*& . 0(.B$*(
"	%*^X*N*NRW*W*W2 .2 2 2  
 -8. 	IW 	IGHHH 	%enG")-R$= 	S!1$-!@!@ 	SQRRR ;$$+"5
344 :>>"233; KKK #6"5rC   r   r1   c                
   |}t          t          |                     |                    }t          t          |                    t
          j                                                            |_        |r|	                                |_
        t          t          |                    t
          j                            |_        t          t          |                    t
          j                            |_        d|j        cxk    odk     nc |_        |	                                                                }g }	|D ]}
|
                                s|
                    d          r/|                    |
                                          |_        g }	[|
                    d          s|
                    d          r|	dxx         |
z  cc<   |	                    |
           t/          |	          |_        t3                      |_        |j                            d          }|D ]}	 t8          j                                        }|                    |           |                                D ]q\  }}|j                             ||j!        |"                    dd	          |"                    d
d          tG          |"                    d                               r# tH          $ r Y w xY w|p| j%        }|sCd |                    t
          j&                  D             }| j'        (                    |           t          t          |                    t
          j)                                                            |_*        t          t          |                    t
          j+                            |_,        t          t          |                    t
          j-                                                            |_.        t          t          |                    t
          j/                            |_0        ||_1        t          td          |                    t
          j3                            |_4        t          t          |                    t
          j5                            |_6        t          t          |                    t
          j7                            }	 |                                |_8        n*# tr          $ r |                    d          |_8        Y nw xY w| j:        D ]}|                    |          |j;        |<    |S )N   i  s   HTTP/       	z
set-cookiedomain path/secure)r   r   r   c                6    g | ]}t          j        |          S rB   )r   from_curl_format).0cs     rD   
<listcomp>z/BaseSession._parse_response.<locals>.<listcomp>,  s0       34
+A..  rC   zlatin-1)<r   r1   rq   bytesgetinfor   EFFECTIVE_URLdecoder   getvaluecontentr\   HTTP_VERSIONrk   RESPONSE_CODEstatus_codeok
splitlinesstrip
startswithget_reason_phrasereasonappendr#   rI   r   rK   get_listr9   SimpleCookieloaditemssetvaluer   rV   	Exceptionrr   
COOKIELISTr   update_cookies_from_curl
PRIMARY_IP
primary_ipPRIMARY_PORTprimary_portLOCAL_IPlocal_ip
LOCAL_PORT
local_portrf   float
TOTAL_TIMEelapsedREDIRECT_COUNTredirect_countREDIRECT_URLredirect_urlUnicodeDecodeErrorri   infos)r   curlbufferheader_bufferrf   rr   r   rspheader_linesheader_listheader_lineset_cookie_headers
set_cookiecookienamemorselmorselsredirect_url_bytesinfos                      rD   _parse_responsezBaseSession._parse_response   s    1d))!,,--uaii(>??@@GGII 	, //++CKQYYx/D%E%EFFsAIIh.D$E$EFF----#----$--//::<< $&' 	, 	,K$$&& %%h// 00==DDFF
 %%d++ {/E/Ee/L/L B;.{++++k** ii [11,??, 	 	J2244J'''$*LLNN  LD&KOO%zz(B77#ZZ44#FJJx$8$899 $         *AT-A 	< 89		(BU8V8V  G M227;;;eQYYx/B%C%CDDKKMMQYYx/D%E%EFFE199X->#?#?@@GGIIc199X-@#A#ABB/5!))H,?"@"@AA!#qyy1H'I'IJJ!%83H)I)IJJ	D188::C! 	D 	D 	D188CCC	D O 	. 	.DiiooCIdOO
s%   3B9K--
K:9K:3T $T43T4c                2    | j         rt          d          d S )Nz'Session is closed, cannot send request.)r   r!   r   s    rD   _check_session_closedz!BaseSession._check_session_closedD  s(    < 	K IJJJ	K 	KrC   r   c                    | j         S r   )r   r  s    rD   rK   zBaseSession.cookiesH  s
    }rC   r   Nonec                .    t          |          | _        d S r   )r   r   )r   rK   s     rD   rK   zBaseSession.cookiesL  s      ((rC   )6rI   rH   rK   rJ   rM   rL   rO   rN   rQ   rP   rR   rL   rS   rP   rU   rT   rW   rV   rY   rX   rZ   rV   r[   rV   r]   r\   r_   r^   r`   rP   ra   rP   rc   rb   rd   rV   rf   re   rg   rT   ri   rh   rk   rj   rl   rV   rm   rP   ro   rn   rq   rp   rr   rV   )r   r1   )r   r   )rK   r   r   r  )
r>   r?   r@   __doc__r   r  r  propertyrK   setterrB   rC   rD   r   r      s        WW
 *.)-*.'+#04"&!%57 $48! $DH $?F'+%)MQ#'6:,0 %;Q Q Q Q Q QfI I I IVK K K    X ^) ) ) ^) ) )rC   r   c                  (    e Zd ZdZ	 	 	 dadb fdZed             Zed             Zd Zd Z	dcdZ
eddd            Z	 dedfdZdgdZdddddddedddddddddddddddd ddddd!dd"fdhdVZdidXZdidYZdidZZdid[Zdid\Zdid]Zdid^Zdid_Zdid`Z xZS )jSessionzA request session, cookies and connections will be reused. This object is
    thread-safe, but it's recommended to use a separate session for each thread.NTr   Optional[Curl]threadOptional[ThreadType]use_thread_local_curlrV   r   Unpack[BaseSessionParams[R]]c                `    t                      j        di | || _        || _        d| _        d| _        |rWt          j                    | _        |rd| _	        || j        _
        dS d| _	        t          | j                  | j        _
        dS |r|nt          | j                  | _        dS )a	  
        Parameters set in the ``__init__`` method will be overriden by the same
        parameter in request method.

        Args:
            curl: curl object to use in the session. If not provided, a new one will be
                created. Also, a fresh curl object will always be created when accessed
                from another thread.
            thread: thread engine to use for working with other thread implementations.
                choices: eventlet, gevent.
            headers: headers to use in the session.
            cookies: cookies to add in the session.
            auth: HTTP basic auth, a tuple of (username, password), only basic auth is
                supported.
            proxies: dict of proxies to use, prefer to use proxy if they are the same.
                format: ``{"http": proxy_url, "https": proxy_url}``.
            proxy: proxy to use, format: "http://proxy_url".
                Cannot be used with the above parameter.
            proxy_auth: HTTP basic auth for proxy, a tuple of (username, password).
            base_url: absolute url to use as base for relative urls.
            params: query string for the session.
            verify: whether to verify https certs.
            timeout: how many seconds to wait before giving up.
            trust_env: use http_proxy/https_proxy and other environments, default True.
            allow_redirects: whether to allow redirection.
            max_redirects: max redirect counts, default 30, use -1 for unlimited.
            impersonate: which browser version to impersonate in the session.
            ja3: ja3 string to impersonate in the session.
            akamai: akamai string to impersonate in the session.
            extra_fp: extra fingerprints options, in complement to ja3 and akamai str.
            interface: which interface use.
            default_encoding: encoding for decoding response content if charset is not
                found in headers. Defaults to "utf-8". Can be set to a callable for
                automatic detection.
            cert: a tuple of (cert, key) filenames for client cert.
            response_class: A customized subtype of ``Response`` to use.

        Notes:
            This class can be used as a context manager.

        .. code-block:: python

            from curl_cffi.requests import Session

            with Session() as s:
                r = s.get("https://example.com")
        NTFrl   rB   )superr   _thread_use_thread_local_curlr   	_executor	threadinglocal_local_is_customized_curlr   r   rl   _curl)r   r   r  r  r   	__class__s        rD   r   zSession.__init__V  s    l 	""6"""&;#  		B#/++DK :+/(#'   +0(#'dj#9#9#9   !%A4dj+A+A+ADJJJrC   c                    | j         rd| j        rt          j        dt          d           t          | j        dd           st          | j                  | j        _	        | j        j	        S | j
        S )Nz/Creating fresh curl handle in different thread.r   )
stacklevelr   r  )r   r%  warningswarnr   getattrr$  r   rl   r   r&  r  s    rD   r   zSession.curl  s|    & 	' E#    
 4;55 :#'dj#9#9#9 ;##:rC   c                D    | j         t                      | _         | j         S r   )r!  r   r  s    rD   executorzSession.executor  s    >!/11DN~rC   c                    | S r   rB   r  s    rD   	__enter__zSession.__enter__  s    rC   c                .    |                                   d S r   closer   r   s     rD   __exit__zSession.__exit__  s    

rC   r   r  c                F    d| _         | j                                         dS )Close the session.TN)r   r   r3  r  s    rD   r3  zSession.close  s!    	rC   method
HttpMethodr   r7   Unpack[StreamRequestParams]c              +     K    | j         d||d|ddi}	 |V  |                                 dS # |                                 w xY w)z6Equivalent to ``with request(..., stream=True) as r:``r8  r   r   TNrB   )requestr3  r   r8  r   r   r   s        rD   r   zSession.stream  sb       dlI&cIIVIIDIII	IIIIIKKKKKCIIKKKKs	   2 Ar.   c                    |                                   | j                                        }| j                                         t	          |||||          } |j        |fi | |S )a"  Connects to a websocket url.

        Note: This method is deprecated, use WebSocket instead.

        Args:
            url: the ws url to connect.
            on_message: message callback, ``def on_message(ws, str)``
            on_error: error callback, ``def on_error(ws, error)``
            on_open: open callback, ``def on_open(ws)``
            on_close: close callback, ``def on_close(ws)``

        Other parameters are the same as ``.request``

        Returns:
            a WebSocket instance to communicate with the server.
        )r   
on_messageon_erroron_openon_close)r  r   	duphandleresetr.   connect)	r   r   r@  rA  rB  rC  r   r   r;   s	            rD   
ws_connectzSession.ws_connect  s    & 	""$$$y""$$	!
 
 
 	
3!!&!!!	rC   r\   c                4    | j                                         S r   )r   upkeepr  s    rD   rI  zSession.upkeep  s    y!!!rC   gzip, deflate, brr   r   r   FrU   ru   rw   rv   ry   rx   rI   rH   rK   rJ   rz   rT   rM   rL   rY   r{   r[   r|   r]   r}   rO   rN   rQ   rP   rR   rW   r~   r   r   r   r_   r^   r`   ra   rc   rb   rd   rf   re   r   r   rk   rj   rm   ro   rn   r   r   r   r   rr   c"           	        !*+,-./0                                    |r3 j                                        + j                                         n j        +t	          +fi d|d|d j        |gd j        d|d|d j        |gd j        |gd	|d
|	p j	        d|
t          u r j        n|
d| j        n|d| j        n|d j        |gd|d|p j        d j        |gd|d|d|d|p j        d|p j        d|p j        d|p j        d| j        n|d|d|p j        d|p j        d|d|d | d!|p j        d" j        d#t4          j        d$t8          j        \  0*,/.}"|rt9          j                    -*+!,./0 f	d%}#+-fd&}$ j                            |#          }%|%                     |$           .!                                  "                    +*,!          }&-#                                 tI          /          }'tK          |'tL                    r+                                 |'0|&_'        |%|&_(        |"|&_)        /|&_        |&S 	  j*        d'k    r%tV          j,        -                    +j.                   nb j*        d(k    rCt_          j0                    j1        2                    +j.                  3                                 n+.                                  "                    +*,!          }&0|&_'        |&+                                 S # th          $ rg}( "                    +*,!          }&0|&_'        tk          |(j6        to          |(                    }) |)to          |(          |(j6        |&          |(d}(~(ww xY w# +                                 w xY w))zESend the request, see ``requests.request`` for details on parameters.r8  r   params_listrS   rw   ry   headers_listcookies_listrz   rM   rY   r[   Nr]   proxies_listrQ   rR   verify_listr~   r   r   r_   r`   ra   rc   rd   r   rk   rm   r   r   r   ro   rg   queue_classevent_classc                   	 	                                   nm# t          $ r`} 
                              }	|_                            t          t          |           | j        |                     Y d } ~ nd } ~ ww xY wt          t          j
                                                  s,t          t          j
                                                                       t                     d S # t          t          j
                                                  s,t          t          j
                                                                       t                     w xY wr   )performr   r  r=  
put_nowaitr    r7   coder   r"  Eventis_setr   putr(   )er   r   r   rf   rr   r   header_recvedr   reqr   s     rD   rT  z Session.request.<locals>.performO  sM   &IIKKKK  H H H..6=2BO C #&CKLL!1#a&&!&#!F!FGGGGGGGGH  	??FFHH CY_m<<@@BBBEE*%%%%%  	??FFHH CY_m<<@@BBBEE*%%%%s-    C9 
BAA=8C9 =BC9 9A4E-c                X                                                                       d S r   )waitrE  )futr   header_parseds    rD   cleanupz Session.request.<locals>.cleanup]  s&    ""$$$					rC   r   r   )8r  r   rD  rE  r,   rU   rS   rI   r   rM   r+   rY   r[   r]   rO   rR   rW   r_   r`   ra   rc   rd   rk   rm   ro   rg   r   Queuer"  rW  r.  submitadd_done_callbackr^  r  r   r   
isinstancer    r=  stream_taskquit_nowr  r   tpoolexecuterT  r   get_hub
threadpoolspawnr   r   r"   rV  r7   )1r   r8  r   rU   rw   ry   rI   rK   rz   rM   rY   r[   r]   rO   rQ   rR   rW   r~   r   r   r_   r`   ra   rc   rd   rf   r   rk   rm   ro   r   r   r   rr   rg  rT  ra  rf  r   first_elementrZ  errorr   r   r   r`  r[  r   r\  s1   `                        `       `        @@@@@@@rD   r=  zSession.request  s   L 	""$$$  		##%%AIOO	AAQ+B
 +B
 +B
6+B
 +B
 f--	+B

 ]]+B
 +B
 +B
 ,00+B
 -11+B
 %+B
 "+B
 %,w$6$6DLLG+B
 & !00 +B
" $ ,,%+B
& ,00'+B
( %)+B
* "4T_++B
, f---+B
. G/+B
0 ,O1+B
2 .-3+B
4 $7t'75+B
6 tx7+B
8 (T[9+B
: .;+B
> & !00 A+B
B %C+B
D &:):E+B
F  14>G+B
H 6I+B
J *>K+B
L  iM+B
N "O+B
P **Q+B
R S+B
T "U+B
>V]A}hZ  C	%O--M& & & & & & & & & & & & &      -..w77K))'222    &&6=*:O C  (NNM-)9:: $			##CK)CO#CLCIJ<:--N**195555\X--N$$/55ai@@DDFFFFIIKKK **v}.>  "				  8 8 8**v}.>  ""163q6622eCFFAFC00a78 				s,   2BL: !N. :
N+A"N&&N++N. .OUnpack[RequestParams]c                "     | j         dd|d|S Nr   r<  rB   r=  r   r   r   s      rD   headzSession.head  !    t|=6s==f===rC   c                "     | j         dd|d|S Nr   r<  rB   rr  rs  s      rD   r   zSession.get  !    t|<5c<<V<<<rC   c                "     | j         dd|d|S Nr   r<  rB   rr  rs  s      rD   postzSession.post  ru  rC   c                "     | j         dd|d|S Nr   r<  rB   rr  rs  s      rD   rY  zSession.put  rx  rC   c                "     | j         dd|d|S Nr   r<  rB   rr  rs  s      rD   patchzSession.patch  !    t|>7>>v>>>rC   c                "     | j         dd|d|S Nr   r<  rB   rr  rs  s      rD   deletezSession.delete  !    t|?8?????rC   c                "     | j         dd|d|S Nr   r<  rB   rr  rs  s      rD   optionszSession.options  !    t|@9#@@@@@rC   c                "     | j         dd|d|S Nr   r<  rB   rr  rs  s      rD   tracezSession.trace  r  rC   c                "     | j         dd|d|S Nr   r<  rB   rr  rs  s      rD   queryzSession.query  r  rC   )NNT)r   r  r  r  r  rV   r   r  r   r  r8  r9  r   r7   r   r:  )NNNN)r   r.   )r   r\   Br8  r9  r   r7   rU   ru   rw   rv   ry   rx   rI   rH   rK   rJ   rz   rT   rM   rL   rY   r{   r[   r|   r]   r}   rO   rN   rQ   rP   rR   rL   rW   r|   r~   rP   r   rP   r   r   r_   r^   r`   rP   ra   rP   rc   rb   rd   r|   rf   re   r   r   rk   rj   rm   rP   ro   rn   r   r|   r   r\   r   r   rr   rV   r   r7   r   ro  )r>   r?   r@   r  r   r  r   r.  r0  r5  r3  r   r   rG  rI  r+   r=  rt  r   r{  rY  r  r  r  r  r  __classcell__r'  s   @rD   r  r  R  s`       T T
  $'+&*	DB DB DB DB DB DB DBL   X   X
       
    ^ KO! ! ! ! !F" " " " 6:RV&*)-)- $*.GN*.'+'+#04!%!%)</348! $DH*.?F,.MQ#'6:!%(, %E_ _ _ _ _B> > > >= = = => > > >= = = =? ? ? ?@ @ @ @A A A A? ? ? ?? ? ? ? ? ? ? ?rC   r  c                  h    e Zd ZdZddddde fdZed             Zed             Zd Zd Z	d Z
d Zd ZdfdZd Zedgd            Zdddddedddddddddddddddddd fdhdIZdddddddedddddddddddddddJdddddd ddKfdidZZdjd\Zdjd]Zdjd^Zdjd_Zdjd`ZdjdaZdjdbZdjdcZdjddZ xZS )kAsyncSessionzAAn async request session, cookies and connections will be reused.N
   )loop
async_curlmax_clientsr  Optional[AsyncCurl]r  r\   r   r  c                    t                      j        di | || _        || _        || _        |                                  dS )a
  
        Parameters set in the ``__init__`` method will be override by the same parameter
        in request method.

        Parameters:
            loop: loop to use, if not provided, the running loop will be used.
            async_curl: [AsyncCurl](/api/curl_cffi#curl_cffi.AsyncCurl) object to use.
            max_clients: maxmium curl handle to use in the session,
                this will affect the concurrency ratio.
            headers: headers to use in the session.
            cookies: cookies to add in the session.
            auth: HTTP basic auth, a tuple of (username, password), only basic auth is
                supported.
            proxies: dict of proxies to use, prefer to use ``proxy`` if they are the
                same. format: ``{"http": proxy_url, "https": proxy_url}``.
            proxy: proxy to use, format: "http://proxy_url".
                Cannot be used with the above parameter.
            proxy_auth: HTTP basic auth for proxy, a tuple of (username, password).
            base_url: absolute url to use for relative urls.
            params: query string for the session.
            verify: whether to verify https certs.
            timeout: how many seconds to wait before giving up.
            trust_env: use http_proxy/https_proxy and other environments, default True.
            allow_redirects: whether to allow redirection.
            max_redirects: max redirect counts, default 30, use -1 for unlimited.
            impersonate: which browser version to impersonate in the session.
            ja3: ja3 string to impersonate in the session.
            akamai: akamai string to impersonate in the session.
            extra_fp: extra fingerprints options, in complement to ja3 and akamai str.
            default_encoding: encoding for decoding response content if charset is not
                found in headers. Defaults to "utf-8". Can be set to a callable for
                automatic detection.
            cert: a tuple of (cert, key) filenames for client cert.
            response_class: A customized subtype of ``Response`` to use.

        Notes:
            This class can be used as a context manager, and it's recommended to use via
            ``async with``.
            However, unlike aiohttp, it is not required to use ``with``.

        .. code-block:: python

            from curl_cffi.requests import AsyncSession

            # recommended.
            async with AsyncSession() as s:
                r = await s.get("https://example.com")

            s = AsyncSession()  # it also works.
        NrB   )r  r   _loop_acurlr  	init_pool)r   r  r  r  r   r'  s        rD   r   zAsyncSession.__init__  sO    t 	""6"""
 &rC   c                N    | j         t          j                    | _         | j         S r   )r  asyncioget_running_loopr  s    rD   r  zAsyncSession.loop  s"    : 133DJzrC   c                R    | j         t          | j                  | _         | j         S )N)r  )r  r   r  r  s    rD   acurlzAsyncSession.acurl  s&    ;#333DK{rC   c                    t          j        | j                  | _        	 	 | j                            d            n# t           j        $ r Y d S w xY w3r   )r  	LifoQueuer  poolrU  	QueueFullr  s    rD   r  zAsyncSession.init_pool  sd    %d&677			$$T****$   	s   < AAc                v   K   | j                                          d {V }|t          | j                  }|S )Nr  )r  r   r   rl   r   r   s     rD   pop_curlzAsyncSession.pop_curl  sC      Y]]__$$$$$$<dj)))DrC   c                    t          t          j                  5  | j                            |           d d d            d S # 1 swxY w Y   d S r   )r   r  r  r  rU  r  s     rD   	push_curlzAsyncSession.push_curl
  s    g'(( 	' 	'I  &&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   AA	Ac                
   K   | S r   rB   r  s    rD   
__aenter__zAsyncSession.__aenter__  s      rC   c                >   K   |                                   d {V  d S r   r2  r4  s     rD   	__aexit__zAsyncSession.__aexit__  s+      jjlltrC   r   r  c                   K   | j                                          d{V  d| _        	 	 | j                                        }|r|                                 n# t
          j        $ r Y dS w xY wH)r7  NT)r  r3  r   r  
get_nowaitr  
QueueEmptyr  s     rD   r3  zAsyncSession.close  s      j         	y++-- !JJLLL%   	s   /A A.-A.c                    |                                  | j        sE| j                            |           |                                 |                     |           d S |                                 d S r   )clean_after_performr   r  remove_handlerE  r  r3  r  s     rD   release_curlzAsyncSession.release_curl!  sj      """| 	J$$T***JJLLLNN4     JJLLLLLrC   r8  r9  r   r7   r:  c                  K    | j         d||d|ddi d{V }	 |W V  |                                 d{V  dS # |                                 d{V  w xY w)z<Equivalent to ``async with request(..., stream=True) as r:``r<  r   TNrB   )r=  acloser>  s        rD   r   zAsyncSession.stream*  s       !DLOCOO6OO$OOOOOOOOO	IIII**,,#**,,s	   ? ATrJ  r   r   	autocloserV   rU   ru   rI   rH   rK   rJ   rM   rL   rY   r{   r[   r|   r]   r}   rO   rN   rQ   rP   rR   rW   r~   r   r_   r^   r`   ra   rc   rb   rd   r   r   rk   rj   rm   ro   rn   r   r-   c                \  K   |                                   |                                  d{V }t          d"i d|ddd|d| j        d| j        |gd| j        |gd	| j        |gd
|p| j        d|t          u r| j	        n|d|| j
        n|d|	| j        n|	d| j        |
gd|d|p| j        d| j        |gd|d|d|p| j        d|p| j        d|p| j        d|p| j        d|| j        n|d|d|p| j        d|p| j        d|d|p| j        dt.          j        dt.          j         |                    t6          j        d            | j                            d|j                   d{V  tA          tC          tD          tF                   |           ||!          S )#a  Connects to a WebSocket.

        Args:
            url: url for the requests.
            autoclose: whether to close the WebSocket after receiving a close frame.
            params: query string for the requests.
            headers: headers to send.
            cookies: cookies to use.
            auth: HTTP basic auth, a tuple of (username, password), only basic auth is
                supported.
            timeout: how many seconds to wait before giving up.
            allow_redirects: whether to allow redirection.
            max_redirects: max redirect counts, default 30, use -1 for unlimited.
            proxies: dict of proxies to use, prefer to use ``proxy`` if they are the
                same. format: ``{"http": proxy_url, "https": proxy_url}``.
            proxy: proxy to use, format: "http://user@pass:proxy_url".
                Can't be used with `proxies` parameter.
            proxy_auth: HTTP basic auth for proxy, a tuple of (username, password).
            verify: whether to verify https certs.
            referer: shortcut for setting referer header.
            accept_encoding: shortcut for setting accept-encoding header.
            impersonate: which browser version to impersonate.
            ja3: ja3 string to impersonate.
            akamai: akamai string to impersonate.
            extra_fp: extra fingerprints options, in complement to ja3 and akamai str.
            default_headers: whether to set default browser headers.
            quote: Set characters to be quoted, i.e. percent-encoded. Default safe
                string is ``!#$%&'()*+,/:;=?@[]~``. If set to a sting, the character
                will be removed from the safe string, thus quoted. If set to False, the
                url will be kept as is, without any automatic percent-encoding, you must
                encode the URL yourself.
            curl_options: extra curl options to use.
            http_version: limiting http version, defaults to http2.
            interface: which interface to use.
            cert: a tuple of (cert, key) filenames for client cert.
            max_recv_speed: maximum receive speed, bytes per second.
        Nr   r8  r   r   rS   rL  rM  rN  rM   rY   r[   r]   rO  rQ   rR   rP  r~   r   r_   r`   ra   rc   rd   r   rk   rm   r   ro   rQ  rR  r   )r  rB   )$r  r  r,   rS   rU   rI   rK   rM   r+   rY   r[   r]   rO   rR   rW   r_   r`   ra   rc   rd   rk   rm   ro   r  rb  rW  setoptr   CONNECT_ONLYr  run_in_executorrT  r-   r   r  r)   )r   r   r  rU   rI   rK   rM   rY   r[   r]   rO   rQ   rR   rW   r~   r   r_   r`   ra   rc   rd   r   rk   rm   ro   r   r   s                              rD   rG  zAsyncSession.ws_connect8  s     D 	""$$$]]__$$$$$$ $	
 $	
 $	
$	
5$	
 $	
 ]]	$	

 f--$	
 ,00$	
 ,00$	
 "$	
 %,w$6$6DLLG$	
 & !00 $	
 $ ,,$	
  ,00!$	
" %#$	
$ "4T_%$	
& f--'$	
( G)$	
* ,O+$	
, $7t'7-$	
. tx/$	
0 (T[1$	
2 .3$	
6 & !00 9$	
: %;$	
< &:):=$	
>  14>?$	
@ *>A$	
B "C$	
D  E$	
F  G$	
 $	
J 	G(!,,,i''dl;;;;;;;;;h'..
 
 
 	
rC   r   Frw   rv   ry   rx   rz   rT   r   r   rf   re   r   r   r   rr   c"           
        !*+,-./0K                                                                        d{V +t          d(i d+d|d|d j        |gd j        d|d|d	 j        |gd
 j        |gd|d|	p j        d|
t          u r j	        n|
d| j
        n|d| j        n|d j        |gd|d|p j        d j        |gd|d|d|d|p j        d|p j        d|p j        d|p j        d| j        n|d|d|p j        d|p j        d|d |d!| d"|p j        d# j        d$t0          j        d%t0          j        \  /*,.-}"|r j                            +          0*+!,-./ 0f
d&}#+ fd'}$t1          j         |#                      }%|%                    |$           t?          t0          j        -                                            d{V   !                    +*,!          }&tE          .          }'tG          |'tH                    r %                    +           |'/|&_&        |%|&_'        |"|&_(        .|&_)        |&S 	  j                            +          00 d{V   !                    +*,!          }&/|&_&        |& %                    +           S # tT          $ rg}( !                    +*,!          }&/|&_&        tW          |(j,        t[          |(                    }) |)t[          |(          |(j,        |&          |(d}(~(ww xY w#  %                    +           w xY w))zISend the request, see ``curl_cffi.requests.request`` for details on args.Nr   r8  r   rL  rS   rw   ry   rM  rN  rz   rM   rY   r[   r]   rO  rQ   rR   rP  r~   r   r   r_   r`   ra   rc   rd   r   rk   rm   r   r   r   ro   rg   rQ  rR  c                   
K   	  d {V  nm# t           $ r`} 
                              }	|_                            t	          t          |           | j        |                     Y d } ~ nd } ~ ww xY wt          t          j	                  
                                s,t          t          j	                                                                       t                     d {V  d S # t          t          j	                  
                                s,t          t          j	                                                                       t                     d {V  w xY wr   )r   r  r=  rU  r    r7   rV  r   r  rW  rX  r   rY  r(   )rZ  r   r   r   rf   rr   r   r[  r   r\  r   tasks     rD   rT  z%AsyncSession.request.<locals>.perform  sy     ,JJJJJJJJ  H H H..fm5E C #&CKLL!1#a&&!&#!F!FGGGGGGGGH  }==DDFF AW]M::>>@@@%%
+++++++++++  }==DDFF AW]M::>>@@@%%
++++++++++s-    C5 
A8AA3.C5 3A88C5 5A:E/c                2                                    d S r   )r  )r_  r   r   s    rD   ra  z%AsyncSession.request.<locals>.cleanup  s    !!$'''''rC   rB   ).r  r  r,   rU   rS   rI   rK   rM   r+   rY   r[   r]   rO   rR   rW   r_   r`   ra   rc   rd   rk   rm   ro   rg   r  rb  rW  r  
add_handlecreate_taskrd  r   r^  r  r   re  r    r  r=  astream_taskrg  r   r   r"   rV  r7   )1r   r8  r   rU   rw   ry   rI   rK   rz   rM   rY   r[   r]   rO   rQ   rR   rW   r~   r   r   r_   r`   ra   rc   rd   rf   r   rk   rm   ro   r   r   r   rr   rg  rT  ra  rf  r   rm  rZ  rn  r   r   r   r[  r   r\  r  s1   `                        `       `        @@@@@@@rD   r=  zAsyncSession.request  se     L 	""$$$]]__$$$$$$AQ +B
 +B
 +B
+B
6+B
 +B
 f--	+B

 ]]+B
 +B
 +B
 ,00+B
 ,00+B
 %+B
 "+B
 %,w$6$6DLLG+B
 & !00 +B
" $ ,,%+B
& ,00'+B
( %)+B
* "4T_++B
, f---+B
. G/+B
0 ,O1+B
2 .-3+B
4 $7t'75+B
6 tx7+B
8 (T[9+B
: .;+B
> & !00 A+B
B %C+B
D &:):E+B
F  14>G+B
H 6I+B
J *>K+B
L  iM+B
N "O+B
P **Q+B
R  S+B
T  U+B
>V]A}hX  =	(:((..D, , , , , , , , , , , , , ,( ( ( ( ( ( "-ggii88K))'222w}m4499;;;;;;;;; &&fm-= C ,A..M-)9:: $!!$'''##CK*C#CLCIJ(z,,T22






 **&-1A?  "!!$''''  8 8 8**&-1A?  ""163q6622eCFFAFC00a78 !!$''''s+   *"K !L7 
L4A"L//L44L7 7Mro  c                "     | j         dd|d|S rq  rr  rs  s      rD   rt  zAsyncSession.head?  ru  rC   c                "     | j         dd|d|S rw  rr  rs  s      rD   r   zAsyncSession.getB  rx  rC   c                "     | j         dd|d|S rz  rr  rs  s      rD   r{  zAsyncSession.postE  ru  rC   c                "     | j         dd|d|S r}  rr  rs  s      rD   rY  zAsyncSession.putH  rx  rC   c                "     | j         dd|d|S r  rr  rs  s      rD   r  zAsyncSession.patchK  r  rC   c                "     | j         dd|d|S r  rr  rs  s      rD   r  zAsyncSession.deleteN  r  rC   c                "     | j         dd|d|S r  rr  rs  s      rD   r  zAsyncSession.optionsQ  r  rC   c                "     | j         dd|d|S r  rr  rs  s      rD   r  zAsyncSession.traceT  r  rC   c                "     | j         dd|d|S r  rr  rs  s      rD   r  zAsyncSession.queryW  r  rC   )r  r  r  r\   r   r  r  r  )4r   r7   r  rV   rU   ru   rI   rH   rK   rJ   rM   rL   rY   r{   r[   r|   r]   r}   rO   rN   rQ   rP   rR   rL   rW   r|   r~   rP   r   rP   r_   r^   r`   rP   ra   rP   rc   rb   rd   r|   r   r   rk   rj   rm   rP   ro   rn   r   r\   r   r-   r  r  )r>   r?   r@   r  r   r  r  r  r  r  r  r  r  r3  r  r   r   r+   rG  r=  rt  r   r{  rY  r  r  r  r  r  r  r  s   @rD   r  r    s       KK
 *.> > > > > > > >@   X
   X
    ' ' '    
 
 
 
        59)-)-*.GN*.'+'+#04!%!%)<48! $DH*.,.MQ#'6:5q
 q
 q
 q
 q
n 6:RV&*)-)- $*.GN*.'+'+#04!%!%)</348! $DH*.?F,.MQ#'6:!%(, %ER( R( R( R( R(h> > > >= = = => > > >= = = =? ? ? ?@ @ @ @A A A A? ? ? ?? ? ? ? ? ? ? ?rC   r  )r   r7   r   rV   r   )r   r   )r   r   )Y
__future__r   r  http.cookiesr9   r   r   sysr"  r*  concurrent.futuresr   
contextlibr   r   r   ior   typingr	   r
   r   r   r   r   r   r   r   urllib.parser   aior   constr   r   r   r   r   r   r   utilsr   rK   r   r   r   
exceptionsr    r!   r"   rI   r#   r$   r_   r%   r&   r'   modelsr(   r)   r*   r+   r,   
websocketsr-   r.   ImportErrorr   eventlet.tpoolr   version_infor1   typing_extensionsr4   r6   rG   rt   r   r   dictr7   
ThreadTyper9  r   r   r   r   r  r  rB   rC   rD   <module>r     s   " " " " " "      				  



      1 1 1 1 1 1 D D D D D D D D D D      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 " ! ! ! ! !       6 6 6 6 6 6 6 6 6 6 , , , , , , , , , , # # # # # # 5 5 5 5 5 5 5 5 5 5 C C C C C C C C C C ) ) ) ) ) ) ) ) K K K K K K K K K K ( ( ( ( ( ( ( ( @ @ @ @ @ @ @ @ @ @ 1 1 1 1 1 1 1 1Xk  MMM               Xk                 w8X666AA8$$$A U>((((((    IU        GAJ	    :    iu    @    +5     
       
 WYYFS#XI!)2I&)*
P

; ; ; ;        l) l) l) l) l)'!* l) l) l)^X? X? X? X? X?k!n X? X? X?v
k? k? k? k? k?;q> k? k? k? k? k?s$    CCC'C88C<?C<