
    N j                    j   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJrJrJr  S SKJr  S SKJrJrJr  S SKJr  S SKJr  S SKJr  S S	KJrJrJrJ r J!r!J"r"J#r#J$r$  S S
K%J&r&  SSK'J(r(  SSK)J*r*J+r+J,r,J-r-  SSK.J/r/J0r0J1r1  SSK2J3r3  SSK4J5r5J6r6J7r7  SSK8J9r9J:r:J;r;  SSK<J=r=J>r>  SSK?J@r@JArAJBrB  SSKCJDrDJErE  SSK2JFrFJGrGJHrHJIrI  SSKJJKrKJLrLJMrMJNrNJOrO  \R                  S:  a	  \"" S\E\ES9rQO\"" S\ES9rQ\(       a3  S SKRJSrS   " S S\!SS 9rT " S! S"\\Q   \!SS 9rU " S# S$\!SS 9rV " S% S&\VSS 9rWO " S' S(5      rX\X" 5       rS\Y\Z\Z4   rT\!rU\!\!srVrW\S)   r[\S*   r\S8S+ jr]S9S:S, jjr^S9S;S- jjr_\S.   r`\ " S/ S05      5       raS<S1 jrb " S2 S3\\Q   5      rc " S4 S5\c\Q   5      rd " S6 S7\c\Q   5      reg)=    )annotationsN)AsyncGeneratorCallable	Generator)ThreadPoolExecutor)asynccontextmanagercontextmanagersuppress)	dataclass)	timedelta)BytesIO)TYPE_CHECKINGGenericLiteralOptional	TypedDictTypeVarUnioncast)urlparse   )	AsyncCurl)
CurlFollowCurlHttpVersionCurlInfoCurlOpt)Curl	CurlErrorCurlMime)CurlCffiWarning   )CookiesCookieTypes
CurlMorsel)RequestExceptionSessionClosed
code2error)HeadersHeaderTypes)BrowserTypeLiteralExtraFingerprintsExtraFpDict)
STREAM_ENDResponse)NOT_SETHttpVersionLiteral
NotSetTypeset_curl_options)AsyncWebSocketAsyncWebSocketContext	WebSocketWebSocketErrorWebSocketRetryStrategy)      R)bounddefault)r;   )Unpackc                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   Srg	)
	ProxySpec9   strallhttphttpswswss N__name__
__module____qualname____firstlineno____annotations____static_attributes__rG       k/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/curl_cffi/requests/session.pyr?   r?   9   s    	
rO   r?   F)totalc                  B   \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S
\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S
\S'   S
\S'   S
\S'   S \S!'   S\S"'   S#\S$'   S\S%'   S&\S''   S(\S)'   S\S*'   S
\S+'   S,\S-'   S.\S/'   S\S0'   S\S1'   S2rg3)4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Union[bool, CurlFollow, str]allow_redirectsintmax_redirectszUnion[int, RetryStrategy]retryOptional[BrowserTypeLiteral]impersonateja3akamaiperk/Optional[Union[ExtraFingerprints, ExtraFpDict]]extra_fpdefault_headers"Union[str, Callable[[bytes], str]]default_encodingcurl_optionszOptional[list]
curl_infos4Optional[Union[CurlHttpVersion, HttpVersionLiteral]]http_versiondebug	interface%Optional[Union[str, tuple[str, str]]]certOptional[type[R]]response_classdiscard_cookiesraise_for_statusrG   NrH   rG   rO   rP   rS   rS   @   s    &&&&''$$--2255((11AA<<$$""JJ  33))rO   rS   c                  L   \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S '   S!\S"'   S\S#'   S\S$'   S\S%'   S&\S''   S\S('   S)\S*'   S+\S,'   S-\S.'   S\S/'   S0\S1'   S2\S3'   S4\S5'   S6\S7'   S8rg9):StreamRequestParams`   "Optional[Union[dict, list, tuple]]rb   AOptional[Union[dict[str, str], list[tuple], str, BytesIO, bytes]]dataOptional[dict | list]jsonrU   rV   rW   rX   ra   filesrY   rZ   3Optional[Union[float, tuple[float, float], object]]rf   &Optional[Union[bool, CurlFollow, str]]ri   Optional[int]rk   r[   r\   r]   r^   r_   Optional[bool]rd   refereraccept_encodingOptional[Callable]content_callbackrm   rn   ro   rp   rq   rr   rs   rt   ru   rv   Union[str, Literal[False]]quotery   rz   r|   r}   r~   rj   max_recv_speedOptional[CurlMime]	multipartrc   r   rG   NrH   rG   rO   rP   r   r   `   s    22OO##&&&&''DD??$$$$--&&,,11AA''<<))JJ  33%%rO   r   c                       \ rS rSr% S\S'   Srg)RequestParams   r   streamrG   NrH   rG   rO   rP   r   r      s    rO   r   c                  $    \ rS rSr\S 5       rSrg)_Unpack   c                     g NrG   )argskwargss     rP   __getitem___Unpack.__getitem__   s    rO   rG   N)rI   rJ   rK   rL   staticmethodr   rN   rG   rO   rP   r   r      s    		 
	rO   r   )eventletgevent)	GETPOSTPUTDELETEOPTIONSHEADTRACEPATCHQUERYc                h    [        U 5      n[        UR                  =(       a    UR                  5      $ )z,Check if the provided url is an absolute url)r   rc   schemehostname)url
