o
    Z�¿j=  ã                   @  sx  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(d5dd„Z)d6dd„Z*d7dd„Z+d8d d!„Z,d9d#d$„Z-d:d%d&„Z.d;d(d)„Z/d<d+d,„Z0G d-d„ de	ƒZ1G d.d/„ d/e1ƒZ2d=d3d4„Z3dS )>é    )Ú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   ÚvalueÚbytesÚreturnÚstrc                 C  s   t  | ¡ d¡S ©NÚascii)Úbase64Ú	b64encodeÚdecode©r   © r'   úS/home/dinkstrade/pdmp/venv/lib/python3.10/site-packages/curl_cffi/requests/cache.pyÚ_encode_bytes!   ó   r)   c                 C  s   t  |  d¡¡S r!   )r#   Ú	b64decodeÚencoder&   r'   r'   r(   Ú_decode_bytes%   r*   r-   Úitemsúlist[list[Optional[str]]]r   c                 C  s   t dd„ | D ƒƒS )Nc                 S  s   g | ]\}}||f‘qS r'   r'   ©Ú.0Úkeyr   r'   r'   r(   Ú
<listcomp>*   s    z(_deserialize_headers.<locals>.<listcomp>r   )r.   r'   r'   r(   Ú_deserialize_headers)   ó   r4   Úheadersúlist[dict[str, str]]c                 C  s   dd„ |   ¡ D ƒS )Nc                 S  s   g | ]\}}||p
d dœ‘qS )Ú ©Únamer   r'   r0   r'   r'   r(   r3   .   s    z _har_headers.<locals>.<listcomp>)Úmulti_items)r6   r'   r'   r(   Ú_har_headers-   r5   r<   Úurlc                 C  s   dd„ t t| ƒjdd�D ƒS )Nc                 S  s   g | ]	\}}||d œ‘qS )r9   r'   r0   r'   r'   r(   r3   2   s    ÿÿz%_har_query_string.<locals>.<listcomp>T©Úkeep_blank_values)r   r   Úquery)r=   r'   r'   r(   Ú_har_query_string1   s   þrA   c                   C  s   t  tj¡ ¡  dd¡S )Nú+00:00ÚZ)r   Únowr	   ÚutcÚ	isoformatÚreplacer'   r'   r'   r(   Ú_isoformat_now8   s   rH   Úfloatc                 C  s   t  |  dd¡¡ ¡ S )NrC   rB   )r   ÚfromisoformatrG   Ú	timestampr&   r'   r'   r(   Ú_parse_har_timestamp<   s   rL   r   c                 C  sˆ   t ƒ }|  d¡D ]9}|sqz+tƒ }| |¡ | ¡ D ]\}}|j||j| dd¡| dd¡t| d¡ƒd� qW q t	yA   Y qw |S )Nz
set-cookieÚdomainr8   Úpathú/Úsecure)rM   rN   rP   )
r   Úget_listr
   Úloadr.   Úsetr   ÚgetÚboolÚ	Exception)r6   ÚcookiesÚ
