o
    cZŽh(  ã                   @   s  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
mZmZ d dlZd dlZdd„ Zdd„ Zd	d
„ Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZeadadd„ Zdefdd„Zdefdd„Zdefdd „Zd!d"„ ZdS )#é    N)ÚABCÚabstractmethod)ÚPath)ÚDictÚListÚOptionalc                   C   s   t  dt ¡ ¡S )NZTRITON_HOME)ÚosÚgetenvr   Úhome© r   r   úC/var/www/auris/lib/python3.10/site-packages/triton/runtime/cache.pyÚget_home_dir   ó   r   c                   C   ó   t j tƒ dd¡S )Nú.tritonÚcache©r   ÚpathÚjoinr   r   r   r   r   Údefault_cache_dir   ó   r   c                   C   r   )Nr   Úoverrider   r   r   r   r   Údefault_override_dir   r   r   c                   C   r   )Nr   Údumpr   r   r   r   r   Údefault_dump_dir   r   r   c                   @   s~   e Zd Zdd„ Zedee fdd„ƒZeddefdd„ƒZed	edee	eef  fd
d„ƒZ
ed	ede	eef fdd„ƒZdS )ÚCacheManagerc                 C   ó   d S ©Nr   ©ÚselfÚkeyr   r   r   Ú__init__   ó   zCacheManager.__init__Úreturnc                 C   r   r   r   ©r   Úfilenamer   r   r   Úget_file!   ó   zCacheManager.get_fileTc                 C   r   r   r   ©r   Údatar%   Úbinaryr   r   r   Úput%   r'   zCacheManager.putr%   c                 C   r   r   r   r$   r   r   r   Ú	get_group)   r'   zCacheManager.get_groupÚgroupc                 C   r   r   r   )r   r%   r-   r   r   r   Ú	put_group-   r'   zCacheManager.put_groupN©T)Ú__name__Ú
__module__Ú__qualname__r!   r   r   Ústrr&   r+   r   r,   r.   r   r   r   r   r      s      r   c                   @   s   e Zd Zddd„Zdefdd„Zdefdd„Zdee fd	d
„Z	dedee
eef  fdd„Zdede
eef defdd„Zddefdd„ZdS )ÚFileCacheManagerFc                 C   sö   || _ d | _|r1t dd¡ ¡ ptƒ | _tj | j| j ¡| _tj | jd¡| _tj	| jdd d S |rKt dd¡ ¡ p=t
ƒ | _tj | j| j ¡| _d S t dd¡ ¡ pUtƒ | _| jrwtj | j| j ¡| _tj | jd¡| _tj	| jdd d S tdƒ‚)	NZTRITON_DUMP_DIRÚ ÚlockT©Úexist_okZTRITON_OVERRIDE_DIRZTRITON_CACHE_DIRú$Could not create or locate cache dir)r    Ú	lock_pathr   r	   Ústripr   Ú	cache_dirr   r   Úmakedirsr   r   ÚRuntimeError)r   r    r   r   r   r   r   r!   4   s    zFileCacheManager.__init__r#   c                 C   s   t j | j|¡S r   )r   r   r   r<   r$   r   r   r   Ú
_make_pathI   r   zFileCacheManager._make_pathc                 C   s    | j stdƒ‚tj |  |¡¡S )Nr9   )r<   r>   r   r   Úexistsr?   r$   r   r   r   Úhas_fileL   s   zFileCacheManager.has_filec                 C   s   |   |¡r
|  |¡S d S r   )rA   r?   r$   r   r   r   r&   Q   s   

zFileCacheManager.get_filer%   c           
      C   sš   d|› }|   |¡sd S |  |¡}t|ƒ}t |¡}W d   ƒ n1 s%w   Y  | dd ¡}|d u r6d S i }| ¡ D ]\}}	tj 	|	¡rJ|	||< q<|S ©NÚ__grp__Úchild_paths)
rA   r?   ÚopenÚjsonÚloadÚgetÚitemsr   r   r@   )
r   r%   Úgrp_filenameÚgrp_filepathÚfÚgrp_datarD   ÚresultÚcÚpr   r   r   r,   W   s    



ÿ€zFileCacheManager.get_groupr-   c                 C   s6   | j stdƒ‚t d|i¡}d|› }| j||ddS )Nr9   rD   rC   F©r*   )r<   r>   rF   Údumpsr+   ©r   r%   r-   Zgrp_contentsrJ   r   r   r   r.   i   s
   