parsed_urls     rP   _is_absolute_urlr      s'    #J
!!9j&9&9::rO   c                F     U R                   S   $ ! [         a    Us $ f = fNr   )queue
IndexErrorqr<   s     rP   _peek_queuer      s)    wwqz       c                F     U R                   S   $ ! [         a    Us $ f = fr   )_queuer   r   s     rP   _peek_aio_queuer      s)    xx{ r   linearexponentialc                  J    \ rS rSr% S\S'   SrS\S'   SrS\S'   SrS	\S
'   Srg)RetryStrategy   rj   count        floatdelayjitterr   RetryBackoffbackoffrG   N)	rI   rJ   rK   rL   rM   r   r   r   rN   rG   rO   rP   r   r      s%    JE5FE$G\$rO   r   c                l   U c  Sn [        U [        5      (       a  U nO*[        U [        5      (       a
  [        U S9nO[        S5      eUR                  S:  a  [        S5      eUR                  S:  a  [        S5      eUR                  S:  a  [        S5      eUR                  S;  a  [        S5      eU$ )	Nr   )r   z%retry must be an int or RetryStrategyzretry.count must be >= 0zretry.delay must be >= 0zretry.jitter must be >= 0r   z/retry.backoff must be 'linear' or 'exponential')	
isinstancer   rj   	TypeErrorr   
ValueErrorr   r   r   )rl   strategys     rP   _normalize_retryr      s    }%''	E3		 u-?@@~~344~~34445588JKKOrO   c                  H   \ rS rSrSrSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS	.                                                           SS
 jjr            SS jrS rSS jr\	SS j5       r
\
R                  SS j5       r
Srg)BaseSession   zMProvide common methods for setting curl options and reading info in sessions.NT   r   utf-8F)rV   rX   rZ   r\   r^   r_   r`   rb   rd   rf   rg   ri   rk   rl   rn   ro   rp   rq   rs   rt   rv   rw   rx   rz   r{   r|   r~   r   r   r   c                  [        U5      U l        [        U5      U l        X0l        Xpl        Xl        Xl        Xl        Xl	        Xl
        Xl        [        U5      U l        Xl        UU l        UU l        UU l        UU l        UU l        UU l        U=(       d    0 U l        U=(       d    / U l        UU l        UU l        UU l        UU l        Ub"  [7        U[8        5      SL a  [;        SU S35      eU=(       d    [8        U l        UU l        UU l         U(       a  U(       a  [;        S5      eU(       a  SU0nU=(       d    0 U l!        X`l"        U R
                  (       a%  [G        U R
                  5      (       d  [I        S5      eSU l%        U R                  SL d  U R                  c^  [L        RN                  RQ                  S5      =(       d2    [L        RN                  RQ                  S	5      =(       d    U R                  U l        g g )
NFzZ`response_class` must be a subclass of `curl_cffi.requests.models.Response`, not of type ``z)Cannot specify both 'proxy' and 'proxies'rB   z2You need to provide an absolute url for 'base_url'TREQUESTS_CA_BUNDLECURL_CA_BUNDLE))r(   rV   r"   _cookiesrZ   r`   rb   rd   rf   rg   ri   rk   r   rl   rn   ro   rp   rq   rs   rt   rv   rw   rx   rz   r{   r|   r~   
issubclassr.   r   r   r   r   r\   r_   r   r   _closedosenvironget)selfrV   rX   rZ   r\   r^   r_   r`   rb   rd   rf   rg   ri   rk   rl   rn   ro   rp   rq   rs   rt   rv   rw   rx   rz   r{   r|   r~   r   r   r   s                                  rP   __init__BaseSession.__init__   s   D w'(	 ".*%e,
&	 . 0(.B$*(
"	%*^X*NRW*W  ./q2 
 -8. 0WGHHenG")-R$==!1$--!@!@QRR ;;$$++"5

34 ::>>"23;; K #6rO   c                H   Un[        [        U R                  U5      5      n[        [        UR	                  [
        R                  5      5      R                  5       Ul        U(       a  UR                  5       Ul
        [        [        UR	                  [
        R                  5      5      Ul        [        [        UR	                  [
        R                  5      5      Ul        SUR                  s=:*  =(       a    S:  Os  Ul        UR                  5       R#                  5       n/ n	U H  n
U
R%                  5       (       d  M  U
R'                  S5      (       a(  UR)                  U
5      R                  5       Ul        / n	MX  U
R'                  S5      (       d  U
R'                  S5      (       a  U	S==   U
-  ss'   M  U	R-                  U
5        M     [/        U	5      Ul        [3        5       Ul        UR0                  R7                  S5      nU H  n [8        R4                  R;                  5       nUR=                  U5        UR?                  5        Hd  u  pUR4                  RA                  UURB                  URE                  SS	5      URE                  S
S5      [G        URE                  S5      5      S9  Mf     M     U=(       d    U RJ                  nU(       d^  UR	                  [
        RL                  5       Vs/ s H  n[N        RP                  " U5      PM     nnU RR                  RU                  U5        [        [        WR	                  [
        RV                  5      5      R                  5       Ul,        [        [        UR	                  [
        RZ                  5      5      Ul.        [        [        UR	                  [
        R^                  5      5      R                  5       Ul0        [        [        UR	                  [
        Rb                  5      5      Ul2        XGl3        [i        [        [j        UR	                  [
        Rl                  5      5      S9Ul7        [        [        UR	                  [
        Rp                  5      5      Ul9        [        [        UR	                  [
        Rt                  5      5      n UR                  5       Ul;        [        [        UR	                  [
        Rz                  5      5      Ul>        [        [        UR	                  [
        R~                  5      5      Ul@        [        [        UR	                  [
        R                  5      5      UlB        [        [        UR	                  [
        R                  5      5      UlD        UR|                  UR                  -   UlE        U R                   H!  nUR	                  U5      UR                  U'   M#     U$ ! [H         a     GM  f = fs  snf ! [x         a    UR                  S5      Ul;         GNSf = f)N   i  s   HTTP/       	z
set-cookiedomain path/secure)r   r   r   )secondszlatin-1)Hr   r:   r   bytesgetinfor   EFFECTIVE_URLdecoder   getvaluecontentrj   HTTP_VERSIONrz   RESPONSE_CODEstatus_codeok
splitlinesstrip
startswithget_reason_phrasereasonappendr(   rV   r"   rX   get_listrC   SimpleCookieloaditemssetvaluer   rc   	Exceptionr   
COOKIELISTr$   from_curl_formatr   update_cookies_from_curl
PRIMARY_IP
primary_ipPRIMARY_PORTprimary_portLOCAL_IPlocal_ip
LOCAL_PORT
local_portrv   r   r   
TOTAL_TIMEelapsedREDIRECT_COUNTredirect_countREDIRECT_URLredirect_urlUnicodeDecodeErrorSIZE_DOWNLOAD_Tdownload_sizeSIZE_UPLOAD_Tupload_sizeHEADER_SIZEheader_sizeREQUEST_SIZErequest_sizeresponse_sizerx   infos)r   curlbufferheader_bufferrv   r   crspheader_linesheader_listheader_lineset_cookie_headers
set_cookiecookienamemorselmorselsredirect_url_bytesinfos                      rP   _parse_responseBaseSession._parse_response&  sk    1d))!,-uaii(>(>?@GGI //+CKQYYx/D/D%EFsAIIh.D.D$EF--#-$--/::< $&'K$$&&%%h//00=DDF
 %%d++{/E/Ee/L/LB;.{+ ( k* i [[11,?,J224J'$*LLNLDKKOO%zz(B7#ZZ4#FJJx$89 $  %3	 -  *AT-A-A89		(BUBU8V8V1
++A.8V   MM227;eQYYx/B/B%CDKKMQYYx/D/D%EFE199X->->#?@GGIc199X-@-@#AB/UAIIh>Q>Q4R(ST!#qyy1H1H'IJ!%83H3H)IJ	D188:C !aii0H0H&IJsAIIh.D.D$EFsAIIh.B.B$CDQYYx/D/D%EF--? OODiioCIIdO $ 
E   " 	D188CC	Ds+   B'W&8 W88W= &
W54W5= X! X!c                <    U R                   (       a  [        S5      eg )Nz'Session is closed, cannot send request.)r   r&   r   s    rP   _check_session_closed!BaseSession._check_session_closed|  s    << IJJ rO   c                    U R                   nUR                  S:X  a  UR                  SUS-
  -  -  nOUR                  U-  nUR                  (       a$  U[        R
                  " SUR                  5      -  nU$ )Nr   r   r!   r   )rl   r   r   r   randomuniform)r   attemptr   r   s       rP   _retry_delayBaseSession._retry_delay  sc    ::},NNaGaK&89ENNW,E??V^^C99ErO   c                    U R                   $ r   )r   r9  s    rP   rX   BaseSession.cookies  s    }}rO   c                $    [        U5      U l        g r   )r"   r   )r   rX   s     rP   rX   rC    s      (rO   )r   r   rp   ri   rZ   r`   r~   rx   rw   r{   rv   rt   r   rs   rV   rz   rn   r|   ro   rk   rb   rq   r\   r_   r   r   rl   rf   rg   rd   )<rV   rU   rX   rW   rZ   rY   r\   r[   r^   r]   r_   rY   r`   r]   rb   zOptional[dict[str, object]]rd   rc   rf   re   rg   rc   ri   rh   rk   rj   rl   #Optional[Union[int, RetryStrategy]]rn   rm   ro   r]   rp   r]   rq   r]   rs   rr   rt   rc   rv   ru   rw   zOptional[dict[CurlOpt, str]]rx   zOptional[list[object]]rz   ry   r{   rc   r|   r]   r~   r}   r   r   r   rc   r   rc   )r&  r   r'  r   r(  r   rv   ru   r   rc   returnr:   )r?  rj   rF  r   )rF  r"   )rX   r#   rF  None)rI   rJ   rK   rL   __doc__r   r6  r:  r@  propertyrX   setterrN   rG   rO   rP   r   r      s5   W
 *.)-*.'+#04"&.2578<5648! $"DH $?F59-1MQ#'6:,0 %!&AW 'W '	W
 (W %W W .W  W ,W W 3W W 6W W  3!W" 2#W$ %W& 'W( )W* B+W, -W. =/W0 31W2 +3W4 K5W6 7W8 !9W: 4;W< *=W> ?W@ AWrTT T 	T
 =T T 
TlK   ^^) )rO   r   c                     ^  \ rS rSrSr   S         SU 4S jjjr\S 5       r\S 5       rS r	S S jr
S S	 jr\        S!S
 j5       r    S"   S#S jjrS$S jrSSSSSSS\SSSSSSSSSSSSSSSSSSSSSSSS4                                                                      S%S jjrSSSSSSS\SSSSSSSSSSSSSSSSSSSSSSSS4                                                                    S&S jjrS'S jrS'S jrS'S jrS'S jrS'S jrS'S jrS'S jrS'S jrS'S jrSrU =r$ )(Sessioni  zA 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.Nc                p  > [         TU ]  " S0 UD6  X l        X0l        SU l        SU l        U(       ac  [        R                  " 5       U l        U(       a  SU l	        XR                  l
        gSU l	        [        U R                  S9U R                  l
        gU(       a  UO[        U R                  S9U l        g)a	  
Parameters set in the ``__init__`` method will be overridden 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. Can be a bool, a
        ``CurlFollow`` value, or the string ``"safe"``. Use
        ``CurlFollow.SAFE`` or ``"safe"`` to reject redirects to
        internal/private IP addresses (SSRF protection).
    max_redirects: max redirect counts, default 30, use -1 for unlimited.
    retry: number of retries or ``RetryStrategy`` for failed requests.
    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.
    perk: perk 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.
    raise_for_status: automatically raise an HTTPError for 4xx and 5xx
        status codes.

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r{   rG   )superr   _thread_use_thread_local_curlr   	_executor	threadinglocal_local_is_customized_curlr&  r   r{   _curl)r   r&  threaduse_thread_local_curlr   	__class__s        rP   r   Session.__init__  s    z 	"6"&;# #//+DK+/(#' +0(#'djj#9 !%4djj+ADJrO   c                :   U R                   (       a  U R                  (       a  [        R                  " S[        SS9  [        U R                  SS 5      (       d"  [        U R                  S9U R                  l	        U R                  R                  $ U R                  $ )Nz/Creating fresh curl handle in different thread.r   )
stacklevelr&  rN  )rQ  rV  warningswarnr    getattrrU  r   r{   r&  rW  r9  s    rP   r&  Session.curl  sm    &&''E# 
 4;;55#'djj#9 ;;###::rO   c                R    U R                   c  [        5       U l         U R                   $ r   )rR  r   r9  s    rP   executorSession.executor  s     >>!/1DN~~rO   c                    U $ r   rG   r9  s    rP   	__enter__Session.__enter__  s    rO   c                $    U R                  5         g r   closer   r   s     rP   __exit__Session.__exit__  s    

rO   c                F    SU l         U R                  R                  5         g)Close the session.TN)r   r&  rj  r9  s    rP   rj  Session.close   s    		rO   c              +     #    U R                   " SXS.UDSS0D6n Uv   UR                  5         g! UR                  5         f = f7f)z6Equivalent to ``with request(..., stream=True) as r:``methodr   r   TNrG   )requestrj  r   rs  r   r   r*  s        rP   r   Session.stream  s>      llI&IVIDI	IIIKCIIKs   A1 AAAc           	        U R                  5         U R                  R                  5       nU R                  R                  5         [	        UUUUUU R
                  S9n[        [        S-  UR                  S5      5      n	U	b+  [        U R                  5      n
U
R                  U	5        XS'   OU R                  US'   UR                  " U40 UD6  U$ )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_closer{   NrX   )r:  r&  	duphandleresetr5   r{   r   r"   r   rX   updateconnect)r   r   rx  ry  rz  r{  r   r&  rE   user_cookiesmerged_cookiess              rP   
ws_connectSession.ws_connect  s    2 	""$yy""$		!!**
 GdNFJJy,AB#$T\\2N!!,/ .9 $F9


3!&!	rO   c                6    U R                   R                  5       $ r   )r&  upkeepr9  s    rP   r  Session.upkeepF  s    yy!!rO   gzip, deflate, brr   r   r   Fc#           	     0	  ^ ^^"^-^.^/^0^1^2 U(       a5  T R                   R                  5       m.T R                   R                  5       n#OT R                   m.[        T.40 SU_SU_ST R                  U/_ST R
                  _SU_SU_ST R                  U/_ST R                  U/_S	U_S
U	=(       d    T R                  _SU
[        L a  T R                  OU
_SUc  T R                  OU_SUc  T R                  OU_ST R                  U/_SU_SU=(       d    T R                  _ST R                  U/_SU_SU_SU_SU=(       d    T R                   _SU=(       d    T R"                  _SU=(       d    T R$                  _SU=(       d    T R&                  _SU=(       d    T R(                  _SUc  T R*                  OU_SU_SU=(       d    T R,                  _SU=(       d    T R.                  _SU_SU _S U!_S!U=(       d    T R0                  _S"T R2                  _S#[4        R6                  _S$[8        R:                  _6u  m2m-m/m1m0n$U(       a  U-U.UU"U/U0U1U2U 4	S% jn%T R<                  R?                  U%5      n&T0RA                  5         T RC                  T.T-T/TT"5      n'[E        T15      n([G        U([H        5      (       a9  U$(       a  U$RK                  5         U&RM                  5         T.RO                  5         U(eT2U'l(        U&U'l)        U$U'l*        T1U'l        T RV                  (       a  U'RW                  5         U'$  T RX                  S&:X  a*  S'S K-n)U)R\                  R_                  T.R`                  5        OfT RX                  S(:X  aF  S'S K1n*U*Re                  5       Rf                  Ri                  T.R`                  5      Rk                  5         OT.Ra                  5         T RC                  T.T-T/TT"5      n'T2U'l(        T RV                  (       a  U'RW                  5         U'T.R                  5         $ ! [l         a^  n+T RC                  T.T-T/TT"5      n'T2U'l(        [o        U+Rp                  [s        U+5      5      n,U," [s        U+5      U+Rp                  U'5      U+eS n+A+ff = f! T.R                  5         f = f))Nrs  r   params_listr`   r   r   headers_listcookies_listr   rZ   rf   ri   rk   proxies_listr^   r_   verify_listr   r   r   rn   ro   rp   rq   rs   rt   r   rz   r|   r   r   r   r~   rw   queue_classevent_classc                   >	  TR                  5         [        [        R                  T5      R                  5       (       d(  [        [        R                  T5      R                  5         TR                  [        5        g ! [         aU  n T
R                  TTTTT5      nT	Ul        TR	                  [        [        U 5      U R                  U5      5         S n A NS n A ff = f! [        [        R                  T5      R                  5       (       d(  [        [        R                  T5      R                  5         TR                  [        5        f = fr   )performr   r6  rt  
put_nowaitr%   rA   coder   rS  Eventis_setr  putr-   )er*  r'  r)  rv   r   r(  header_recvedr   reqr   s     rP   r  &Session._request_once.<locals>.perform  s    &IIK  	?FFHHY__m<@@BEE*% ! H..6=2BOC #&CKLL!1#a&!&&#!FGGH  	?FFHHY__m<@@BEE*%s+   A> >
CACC  CC   A,Er   r   r   ):r&  r|  r}  r2   rb   r`   rV   r   rZ   r/   rf   ri   rk   r\   r_   rd   rn   ro   rp   rq   rs   rt   rz   r|   r~   rw   r   QueuerS  r  rc  submitwaitr6  r   r   r%   r  resultrj  rt  stream_taskquit_nowr   rP  eventlet.tpooltpoolexecuter  r   get_hub
threadpoolspawnr   r   r'   r  rA   )3r   rs  r   rb   r   r   rV   rX   r   rZ   rf   ri   rk   r\   r^   r_   rd   r   r   r   rn   ro   rp   rq   rs   rt   rv   r   rz   r|   r~   r   r   r   r   _r  r  r  r*  first_elementr   r   r  errorr'  r)  r(  r  r   r  s3   `                         `       `          @@@@@@rP   _request_onceSession._request_onceI  s   T 		##%A		!A		AAQ,B
,B
 ,B
 f-	,B

 ]],B
 ,B
 ,B
 ,,0,B
 --1,B
 ,B
 ",B
 %,w$6DLLG,B
 )8(?$$_,B
" '4&;""#,B
& ,,0',B
( ),B
* "4T__+,B
, f--,B
. /,B
0 ,1,B
2 .3,B
4 $7t'7'75,B
6 txx7,B
8 (T[[9,B
: ";,B
< .=,B
@ )8(?$$_A,B
D E,B
F &:):):G,B
H  14>>I,B
J K,B
L *M,B
N  O,B
P "Q,B
R **S,B
T U,B
V "W,B
>V]A}h\ & & --..w7K  &&6=*:OC
 (NM-)9::LLN""$	##CK)CO#CLCI$$$$&J<<:-)NN**1995\\X-!NN$//55aii@DDFIIK **v}.> "((((*	!  8**v}.> ""1663q62CFAFFC0a78  	s,   )B P 	>R 
R "AQ;;R  R Rc#                   U R                  5         U R                  n#[        U#R                  S-   5       Hz  n$ U R                  " S%0 SU_SU_SU_SU_SU_SU_SU_S	U_S
U	_SU
_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_S U_S!U _S"U!_S#U"_6s  $    g$! [
         aI    U$U#R                  :X  a  e U R                  U$S-   5      n%U%(       a  [        R                  " U%5         M   M  f = f)&zESend the request, see ``requests.request`` for details on parameters.r!   rs  r   rb   r   r   rV   rX   r   rZ   rf   ri   rk   r\   r^   r_   rd   r   r   r   rn   ro   rp   rq   rs   rt   rv   r   rz   r|   r~   r   r   r   r   NrG   )	r:  rl   ranger   r  r%   r@  timesleep&r   rs  r   rb   r   r   rV   rX   r   rZ   rf   ri   rk   r\   r^   r_   rd   r   r   r   rn   ro   rp   rq   rs   rt   rv   r   rz   r|   r~   r   r   r   r   r   r?  r   s&                                         rP   rt  Session.request  s   N 	""$::X^^a/0G*&)) #!## "# 	#
 # $# $#  # # $# %4# #0# $#  #  *#  "!#" $##$ %4%#& &6'#( !,)#* +#, "-#. /#0 &1#2 %43#4 &65#6  7#8 ".9#: (;#< =#> "?#@ $2A#B (C#D %4E# # 1L $ &hnn,))'A+6JJu% 	&s   A5B44ADDc                ,    U R                   " SSUS.UD6$ Nr   rr  rG   rt  r   r   r   s      rP   headSession.headF      ||=6s=f==rO   c                ,    U R                   " SSUS.UD6$ Nr   rr  rG   r  r  s      rP   r   Session.getI      ||<5c<V<<rO   c                ,    U R                   " SSUS.UD6$ Nr   rr  rG   r  r  s      rP   postSession.postL  r  rO   c                ,    U R                   " SSUS.UD6$ Nr   rr  rG   r  r  s      rP   r  Session.putO  r  rO   c                ,    U R                   " SSUS.UD6$ Nr   rr  rG   r  r  s      rP   patchSession.patchR      ||>7>v>>rO   c                ,    U R                   " SSUS.UD6$ Nr   rr  rG   r  r  s      rP   deleteSession.deleteU  s    ||?8???rO   c                ,    U R                   " SSUS.UD6$ Nr   rr  rG   r  r  s      rP   optionsSession.optionsX  s    ||@9#@@@rO   c                ,    U R                   " SSUS.UD6$ Nr   rr  rG   r  r  s      rP   traceSession.trace[  r  rO   c                ,    U R                   " SSUS.UD6$ Nr   rr  rG   r  r  s      rP   querySession.query^  r  rO   )r   rW  rR  rV  rU  r   rP  rQ  )NNT)
r&  zOptional[Curl]rX  zOptional[ThreadType]rY  rc   r   Unpack[BaseSessionParams[R]]rF  rG  rF  rG  )rs  
HttpMethodr   rA   r   Unpack[StreamRequestParams]rF  zGenerator[R, None, None])NNNN)r   rA   rF  r5   )rF  rj   )Frs  r  r   rA   rb   zDOptional[Union[dict[str, object], list[object], tuple[object, ...]]]r   zNOptional[Union[dict[str, str], list[tuple[object, ...]], str, BytesIO, bytes]]r   r   rV   rU   rX   rW   r   ra   rZ   rY   rf   r   ri   r   rk   r   r\   r[   r^   r]   r_   rY   rd   r   r   r]   r   r]   r   zOptional[Callable[..., object]]rn   rm   ro   r]   rp   r]   rq   r]   rs   rr   rt   r   rv   ru   r   r   rz   +CurlHttpVersion | HttpVersionLiteral | Noner|   r]   r~   r}   r   r   r   rj   r   r   r   rc   rF  r:   )Drs  r  r   rA   rb   r   r   r   r   r   rV   rU   rX   rW   r   ra   rZ   rY   rf   r   ri   r   rk   r   r\   r[   r^   r]   r_   rY   rd   r   r   r]   r   r]   r   r   rn   rm   ro   r]   rp   r]   rq   r]   rs   rr   rt   r   rv   ru   r   r   rz   ry   r|   r]   r~   r}   r   r   r   rj   r   r   r   rc   r   rA   r   zUnpack[RequestParams]rF  r:   )rI   rJ   rK   rL   rH  r   rI  r&  rc  rf  rl  rj  r	   r   r  r  r/   r  rt  r  r   r  r  r  r  r  r  r  rN   __classcell__rZ  s   @rP   rL  rL    s   T
  $'+&*	KBKB %KB  $	KB
 /KB 
KB KBZ    

   .	
 
"   11 
1f"  &*)-)- $*.GNBF'+'+#04!%!%)<<@48! $"DH*.?F,.DH#'6:!%(, %Odd d
	d
d $d 'd 'd d (d Ed  @!d" %#d$ %%d& 'd( .)d* +d, -d. '/d0 :1d2 23d4 5d6 7d8 9d: B;d< (=d> =?d@ *AdB BCdD !EdF 4GdH IdJ KdL &MdN OdP 
QdT 6:RV&*)-)- $*.GNBF'+'+#04!%!%)</348! $"DH*.?F,.MQ#'6:!%(, %GU&U& U& 3	U&
 PU& $U& 'U& 'U& U& (U& EU& @U& %U& %U& U&  .!U&" #U&$ %U&& ''U&( -)U&* 2+U&, -U&. /U&0 1U&2 B3U&4 (5U&6 =7U&8 *9U&: K;U&< !=U&> 4?U&@ AU&B CU&D &EU&F GU&n>=>=?@A?? ?rO   rL  c            $        ^  \ rS rSrSrSSSS.         S)U 4S jjjr\S*S j5       r\S+S j5       rS	 r	S,S
 jr
S-S jrS rS.S jrS.S jrS/S jr\        S0S j5       rSSSSS\SSSSSSSSSSSSSSSSSSSSSSSSSSSSSS4$                                                                           S1S jjrSSSSSSS\SSSSSSSSSSSSSSSSSSSSSSSS4                                                                      S2S jjrSSSSSSS\SSSSSSSSSSSSSSSSSSSSSSSS4                                                                      S2S jjrS3S jrS3S  jrS3S! jrS3S" jrS3S# jrS3S$ jrS3S% jrS3S& jrS3S' jrS(rU =r $ )4AsyncSessionib  zAAn async request session, cookies and connections will be reused.N
   )loop
async_curlmax_clientsc               j   > [         TU ]  " S0 UD6  Xl        X l        X0l        U R                  5         g)a[
  
Parameters set in the ``__init__`` method are overridden 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. Can be a bool, a
        ``CurlFollow`` value, or the string ``"safe"``. Use
        ``CurlFollow.SAFE`` or ``"safe"`` to reject redirects to
        internal/private IP addresses (SSRF protection).
    max_redirects: max redirect counts, default 30, use -1 for unlimited.
    retry: number of retries or ``RetryStrategy`` for failed requests.
    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.
    perk: perk 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.
    raise_for_status: automatically raise an HTTPError for 4xx and 5xx
        status codes.

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.
NrG   )rO  r   _loop_acurlr  	init_pool)r   r  r  r  r   rZ  s        rP   r   AsyncSession.__init__e  s0    B 	"6"7;
(2 +rO   c                h    U R                   c  [        R                  " 5       U l         U R                   $ )z"Returns a reference to event loop.)r  asyncioget_running_loopr9  s    rP   r  AsyncSession.loop  s(     :: 113DJzzrO   c                d    U R                   c  [        U R                  S9U l         U R                   $ )N)r  )r  r   r  r9  s    rP   acurlAsyncSession.acurl  s&    ;;#3DK{{rO   c                    [         R                  " U R                  5      U l          U R                  R	                  S 5        M  ! [         R
                   a     g f = fr   )r  	LifoQueuer  poolr  	QueueFullr9  s    rP   r  AsyncSession.init_pool  sS    4;4E4EdFVFV4W			$$T*  $$ s   A AAc                   #    U R                   R                  5       I S h  vN nUc  [        U R                  S9nU$  N7f)NrN  )r  r   r   r{   r   r&  s     rP   pop_curlAsyncSession.pop_curl  s4     "&))--/1<djj)D 2s   ?=?c                    [        [        R                  5         U R                  R	                  U5        S S S 5        g ! , (       d  f       g = fr   )r
   r  r  r  r  r  s     rP   	push_curlAsyncSession.push_curl  s.    g''(II  & )((s	   ?
Ac                   #    U $ 7fr   rG   r9  s    rP   
__aenter__AsyncSession.__aenter__  s
     s   c                @   #    U R                  5       I S h  vN   g  N7fr   ri  rk  s     rP   	__aexit__AsyncSession.__aexit__  s     jjl 	s   c                   #    U R                   R                  5       I Sh  vN   SU l          U R                  R	                  5       nU(       a  UR                  5         M4   N@! [
        R                   a     gf = f7f)ro  NT)r  rj  r   r  
get_nowaitr  
QueueEmptyr  s     rP   rj  AsyncSession.close  sk     jj   yy++-JJL	  	! %% s2   A=A!A=1A# A=#A:7A=9A::A=c                    UR                  5         U R                  (       d=  U R                  R                  U5        UR	                  5         U R                  U5        g UR                  5         g r   )clean_handles_and_buffersr   r  remove_handler}  r  rj  r  s     rP   release_curlAsyncSession.release_curl  sE    &&(||JJ$$T*JJLNN4 JJLrO   c                  #    U R                   " SXS.UDSS0D6I Sh  vN n U7v   UR                  5       I Sh  vN   g N# N! UR                  5       I Sh  vN    f = f7f)z<Equivalent to ``async with request(..., stream=True) as r:``rr  r   TNrG   )rt  acloseru  s        rP   r   AsyncSession.stream  sX      LLOO6O$OO	I**,	 P #**,sA   A$AA$A A$AA$A$A!AA!!A$Tr  r   r          Fg{Gzt?gMbP?i  @ c&           &        ^ ^^^^^^^^^	^
^^^^^^^^^^^^^^^^^^^^^ ^!^"^#^$^% SUUUUUU$UUUU%UU#UUUUUUU"UU	UUU
UUUUU UU UU!UUUU4%S jjn&[        U&" 5       5      $ )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. Can be a bool, a
        ``CurlFollow`` value, or the string ``"safe"``. Use
        ``CurlFollow.SAFE`` or ``"safe"`` to reject redirects to
        internal/private IP addresses (SSRF protection).
    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.
    perk: perk 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 string, 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.
    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.
    recv_queue_size: The maximum number of incoming WebSocket
        messages to buffer internally. This queue stores messages received by
        the Curl socket that are waiting to be consumed on calling ``recv()``.
    send_queue_size: The maximum number of outgoing WebSocket
        messages to buffer before applying network backpressure. When you call
        ``send()`` the message is placed in this queue and transmitted when
        the Curl socket is next available for sending.
    max_send_batch_size: The max batch size for sent frames.
    coalesce_frames: When set, multiple pending messages in the send queue
        may be merged into a single WebSocket frame for improved throughput.
        **Warning:** This breaks the one-to-one mapping of ``send()`` calls
        to frames and should only be used when the application protocol is
        designed to handle concatenated data streams. Defaults to ``False``.
    ws_retry (WebSocketRetryStrategy): Retry policy for WebSocket messages.
    recv_time_slice: The maximum duration (in seconds) to process incoming
        messages before yielding to the event loop.
        Defaults to ``0.005`` (5ms).
    send_time_slice: The maximum duration (in seconds) to process outgoing
        messages before yielding to the event loop.
        Defaults to ``0.001`` (1ms).
    max_message_size: Maximum allowed size for a complete received
        WebSocket message (default: ``4 MiB``).
    drain_on_error: If ``True``, when a connection error occurs,
    attempt to consume all the buffered received messages first,
    before raising the error. Otherwise, raise it immediately (default).
    block_on_recv_queue_full (bool, optional): If ``False``, the connection
        is failed immediately when the receive queue is full. The message that
        caused the overflow is not delivered; any messages already buffered may
        still be drained if ``drain_on_error=True``.
    curl_options: extra curl options to use.
c                   >%#    T!R                  5         T!R                  5       I S h  vN n [        S#0 SU _SS_ST%_ST!R                  _ST!R                  T/_ST!R
                  T/_ST!R                  T/_S	T=(       d    T!R                  _S
T$[        L a  T!R                  OT$_STc  T!R                  OT_STc  T!R                  OT_ST!R                  T/_ST_ST=(       d    T!R                  _ST!R                  T&/_ST _ST_ST=(       d    T!R                  _ST=(       d    T!R                   _ST=(       d    T!R"                  _ST=(       d    T!R$                  _STc  T!R&                  OT_ST_ST=(       d    T!R(                  _ST=(       d    T!R*                  _ST_ST	=(       d    T!R,                  _S[.        R0                  _S[.        R2                  _ST_6nU R5                  [6        R8                  S 5      nU R5                  [6        R:                  S!5      n T!R<                  R?                  S U R@                  5      I S h  vN n[I        [K        [L        [N           T!5      U TTT"TT
T'TT#TTTT!RP                  S"9n URS                  5         U$  GNn NO! [B         a#    U RE                  5         T!RG                  S 5        e f = f! [T         a    URW                  5         e f = f7f)$Nr&  rs  r   r   r`   r  r  r  rZ   rf   ri   rk   r  r^   r_   r  r   r   rn   ro   rp   rs   rt   r   rz   r|   r   r~   r  r  rw   r!   r   )	autocloserecv_queue_sizesend_queue_sizemax_send_batch_sizecoalesce_framesws_retryrecv_time_slicesend_time_slicemax_message_sizedrain_on_errorblock_on_recv_queue_fullr{   rG   ),r:  r  r2   r`   rb   rV   rX   rZ   r/   rf   ri   rk   r\   r_   rd   rn   ro   rp   rs   rt   rz   r|   r~   r  r  r  setoptr   TCP_NODELAYCONNECT_ONLYr  run_in_executorr  r	  rj  r  r3   r   r  r.   r{   _start_io_tasksr6   	terminate)(r&  r  rE   r   rp   ri   rZ   r  r  r~   r  rX   rw   rt   r  rs   rV   rz   rn   r|   ro   r  r   rk   r  rb   r\   r^   r_   r   r  r  r   r   r  r  rf   r   rd   r  s(      rP   _connect_coro.AsyncSession.ws_connect.<locals>._connect_corod  s,    &&(#}}.D  %%% % 	%
 "[[&1% #llG4% #llG4% &TYY% )07(:% -<,CD((% +8*?D&&]%  #llG4!%" #%$ &8%%& "[[&1'%(  )%* !0+%, (;4+;+;-%. O488/%0 ,1%2 "2T]]3%6 -<,CD((7%: ;%< *>T->->=%> $5t~~?%@  .A%B &TYYC%D $MME%F $MMG%H *I%AL G//3A$$A
))33D$,,GG "0\(+T2# / /$7 /! / /!1-)Ajj"B"""$
 IW /\ H 

t$0 " sR   $K)JG6K))J J	J 5K)K
 K)J -KK)
K&&K))rF  r3   )r4   )'r   r   r  rb   rV   rX   rZ   rf   ri   rk   r\   r^   r_   rd   r   r   rn   ro   rp   rq   rs   rt   r   rz   r|   r~   r   r  r  r  r  r  r  r  r  r  r  rw   r&  s'   ``````````````````` `````````````````` rP   r  AsyncSession.ws_connect  s<    ^N	 N	 N	 N	 N	 N	` %]_55rO   r   c#                ^  ^ ^^"^+^,^-^.^/^0^1#    T R                  5       I S h  vN m,[        S(0 ST,_SU_SU_ST R                  U/_ST R                  _SU_SU_ST R                  U/_S	T R
                  U/_S
U_SU	=(       d    T R                  _SU
[        L a  T R                  OU
_SUc  T R                  OU_SUc  T R                  OU_ST R                  U/_SU_SU=(       d    T R                  _ST R                  U/_SU_SU_SU_SU=(       d    T R                  _SU=(       d    T R                  _SU=(       d    T R                   _SU=(       d    T R"                  _SU=(       d    T R$                  _SUc  T R&                  OU_SU_SU=(       d    T R(                  _SU=(       d    T R*                  _SU_S U _S!U!_S"U=(       d    T R,                  _S#T R.                  _S$[0        R2                  _S%[0        R4                  _6u  m0m+m-m/m.n#U(       Ga  T R6                  R9                  T,5      m1S)U+U,UU"U-U.U/U0U U14
S& jjn$U,U 4S' jn%[0        R:                  " U$" 5       5      n&U&R=                  U%5        [?        [0        R4                  T.5      RA                  5       I S h  vN   T RC                  T,T+T-TT"5      n'[E        T/5      n([G        U([H        5      (       a  T RK                  T,5        U(eT0U'l&        U&U'l'        U#U'l(        T/U'l)        T RT                  (       a  U'RU                  5         U'$  T R6                  R9                  T,5      m1T1I S h  vN   T RC                  T,T+T-TT"5      n'T0U'l&        T RT                  (       a  U'RU                  5         U'T RK                  T,5        $  GN GN NZ! [V         a^  n)T RC                  T,T+T-TT"5      n'T0U'l&        [Y        U)RZ                  []        U)5      5      n*U*" []        U)5      U)RZ                  U'5      U)eS n)A)ff = f! T RK                  T,5        f = f7f)*Nr&  rs  r   r  r`   r   r   r  r  r   rZ   rf   ri   rk   r  r^   r_   r  r   r   r   rn   ro   rp   rq   rs   rt   r   rz   r|   r   r   r   r~   rw   r  r  c                   >
#     TI S h  vN   [        [        R                  T5      R                  5       (       d(  [        [        R                  T5      R                  5         TR                  [        5      I S h  vN   g  Nw! [          aU  n T
R                  TTTTT5      nT	Ul        TR                  [	        [        U 5      U R                  U5      5         S n A NS n A ff = f Ni! [        [        R                  T5      R                  5       (       d(  [        [        R                  T5      R                  5         TR                  [        5      I S h  vN    f = f7fr   )r   r6  rt  r  r%   rA   r  r   r  r  r  r  r  r-   )r  r*  r'  r&  rv   r   r(  r  r   r  r   tasks     rP   r  +AsyncSession._request_once.<locals>.perform  s     ,JJ  }=DDFFW]]M:>>@%%
+++   H..fm5EC #&CKLL!1#a&!&&#!FGGH ,  }=DDFFW]]M:>>@%%
+++sj   E B BB A-E <C&=E B 
C#ACC( C##C( &E (A.EEEE c                (   > TR                  T5        g r   )r  )futr&  r   s    rP   cleanup+AsyncSession._request_once.<locals>.cleanup  s    !!$'rO   rG   r  )/r  r2   rb   r`   rV   rX   rZ   r/   rf   ri   rk   r\   r_   rd   rn   ro   rp   rq   rs   rt   rz   r|   r~   rw   r  r  r  r  
add_handlecreate_taskadd_done_callbackr   r  r6  r   r   r%   r  rt  astream_taskr  r   r   r   r'   r  rA   )2r   rs  r   rb   r   r   rV   rX   r   rZ   rf   ri   rk   r\   r^   r_   rd   r   r   r   rn   ro   rp   rq   rs   rt   rv   r   rz   r|   r~   r   r   r   r   r  r  r/  r  r*  r  r  r  r'  r&  r(  r  r   r  r+  s2   `                         `       `        @@@@@@@rP   r  AsyncSession._request_once  s    J ]]_$AQ ,B
,B
,B
 ,B
 f-	,B

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

 **&-1A? "((((*!!$'_ %J <2  8**&-1A? ""1663q62CFAFFC0a78  !!$'sl   P-N$JP-"N'#BP-/ N, N*N, >P P-'P-*N, ,
P6APPP P**P-c#                B  #    U R                  5         U R                  n#[        U#R                  S-   5       H  n$ U R                  " S%0 SU_SU_SU_SU_SU_SU_SU_S	U_S
U	_SU
_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_SU_S U_S!U _S"U!_S#U"_6I S$h  vN s  $    g$ N	! [
         aR    U$U#R                  :X  a  e U R                  U$S-   5      n%U%(       a"  [        R                  " U%5      I S$h  vN     M   M  f = f7f)&zISend the request, see ``curl_cffi.requests.request`` for details on args.r!   rs  r   rb   r   r   rV   rX   r   rZ   rf   ri   rk   r\   r^   r_   rd   r   r   r   rn   ro   rp   rq   rs   rt   rv   r   rz   r|   r~   r   r   r   r   NrG   )	r:  rl   r  r   r  r%   r@  r  r  r  s&                                         rP   rt  AsyncSession.requestL  s    N 	""$::X^^a/0G*/!// #!## "# 	#
 # $# $#  # # $# %4# #0# $#  #  *#  "!#" $##$ %4%#& &6'#( !,)#* +#, "-#. /#0 &1#2 %43#4 &65#6  7#8 ".9#: (;#< =#> "?#@ $2A#B (C#D %4E# # # 1#H $ /hnn,))'A+6!--... 	/sH   8DA9C 4B>5C 8D>C  ADDDDDDc                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r  AsyncSession.head  $     \\CSCFCCCC   " "c                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r   AsyncSession.get  $     \\BCB6BBBBr;  c                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r  AsyncSession.post  r:  r;  c                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r  AsyncSession.put  r>  r;  c                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r  AsyncSession.patch  $     \\DcDVDDDDr;  c                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r  AsyncSession.delete  s$     \\EsEfEEEEr;  c                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r  AsyncSession.options  s$     \\FFvFFFFr;  c                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r  AsyncSession.trace  rE  r;  c                H   #    U R                   " SSUS.UD6I S h  vN $  N7fr  r  r  s      rP   r  AsyncSession.query  rE  r;  )r  r   r  r  r  )
r  z asyncio.AbstractEventLoop | Noner  zAsyncCurl | Noner  rj   r   r  rF  rG  )rF  zasyncio.AbstractEventLoop)rF  r   )rF  r   )r&  zCurl | NonerF  rG  r  )r&  r   rF  rG  )rs  r  r   rA   r   r  rF  zAsyncGenerator[R, None, None])Lr   rA   r  rc   rb   z<dict[str, object] | list[object] | tuple[object, ...] | NonerV   zHeaderTypes | NonerX   zCookieTypes | NonerZ   tuple[str, str] | Nonerf   z/float | tuple[float, float] | NotSetType | Noneri   zbool | CurlFollow | str | Nonerk   z
int | Noner\   zProxySpec | Noner^   
str | Noner_   rN  rd   bool | Noner   rO  r   rO  rn   zBrowserTypeLiteral | Nonero   rO  rp   rO  rq   rO  rs   z&ExtraFingerprints | ExtraFpDict | Nonert   rP  r   zstr | Literal[False]rz   r  r|   rO  r~   zstr | tuple[str, str] | Noner   rj   r  rj   r  rj   r  rj   r  rc   r  zWebSocketRetryStrategy | Noner  r   r  r   r  rj   r  rc   r  rc   rw   zdict[CurlOpt, str] | NonerF  r4   )Frs  r  r   rA   rb   r   r   r   r   r   rV   rU   rX   rW   r   ra   rZ   rY   rf   r   ri   r   rk   r   r\   r[   r^   r]   r_   rY   rd   r   r   r]   r   r]   r   r   rn   rm   ro   r]   rp   r]   rq   r]   rs   rr   rt   r   rv   ru   r   r   rz   ry   r|   r]   r~   r}   r   r   r   rj   r   r   r   rc   rF  r:   r  )!rI   rJ   rK   rL   rH  r   rI  r  r  r  r  r  r   r  rj  r  r   r   r/   r  r  rt  r  r   r  r  r  r  r  r  r  rN   r  r  s   @rP   r  r  b  s/   K
 26'+E /E %	E
 E /E 
E EN    
'
   .	
 
'   OS&*&*'+CJ:>$($( -1""&915!;?'+&(DH $-1!!#% %26!&!& /$)-26M66 6 M	6
 $6 $6 %6 A6 86 "6 "6 6 +6 6 6  $!6" /#6$ %6& '6( )6* 9+6, %-6. $/60 B162 364 +566 768 96: ;6< !=6> ?6@ 0A6B C6D E6F G6H I6J #'K6L 0M6N 
O6J 6:RV&*)-)- $*.GNBF'+'+#04!%!%)</348! $"DH*.?F,.MQ#'6:!%(, %GT(T( T( 3	T(
 PT( $T( 'T( 'T( T( (T( ET( @T( %T( %T( T(  .!T(" #T($ %T(& ''T(( -)T(* 2+T(, -T(. /T(0 1T(2 B3T(4 (5T(6 =7T(8 *9T(: K;T(< !=T(> 4?T(@ AT(B CT(D &ET(F GT(H 
IT(t 6:RV&*)-)- $*.GNBF'+'+#04!%!%)</348! $"DH*.?F,.MQ#'6:!%(, %GU/U/ U/ 3	U/
 PU/ $U/ 'U/ 'U/ U/ (U/ EU/ @U/ %U/ %U/ U/  .!U/" #U/$ %U/& ''U/( -)U/* 2+U/, -U/. /U/0 1U/2 B3U/4 (5U/6 =7U/8 *9U/: K;U/< !=U/> 4?U/@ AU/B CU/D &EU/F GU/H 
IU/nDCDCEFGEE ErO   r  )r   rA   rF  rc   r   )r   zqueue.Queue)r   zasyncio.Queue)rl   rE  rF  r   )f
__future__r   r  http.cookiesrC   r   r   r=  sysrS  r  r^  collections.abcr   r   r   concurrent.futuresr   
contextlibr   r	   r
   dataclassesr   datetimer   ior   typingr   r   r   r   r   r   r   r   urllib.parser   aior   constr   r   r   r   r&  r   r   r   utilsr    rX   r"   r#   r$   
exceptionsr%   r&   r'   rV   r(   r)   rn   r*   r+   r,   modelsr-   r.   r/   r0   r1   r2   
websocketsr3   r4   r5   r6   r7   version_infor:   typing_extensionsr=   r?   rS   r   r   r   dictrA   
ThreadTyper  r   r   r   r   r   r   r   rL  r  rG   rO   rP   <module>rf     s   "   	   
    ? ? 1 D D !  	 	 	 "  B B , , # 5 5 C C ) K K ( L L  w8X6A8$A(IU GAJ	 @iu B+5 
 
 YFS#XI!)2I&)*
P

; ./ % % %(G)'!* G)TK?k!n K?\Z	E;q> Z	ErO   