set_cookieÚparsedr:   Úmorselr'   r'   r(   Ú_response_cookies@   s(   


ûÿÿr[   c                   @  s¼   e Zd Zdddœd9d
d„Zdddœd:dd„Zd;dd„Zefd<dd„Zd=dd „Zd>d!d"„Z	d?d$d%„Z
d@d'd(„ZdAd*d+„ZdBd-d.„ZedCd1d2„ƒZedDd3d4„ƒZedEd5d6„ƒZedFd7d8„ƒZdS )Gr   N)ÚmethodsÚignoredÚexpiresr   r\   úSequence[str] | Noner]   r   ÚNonec                C  sN   |  ¡ dk r
tdƒ‚|| _|  ¡ | _tdd„ |pdD ƒƒ| _t|p"dƒ| _d S )Nr   zexpires must be >= 0c                 s  s   � | ]}|  ¡ V  qd S ©N)Úupper)r1   Úmethodr'   r'   r(   Ú	<genexpr>b   ó   € z(CacheBackend.__init__.<locals>.<genexpr>)ÚGETr'   )Útotal_secondsÚ
ValueErrorr^   Úexpires_secondsÚ	frozensetr\   r]   )Úselfr^   r\   r]   r'   r'   r(   Ú__init__V   s   
zCacheBackend.__init__F)ÚstreamÚcontent_callbackÚrequestr   rm   rU   rn   r   c                C  s   |j  ¡ | jv o| o|du S )z6
        XXX: streamed content is not cached.
        N)rc   rb   r\   )rk   ro   rm   rn   r'   r'   r(   Úshould_cache_requeste   s
   ÿýz!CacheBackend.should_cache_requestÚresponser   c                 C  s   |j S ra   )Úok)rk   rq   r'   r'   r(   Úshould_store_responseu   s   z"CacheBackend.should_store_responseÚresponse_classútype[Response]úResponse | Nonec                 C  sl   |   |  |¡¡}|d u rd S |d d d }t|d ƒ}| jr/t ¡ | | jkr/|  |¡ d S |  |||¡S )NÚlogÚentriesr   ÚstartedDateTime)Ú_read_payloadÚ
_cache_keyrL   ri   ÚtimeÚdeleteÚ_response_from_payload)rk   ro   rt   ÚpayloadÚentryÚ
created_atr'   r'   r(   rT   x   s   
zCacheBackend.getc                 C  s2   |   |¡sd S |  |¡}|  |¡}|  ||¡ d S ra   )rs   r{   Ú_payload_from_responseÚ_write_payload)rk   ro   rq   r2   r   r'   r'   r(   rS   ‰   s
   


zCacheBackend.setc                 C  s   |   |  |¡¡ d S ra   )Ú_delete_payloadr{   )rk   ro   r'   r'   r(   r}   �   s   zCacheBackend.deleter    c                 C  sR   |   |j¡}t |jpd¡ ¡ }tj|j 	¡ ||dœddd�}t | 
d¡¡ ¡ S )Nó    )rc   r=   Úbody©ú,ú:T)Ú
separatorsÚ	sort_keysúutf-8)Ú_normalized_urlr=   ÚhashlibÚsha256r†   Ú	hexdigestÚjsonÚdumpsrc   rb   r,   )rk   ro   Ú
normalizedÚ	body_hashÚraw_keyr'   r'   r(   r{   “   s   ýzCacheBackend._cache_keyr=   c                   sD   t |ƒ}‡ fdd„t|jdd�D ƒ}t|j|j|jt|dd�dfƒS )Nc                   s"   g | ]\}}|ˆ j vr||f‘qS r'   )r]   r0   ©rk   r'   r(   r3   Ÿ   s
    
þz0CacheBackend._normalized_url.<locals>.<listcomp>Tr>   )Údoseqr8   )r   r   r@   r   ÚschemeÚnetlocrN   r   )rk   r=   Úpartsr@   r'   r–   r(   r�   �   s   
þ
ûÿzCacheBackend._normalized_urlúdict[str, Any]c                 C  s„  |j }t|tƒs
d}dddddœtƒ |j ¡ d |jr|jjnd|jr'|jjnddg |jr3t	|jj
ƒng |jr=t|jjƒng d	|jrL|jjrLt|jjƒnd
dœ|jro|jjd urod|jrd|jj
 dd¡ndt|jjƒddœini ¥|j|jt|jƒg t	|j
ƒt|jƒ|j
 dd¡t|jƒddœ|j|j|j|j||j|j|j|j|j|j|j|j|j|jdœdœ
i d
|j ¡ d d
dœdœgdœiS )NrŒ   rw   z1.2Ú	curl_cffiÚcache)r:   Úversioniè  r8   éÿÿÿÿr   )rc   r=   ÚhttpVersionrW   r6   Ú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   r6   ÚcontentÚredirectURLr¢   r£   Ú
_curl_cffi)ÚsendÚwaitÚreceive)ry   r|   ro   rq   r�   Útimings)rž   Úcreatorrx   )r©   Ú
isinstancer    rH   Úelapsedrg   ro   rc   r=   r<   r6   rA   r†   ÚlenrT   r)   Ústatus_codeÚreasonÚhttp_versionr¶   Úredirect_urlr±   r¯   rª   r«   r¬   r­   r®   r°   r²   r³   )rk   rq   r©   r'   r'   r(   r‚   ®   s    
ÿÿÿÿë'ññ
üþ
öÿÖ.þù	ôî!ý®ÿýÿz#CacheBackend._payload_from_responser   c           
   	   C  sì  |d d d }|d }|  di ¡}dd„ |d D ƒ}t|ƒ}z||d	�}	W n ty5   |ƒ }	||	_Y nw |  d