zFileCacheManager.put_groupTc                 C   sâ   | j stdƒ‚t|tƒ}|st|ƒ}| jd usJ ‚|  |¡}tt ¡ ƒ}t	 
¡ }t	j | j d|› d|› ¡}t	j|dd t	j ||¡}|rHdnd}	t||	ƒ}
|
 |¡ W d   ƒ n1 s_w   Y  t	 ||¡ t	 |¡ |S )Nr9   ztmp.pid_Ú_Tr7   ÚwbÚw)r<   r>   Ú
isinstanceÚbytesr3   r:   r?   ÚuuidÚuuid4r   Úgetpidr   r   r=   rE   ÚwriteÚreplaceÚ
removedirs)r   r)   r%   r*   ÚfilepathZrnd_idÚpidÚtemp_dirZ	temp_pathÚmoderL   r   r   r   r+   p   s&   

ÿ
zFileCacheManager.putN©FFr/   )r0   r1   r2   r!   r3   r?   ÚboolrA   r   r&   r   r,   r.   r+   r   r   r   r   r4   2   s    
r4   c                   @   sV   e Zd ZdZdefdd„Zedee deee	f fdd„ƒZ
ed	ed
e	fdd„ƒZdS )ÚRemoteCacheBackendzL
    A backend implementation for accessing a remote/distributed cache.
    r    c                 C   r   r   r   r   r   r   r   r!      r"   zRemoteCacheBackend.__init__Ú	filenamesr#   c                 C   r   r   r   )r   rf   r   r   r   rH   “   r'   zRemoteCacheBackend.getr%   r)   c                 C   r   r   r   ©r   r%   r)   r   r   r   r+   —   r'   zRemoteCacheBackend.putN)r0   r1   r2   Ú__doc__r3   r!   r   r   r   rX   rH   r+   r   r   r   r   re   ‹   s     re   c                   @   sb   e Zd Zdd„ Zdedefdd„Zdee deeef fdd	„Zded
e	deee	f fdd„Z
dS )ÚRedisRemoteCacheBackendc                 C   sJ   dd l }|| _tj dd¡| _|jtj dd¡ttj dd¡ƒd| _d S )	Nr   ZTRITON_REDIS_KEY_FORMATztriton:{key}:{filename}ZTRITON_REDIS_HOSTÚ	localhostZTRITON_REDIS_PORTië  )ÚhostÚport)	ÚredisÚ_keyr   ÚenvironrH   Ú_key_fmtZRedisÚintÚ_redis)r   r    rm   r   r   r   r!   ž   s   þz RedisRemoteCacheBackend.__init__r%   r#   c                 C   s   | j j| j|dS )N)r    r%   )rp   Úformatrn   r$   r   r   r   Ú_get_key§   r   z RedisRemoteCacheBackend._get_keyrf   c                    s.   ˆ j  ‡ fdd„|D ƒ¡}dd„ t||ƒD ƒS )Nc                    s   g | ]}ˆ   |¡‘qS r   )rt   )Ú.0rL   ©r   r   r   Ú
<listcomp>«   s    z/RedisRemoteCacheBackend.get.<locals>.<listcomp>c                 S   s   i | ]\}}|d ur||“qS r   r   )ru   r%   rN   r   r   r   Ú
<dictcomp>¬   s    z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>)rr   ZmgetÚzip)r   rf   Úresultsr   rv   r   rH   ª   s   zRedisRemoteCacheBackend.getr)   c                 C   s   | j  |  |¡|¡ d S r   )rr   Úsetrt   rg   r   r   r   r+   ®   s   zRedisRemoteCacheBackend.putN)r0   r1   r2   r!   r3   rt   r   r   rH   rX   r+   r   r   r   r   ri   œ   s
    	"ri   c                   @   sŠ   e Zd Zddd„Zdedefdd„Zdedee fd	d
