
    T>qj=                    t   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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 d dlmZ d d	lmZmZmZ d d
l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% g dZ&ede'ef   Z(ddZ)ddZ*ddZ+d dZ,d!dZ-d"dZ.d#dZ/d$dZ0 G d de	      Z1 G d de1      Z2d%dZ3y)&    )annotationsN)ABCabstractmethod)Sequence)suppress)datetime	timedeltatimezone)SimpleCookie)Path)AnyOptionalUnion)	parse_qsl	urlencodeurlsplit
urlunsplit   )CookiesHeaders)RequestResponse)CacheBackend	CacheSpecFileCacheBackendnormalize_cache_backendr   c                J    t        j                  |       j                  d      S Nascii)base64	b64encodedecodevalues    W/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/curl_cffi/requests/cache.py_encode_bytesr'   !   s    E"))'22    c                J    t        j                  | j                  d            S r   )r!   	b64decodeencoder$   s    r&   _decode_bytesr,   %   s    ELL122r(   c                N    t        | D cg c]	  \  }}||f c}}      S c c}}w Nr   )itemskeyr%   s      r&   _deserialize_headersr1   )   s#    59ZS%S%L9::9s   !
c                b    | j                         D cg c]  \  }}||xs dd c}}S c c}}w )N namer%   )multi_items)headersr0   r%   s      r&   _har_headersr8   -   s,    BIBUBUBWXJCS5;B/XXXs   +c                z    t        t        |       j                  d      D cg c]
  \  }}||d c}}S c c}}w )NTkeep_blank_valuesr4   )r   r   query)urlr0   r%   s      r&   _har_query_stringr>   1   s>     $HSM$7$74PC u%  s   7c                     t        j                  t        j                        j	                         j                  dd      S )N+00:00Z)r   nowr
   utc	isoformatreplace r(   r&   _isoformat_nowrG   8   s+    <<%//199(CHHr(   c                h    t        j                  | j                  dd            j                         S )NrA   r@   )r   fromisoformatrE   	timestampr$   s    r&   _parse_har_timestamprK   <   s'    !!%--X">?IIKKr(   c                   t               }| j                  d      D ]  }|s	 t               }|j                  |       |j	                         D ]]  \  }}|j                  ||j                  |j                  dd      |j                  dd      t        |j                  d                   _  |S # t        $ r Y w xY w)Nz
set-cookiedomainr3   path/secure)rM   rN   rP   )
r   get_listr   loadr/   setr%   getbool	Exception)r7   cookies
set_cookieparsedr5   morsels         r&   _response_cookiesr[   @   s    iG&&|4 
	!^FKK
# & fLL!::h3FC0

8 45    N  		s   BB22	B>=B>c                      e Zd Zddd	 	 	 	 	 	 	 ddZddd	 	 	 	 	 	 	 ddZddZef	 	 	 	 	 ddZdd	Zdd
Z	ddZ
ddZddZ	 	 	 	 	 	 	 	 ddZedd       Zedd       Zedd       Zed d       Zy)!r   N)methodsignoredc                   |j                         dk  rt        d      || _        |j                         | _        t	        d |xs dD              | _        t	        |xs d      | _        y )Nr   zexpires must be >= 0c              3  <   K   | ]  }|j                           y wr.   )upper).0methods     r&   	<genexpr>z(CacheBackend.__init__.<locals>.<genexpr>b   s      TF Ts   )GETrF   )total_seconds
ValueErrorexpiresexpires_seconds	frozensetr]   r^   )selfrh   r]   r^   s       r&   __init__zCacheBackend.__init__V   s`       "Q&344&446  Tw?R( TT B/r(   F)streamcontent_callbackc               d    |j                   j                         | j                  v xr	 | xr |du S )z6
        XXX: streamed content is not cached.
        N)rc   ra   r]   )rk   requestrm   rn   s       r&   should_cache_requestz!CacheBackend.should_cache_requeste   s9     NN  "dll2 )
) D(	
r(   c                    |j                   S r.   )ok)rk   responses     r&   should_store_responsez"CacheBackend.should_store_responseu   s    {{r(   c                $   | j                  | j                  |            }|y |d   d   d   }t        |d         }| j                  r6t	        j                         |z
  | j                  kD  r| j                  |       y | j                  |||      S )Nlogentriesr   startedDateTime)_read_payload
_cache_keyrK   ri   timedelete_response_from_payload)rk   rp   response_classpayloadentry
created_ats         r&   rT   zCacheBackend.getx   s    
 $$T__W%=>?y)!,)%0A*BC
TYY[:%=AUAU$UKK **7G^LLr(   c                    | j                  |      sy | j                  |      }| j                  |      }| j                  ||       y r.   )ru   r{   _payload_from_response_write_payload)rk   rp   rt   r0   r   s        r&   rS   zCacheBackend.set   sA    ))(3oog&--h7C)r(   c                D    | j                  | j                  |             y r.   )_delete_payloadr{   )rk   rp   s     r&   r}   zCacheBackend.delete   s    T__W56r(   c                f   | j                  |j                        }t        j                  |j                  xs d      j                         }t        j                  |j                  j                         ||ddd      }t        j                  |j                  d            j                         S )Nr(   )rc   r=   body,:T)
separators	sort_keysutf-8)_normalized_urlr=   hashlibsha256r   	hexdigestjsondumpsrc   ra   r+   )rk   rp   
normalized	body_hashraw_keys        r&   r{   zCacheBackend._cache_key   s    ))'++6
NN7<<#637AAC	**~~++-j)T!

 ~~gnnW56@@BBr(   c           	        t        |      }t        |j                  d      D cg c]  \  }}|| j                  vr||f }}}t	        |j
                  |j                  |j                  t        |d      df      S c c}}w )NTr:   )doseqr3   )	r   r   r<   r^   r   schemenetlocrN   r   )rk   r=   partsr0   r%   r<   s         r&   r   zCacheBackend._normalized_url   s     (tL
U$,,& %L
 

 

%t,
 	

s   A>c                   |j                   }t        |t              sd}dddddt               |j                  j                         dz  |j                  r|j                  j                  nd|j                  r|j                  j                  nddg |j                  rt        |j                  j                        ng |j                  rt        |j                  j                        ng d	|j                  r5|j                  j                  rt        |j                  j                        nd
d|j                  rm|j                  j                  Wd|j                  r&|j                  j                  j                  dd      ndt        |j                  j                        ddini |j                   |j"                  t        |j$                        g t        |j                        t        |j&                        |j                  j                  dd      t        |j&                        dd|j(                  |j*                  |j,                  |j                  ||j.                  |j0                  |j2                  |j4                  |j6                  |j,                  |j8                  |j*                  |j:                  |j<                  dd
i d
|j                  j                         dz  d
ddgdiS )Nr   rw   z1.2	curl_cfficache)r5   versioni  r3   r   )rc   r=   httpVersionrW   r7   queryStringheadersSizebodySizepostDatazContent-Typezapplication/octet-streamr!   )mimeTypetextencoding)sizer   r   r   )r=   default_encodingredirect_count
primary_ipprimary_portlocal_ip
local_portdownload_sizeupload_sizeheader_sizerequest_sizeresponse_size)
status
statusTextr   rW   r7   contentredirectURLr   r   
_curl_cffi)sendwaitreceive)ry   r|   rp   rt   r   timings)r   creatorrx   )r   
isinstancestrrG   elapsedrf   rp   rc   r=   r8   r7   r>   r   lenrT   r'   status_codereasonhttp_versionr   redirect_urlr   r   r   r   r   r   r   r   r   r   )rk   rt   r   s      r&   r   z#CacheBackend._payload_from_response   s   #44*C0&  $/GD ,:+; ( 0 0 > > @4 G <D;K;K 0 0 7 7QS;C;K;K8#3#3#7#7QS+-') $,#3#3 !-X-=-=-E-E F%' $,#3#3 !2(2B2B2F2F G%'+- $,#3#38H8H8M8M !$H$4$4$9$9 :%&+,$N %-$4$4(0(8(8(=(=(I %/ 08/?/?	 -5,<,<,D,D,H,H0>0J-.
 2L0=h>N>N>S>S0T4<1&!"$ &(U,$\ '/&:&:*2//+.x/D/D+E')'3H4D4D'E(+H,<,<(=,4,<,<,@,@$2$>-" )6h6F6F(G,4( ,4+@+@+3+?+?(0(>(>'/||4D2:2I2I.6.A.A080E0E,4,=,=.6.A.A191G1G/7/C/C/7/C/C080E0E191G1G+% %B "$$%$,$4$4$B$B$Dt$K'($eWY]_
 _	
r(   c                2   |d   d   d   }|d   }|j                  di       }|d   D cg c]&  }|j                  dd      |j                  d	d      g( }}t        |      }		  ||
      }
|j                  d|j                        |
_        t        |d   d         |
_        t        |d         |
_        |j                  dd      |
_	        d|
j                  cxk  xr dk  nc |
_
        |	|
_        t        |
j                        |
_        |j                  dd      |
_        t        t!        |j                  dd                  |
_        t        |j                  dd            |
_        |j                  dd      |
_        t        |j                  dd      xs d      |
_        |j                  dd      |
_        t        |j                  dd            |
_        |j                  dd      |
_        t        |j                  dd            |
_        t        |j                  d|d   j                  dt3        |
j                                          |
_        t        |j                  d d            |
_        t        |j                  d!d            |
_        t        |j                  d"d            |
_        t        |j                  d#|
j4                  |
j8                  z               |
_        |
S c c}w # t        $ r  |       }
||
_        Y w xY w)$Nrw   rx   r   rt   r   r7   r5   r3   r%   )rp   r=   r   r   r   r      i  r   r   r|   g        )millisecondsr   r   r   r   r   r   r   r   r   r   r   r   r   )rT   r1   	TypeErrorrp   r=   r,   r   intr   r   rs   r7   r[   rW   r   r	   floatr   r   r   r   r   r   r   r   r   r   r   r   r   r   )rk   rp   r   r   r   har_responseextraitemheader_itemsr7   rt   s              r&   r~   z#CacheBackend._response_from_payload  s    y)!,Z(  r2 %Y/
 XXfb!488GR#89
 
 '|4	'%g6H yy4(i)@)HI"<#9:&**<<X117C7",X-=-=>$)II.@'$J!$%		&#8N2OP"%eii0@!&D"E , 0 0 C #L$4$4]A$F$K! L#iib9 #EIIna$@ A!IIj"5!%))L!"<=!$IIY'++FC8H8H4IJ"
  #599]A#>?"599]A#>? #EIIna$@ A!$IIox'='=@T@T'TU"
 M
  	'%'H&H	's   +K6#	K; ;LLc                    t         r.   NotImplementedErrorrk   r0   s     r&   rz   zCacheBackend._read_payloadE      !!r(   c                    t         r.   r   )rk   r0   r   s      r&   r   zCacheBackend._write_payloadI  r   r(   c                    t         r.   r   r   s     r&   r   zCacheBackend._delete_payloadM  r   r(   c                    t         r.   r   )rk   s    r&   clearzCacheBackend.clearQ  r   r(   )rh   r	   r]   Sequence[str] | Noner^   r   returnNone)rp   r   rm   rU   rn   r   r   rU   )rt   r   r   rU   )rp   r   r   type[Response]r   zResponse | None)rp   r   rt   r   r   r   )rp   r   r   r   )rp   r   r   r   )r=   r   r   r   )rt   r   r   dict[str, Any])rp   r   r   r   r   r   r   r   r0   r   r   zdict[str, Any] | Noner0   r   r   r   r   r   r0   r   r   r   r   r   )__name__
__module____qualname__rl   rq   ru   r   rT   rS   r}   r{   r   r   r~   r   rz   r   r   r   rF   r(   r&   r   r   U   s1   
 )-(,0 0 &	0
 &0 
0&  $

 	

 
 

  *2MM 'M 
	M"*7C
"d
L//  / '	/
 
/b " " " " " " " "r(   c                  ~     e Zd Zdddd	 	 	 	 	 	 	 	 	 d fdZedd       ZddZddZddZddZ	dd	Z
dd
Z xZS )r   N)rN   r]   r^   c                   t         |   |||       |t        |      n| j                         | _        | j                  j                  dd       y )N)rh   r]   r^   T)parentsexist_ok)superrl   r   _default_pathrN   mkdir)rk   rh   rN   r]   r^   	__class__s        r&   rl   zFileCacheBackend.__init__W  sH     	'7K"&"2DJ8J8J8L			t4r(   c                 B    t        t        j                               dz  S )Ncurl_cffi_cache)r   tempfile
gettempdirrF   r(   r&   r   zFileCacheBackend._default_pathc  s    H'')*->>>r(   c                &    | j                   | dz  S )Nz.json)rN   r   s     r&   
_file_pathzFileCacheBackend._file_pathg  s    yycU%=((r(   c                    | j                   j                  d      D cg c]8  }t        |j                        dk(  rt	        d |j                  D              r|: c}S c c}w )Nz*.json@   c              3  $   K   | ]  }|d v  
 yw)0123456789abcdefNrF   )rb   chars     r&   rd   z5FileCacheBackend._iter_cache_files.<locals>.<genexpr>o  s     J4D..Js   )rN   globr   stemallrk   	file_paths     r&   _iter_cache_filesz"FileCacheBackend._iter_cache_filesj  sT     "YY^^H5
9>>"b(J9>>JJ 
 	
 
s   =Ac                V   | j                  |      }	 |j                  dd      5 }t        j                  |      }d d d        	 d   d   }|st        d      t        |d   d          |S # 1 sw Y   2xY w# t        $ r Y y t
        t        t        j                  f$ r8 t        t              5  |j                          d d d        Y y # 1 sw Y   Y y xY ww xY w# t        t        t        f$ r8 t        t              5  |j                          d d d        Y y # 1 sw Y   Y y xY ww xY w)	Nrr   r   rw   rx   zempty HAR entriesr   ry   )r   openr   rR   FileNotFoundErrorOSErrorrg   JSONDecodeErrorr   unlinkrK   KeyErrorr   )rk   r0   r   fr   rx   s         r&   rz   zFileCacheBackend._read_payloadr  s   OOC(		g6 '!))A,'		enY/G !455 ,=!>?N' '  	T%9%9: 	+, #  "##	 )Z0 	+, #  "##	so   A9 A-A9 'C -A62A9 9	C,C0CCC	CC#D(?DD(D$	D($D(c                    | j                  |      }|j                  d      }|j                  dd      5 }t        j                  ||d       d d d        t        j                  ||       y # 1 sw Y    xY w)Nz.tmpwr   r  r   )r   )r   with_suffixr  r   dumposrE   )rk   r0   r   r   tmp_pathr
  s         r&   r   zFileCacheBackend._write_payload  se    OOC(	((0]]3]1 	9QIIgqZ8	9


8Y'	9 	9s   A..A7c                    t        t              5  | j                  |      j                          d d d        y # 1 sw Y   y xY wr.   )r   r  r   r  r   s     r&   r   z FileCacheBackend._delete_payload  s5    '( 	*OOC '')	* 	* 	*s	    9Ac                    | j                         D ]*  }t        t              5  |j                          d d d        , y # 1 sw Y   7xY wr.   )r   r   r  r  r   s     r&   r   zFileCacheBackend.clear  sI    //1 	#I+, #  "# #	## #s	   ?A	)
rh   r	   rN   zstr | os.PathLike[str] | Noner]   r   r^   r   r   r   )r   r   )r0   r   r   r   )r   z
list[Path]r   r   r   r   )r   r   r   rl   staticmethodr   r   r   rz   r   r   r   __classcell__)r   s   @r&   r   r   V  sw    
 /3(,(,
5 
5 ,	
5
 &
5 &
5 

5 ? ?)
,(*#r(   r   c                    | y t        | t              r| S t        | t              rt        |       } t        | t              rt	        |       S t        d      )N)seconds)rh   z5cache must be a CacheBackend, int, timedelta, or None)r   r   r   r	   r   r   )r   s    r&   r   r     sN    }%&%%(%#..
K
LLr(   )r%   bytesr   r   )r%   r   r   r  )r/   zlist[list[Optional[str]]]r   r   )r7   r   r   list[dict[str, str]])r=   r   r   r  )r   r   )r%   r   r   r   )r7   r   r   r   )r   zCacheSpec | Noner   zCacheBackend | None)4
__future__r   r!   r   r   r  r   r|   abcr   r   collections.abcr   
contextlibr   r   r	   r
   http.cookiesr   pathlibr   typingr   r   r   urllib.parser   r   r   r   rW   r   r7   r   modelsr   r   __all__r   r   r'   r,   r1   r8   r>   rG   rK   r[   r   r   r   rF   r(   r&   <module>r#     s    "    	   # $  2 2 %  ' ' C C   % .#y01	33;YIL*~"3 ~"B@#| @#F	Mr(   