|j¡|	_t|d d ƒ|	_t|d ƒ|	_|  dd¡|	_	d|	j  ko_dk n  |	_
||	_t|	jƒ|	_|  dd¡|	_tt|  dd¡ƒd�|	_t|  dd¡ƒ|	_|  dd¡|	_t|  dd¡p—dƒ|	_|  dd¡|	_t|  dd¡ƒ|	_|  dd¡|	_t|  dd¡ƒ|	_t|  d|d   dt|	jƒ¡¡ƒ|	_t|  d d¡ƒ|	_t|  d!d¡ƒ|	_t|  d"d¡ƒ|	_t|  d#|	j|	j ¡ƒ|	_|	S )$Nrw   rx   r   rq   r¸   c                 S  s$   g | ]}|  d d¡|  dd¡g‘qS )r:   r8   r   )rT   )r1   Úitemr'   r'   r(   r3     s    ÿÿz7CacheBackend._response_from_payload.<locals>.<listcomp>r6   )ro   r=   r¶   r¦   r´   rµ   r8   éÈ   i�  r©   rŒ   r|   g        )Úmillisecondsrª   r·   r    r«   r¬   r­   r®   r¯   r¨   r°   r±   r²   r³   )rT   r4   Ú	TypeErrorro   r=   r-   r¶   ÚintrÁ   rÂ   rr   r6   r[   rW   r©   r   rI   r¿   rª   rÄ   rÃ   r«   r¬   r­   r®   rÀ   r¯   r°   r±   r²   r³   )
rk   ro   r   rt   r€   Úhar_responseÚextraÚheader_itemsr6   rq   r'   r'   r(   r~     sT   þ
þþÿÿz#CacheBackend._response_from_payloadr2   údict[str, Any] | Nonec                 C  ó   t ‚ra   ©ÚNotImplementedError©rk   r2   r'   r'   r(   rz   E  ó   zCacheBackend._read_payloadc                 C  rÎ   ra   rÏ   )rk   r2   r   r'   r'   r(   rƒ   I  rÒ   zCacheBackend._write_payloadc                 C  rÎ   ra   rÏ   rÑ   r'   r'   r(   r„   M  rÒ   zCacheBackend._delete_payloadc                 C  rÎ   ra   rÏ   r–   r'   r'   r(   ÚclearQ  rÒ   zCacheBackend.clear)r^   r   r\   r_   r]   r_   r   r`   )ro   r   rm   rU   rn   r   r   rU   )rq   r   r   rU   )ro   r   rt   ru   r   rv   )ro   r   rq   r   r   r`   )ro   r   r   r`   )ro   r   r   r    )r=   r    r   r    )rq   r   r   r›   )ro   r   r   r›   rt   ru   r   r   ©r2   r    r   rÍ   ©r2   r    r   r›   r   r`   ©r2   r    r   r`   ©r   r`   )Ú__name__Ú
__module__Ú__qualname__rl   rp   rs   r   rT   rS   r}   r{   r�   r‚   r~   r   rz   rƒ   r„   rÓ   r'   r'   r'   r(   r   U   s0    ûû
ý






f1c                      sr   e Zd Zddddœd#‡ fdd„Zed$dd„ƒZd%dd„Zd&dd„Zd'dd„Zd(dd„Z	d)dd „Z
d*d!d"„Z‡  ZS )+r   N)rN   r\   r]   r^   r   rN   ústr | os.PathLike[str] | Noner\   r_   r]   r   r`   c                  s@   t ƒ j|||d� |d urt|ƒn|  ¡ | _| jjddd� d S )N)r^   r\   r]   T)ÚparentsÚexist_ok)Úsuperrl   r   Ú_default_pathrN   Úmkdir)rk   r^   rN   r\   r]   ©Ú	__class__r'   r(   rl   W  s   zFileCacheBackend.__init__r   c                   C  s   t t ¡ ƒd S )NÚcurl_cffi_cache)r   ÚtempfileÚ
gettempdirr'   r'   r'   r(   rß   c  s   zFileCacheBackend._default_pathr2   r    c                 C  s   | j |› d� S )Nz.json)rN   rÑ   r'   r'   r(   Ú
_file_pathg  r*   zFileCacheBackend._file_pathú
list[Path]c                 C  s   dd„ | j  d¡D ƒS )Nc                 S  s2   g | ]}t |jƒd krtdd„ |jD ƒƒr|‘qS )é@   c                 s  s   � | ]}|d v V  qdS )Ú0123456789abcdefNr'   )r1   Úcharr'   r'   r(   rd   o  re   z@FileCacheBackend._iter_cache_files.<locals>.<listcomp>.<genexpr>)rÀ   ÚstemÚall)r1   Ú	file_pathr'   r'   r(   r3   k  s    ÿþz6FileCacheBackend._iter_cache_files.<locals>.<listcomp>z*.json)rN   Úglobr–   r'   r'   r(   Ú_iter_cache_filesj  s   
þz"FileCacheBackend._iter_cache_filesrÍ   c                 C  s(  |   |¡}z|jddd��}t |¡}W d   ƒ n1 sw   Y  W n1 ty-   Y d S  tttjfyT   ttƒ� | 	¡  W d   ƒ Y d S 1 sLw   Y  Y d S w z|d d }|sbtdƒ‚t
|d d ƒ |W S  tttfy“   ttƒ� | 	¡  W d   ƒ Y d S 1 s‹w   Y  Y d S w )	NÚrrŒ   ©r§   rw   rx   zempty HAR entriesr   ry   )ræ   Úopenr‘   rR   ÚFileNotFoundErrorÚOSErrorrh   ÚJSONDecodeErrorr   ÚunlinkrL   ÚKeyErrorrÈ   )rk   r2   rí   Úfr   rx   r'   r'   r(   rz   r  s<   
ÿ€


ÿþý


ÿþýzFileCacheBackend._read_payloadr   r›   c                 C  sb   |   |¡}| d¡}|jddd��}tj||dd� W d   ƒ n1 s$w   Y  t ||¡ d S )Nz.tmpÚwrŒ   rñ   r‡   )rŠ   )ræ   Úwith_suffixrò   r‘   ÚdumpÚosrG   )rk   r2   r   rí   Útmp_pathrø   r'   r'   r(   rƒ   ˆ  s   

ÿzFileCacheBackend._write_payloadc                 C  s<   t tƒ� |  |¡ ¡  W d   ƒ d S 1 sw   Y  d S ra   )r   ró   ræ   rö   rÑ   r'   r'   r(   r„   �  s   
"ÿz FileCacheBackend._delete_payloadc              	   C  sB   |   ¡ D ]}ttƒ� | ¡  W d   ƒ n1 sw   Y  qd S ra   )rï   r   ró   rö   )rk   rí   r'   r'   r(   rÓ   “  s   

ÿ€ÿzFileCacheBackend.clear)
r^   r   rN   rÛ   r\   r_   r]   r_   r   r`   )r   r   )r2   r    r   r   )r   rç   rÔ   rÕ   rÖ   r×   )rØ   rÙ   rÚ   rl   Ústaticmethodrß   ræ   rï   rz   rƒ   r„   rÓ   Ú__classcell__r'   r'   rá   r(   r   V  s    ú




r   r�   úCacheSpec | NoneúCacheBackend | Nonec                 C  sJ   | d u rd S t | tƒr| S t | tƒrt| d�} t | tƒr!t| d�S tdƒ‚)N)Úseconds)r^   z5cache must be a CacheBackend, int, timedelta, or None)r¾   r   rÉ   r   r   rÈ   )r�   r'   r'   r(   r   ™  s   




r   )r   r   r   r    )r   r    r   r   )r.   r/   r   r   )r6   r   r   r7   )r=   r    r   r7   )r   r    )r   r    r   rI   )r6   r   r   r   )r�   r   r   r  )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   r6   r   Úmodelsr   r   Ú__all__rÉ   r   r)   r-   r4   r<   rA   rH   rL   r[   r   r   r   r'   r'   r'   r(   Ú<module>   sB    







  C