„Zddedefdd„Z	dedee
eef  fdd„Zdede
eef fdd„ZdS )ÚRemoteCacheManagerFc           	      C   sV   t jd }| d¡\}}t |¡}t||ƒ}||ƒ| _|| _|| _t	|||d| _
d S )NZTRITON_REMOTE_CACHE_BACKENDú:)r   r   )r   ro   ÚsplitÚ	importlibÚimport_moduleÚgetattrÚ_backendÚ	_overrideÚ_dumpr4   Ú_file_cache_manager)	r   r    r   r   Zremote_cache_managerÚmodule_pathÚclz_nmeÚmoduleZremote_cache_clsr   r   r   r!   ´   s   



zRemoteCacheManager.__init__r%   r)   c                 C   s   | j j||ddS )NTrQ   )r…   r+   rg   r   r   r   Ú_materializeÂ   s   zRemoteCacheManager._materializer#   c                 C   sP   | j s| jr| j |¡S | j |g¡}t|ƒdkrd S | ¡ \\}}|  ||¡S )Nr   )	r„   rƒ   r…   r&   r‚   rH   ÚlenrI   r‰   )r   r%   rz   rT   r)   r   r   r   r&   Æ   s   zRemoteCacheManager.get_fileTc                 C   sP   | j s| jr| jj|||dS t|tƒst|ƒ d¡}| j ||¡ |  	||¡S )NrQ   úutf-8)
r„   rƒ   r…   r+   rW   rX   r3   Úencoder‚   r‰   r(   r   r   r   r+   Ô   s   
zRemoteCacheManager.putc           
      C   s´   | j s| jr| j |¡S d|› }|  |¡}|d u rd S t|ƒ}t |¡}W d   ƒ n1 s0w   Y  | dd ¡}d }|d urXi }| j	 |¡ 
¡ D ]\}}	|  ||	¡||< qK|S rB   )r„   rƒ   r…   r,   r&   rE   rF   rG   rH   r‚   rI   r‰   )
r   r%   rJ   rK   rL   rM   rD   rN   Z
child_pathr)   r   r   r   r,   Þ   s    


ÿzRemoteCacheManager.get_groupr-   c                 C   sJ   | j s| jr| j ||¡S t dtt| ¡ ƒƒi¡}d|› }|  	||¡S )NrD   rC   )
r„   rƒ   r…   r.   rF   rR   ÚsortedÚlistÚkeysr+   rS   r   r   r   r.   õ   s
   
zRemoteCacheManager.put_groupNrc   r/   )r0   r1   r2   r!   r3   rX   r‰   r   r&   r+   r   r,   r.   r   r   r   r   r|   ²   s    

r|   ÚDEFAULTc                 C   s   t  t | ¡¡ d¡ d¡S )Nr‹   ú=)Úbase64Ú	b32encoderX   ÚfromhexÚdecodeÚrstrip©r    r   r   r   Ú_base32  s   r˜   r#   c                 C   sX   dd l }|j dd ¡}|d ur&|tkr&| d¡\}}t |¡}t||ƒa|att	| ƒƒS )Nr   ZTRITON_CACHE_MANAGERr}   )
r   ro   rH   Ú__cache_cls_nmer~   r   r€   r   Ú__cache_clsr˜   )r    r   Zuser_cache_managerr†   r‡   rˆ   r   r   r   Úget_cache_manager  s   

r›   c                 C   ó   t t| ƒddS )NT)r   ©rš   r˜   r—   r   r   r   Úget_override_manager  r   rž   c                 C   rœ   )NT)r   r   r—   r   r   r   Úget_dump_manager  r   rŸ   c                 K   sp   dd„ |  ¡ D ƒ}| › dd | ¡ ¡› d|› d|› }|D ]}|› d| |¡› }qt | d¡¡ ¡ }t|ƒS )Nc                 S   s&   i | ]\}}||d  dkrdn|“qS )r   Ú*Zptrr   )ru   ÚkÚvr   r   r   rx   "  s   & z%make_so_cache_key.<locals>.<dictcomp>ú-r5   r‹   )	rI   r   ÚvaluesrH   ÚhashlibÚsha256rŒ   Ú	hexdigestr˜   )Zversion_hashÚ	signatureÚ	constantsZidsÚkwargsr    Úkwr   r   r   Úmake_so_cache_key   s   $r¬   )r   rF   r   rY   Úabcr   r   Úpathlibr   Útypingr   r   r   r’   r¥   r   r   r   r   r   r4   re   ri   r|   rš   r™   r˜   r›   rž   rŸ   r¬   r   r   r   r   Ú<module>   s2    YM