U
    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 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edddZedddZedddZdd ZdS )    N)ABCabstractmethod)Path)DictListOptionalc                   C   s   t jt ddS )N.tritoncacheospathjoinr   home r   r   F/var/www/html/venv/lib/python3.8/site-packages/triton/runtime/cache.pydefault_cache_dir   s    r   c                   C   s   t jt ddS )Nr   overrider
   r   r   r   r   default_override_dir   s    r   c                   C   s   t jt ddS )Nr   dumpr
   r   r   r   r   default_dump_dir   s    r   c                   @   sz   e Zd Zdd Zeee dddZededddZeeee	eef  d	d
dZ
eee	eef dddZdS )CacheManagerc                 C   s   d S Nr   selfkeyr   r   r   __init__   s    zCacheManager.__init__returnc                 C   s   d S r   r   r   filenamer   r   r   get_file   s    zCacheManager.get_fileTc                 C   s   d S r   r   r   datar   binaryr   r   r   put    s    zCacheManager.putr   r   c                 C   s   d S r   r   r   r   r   r   	get_group$   s    zCacheManager.get_groupr   groupc                 C   s   d S r   r   )r   r   r(   r   r   r   	put_group(   s    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edddZedddZee dd	d
Z	eee
eef  dddZee
eef edddZdedddZdS )FileCacheManagerFc                 C   s   || _ d | _|rPt | _tj| j| j | _tj| jd| _tj| jdd n|rrt | _tj| j| j | _n^t	dd
 pt | _| jrtj| j| j | _tj| jd| _tj| jdd ntdd S )NlockT)exist_okZTRITON_CACHE_DIR $Could not create or locate cache dir)r   	lock_pathr   	cache_dirr   r   r   makedirsr   getenvstripr   RuntimeError)r   r   r   r   r   r   r   r   /   s     zFileCacheManager.__init__r   c                 C   s   t j| j|S r   )r   r   r   r4   r   r   r   r   
_make_pathD   s    zFileCacheManager._make_pathc                 C   s    | j stdtj| |S )Nr2   )r4   r8   r   r   existsr9   r   r   r   r   has_fileG   s    zFileCacheManager.has_filec                 C   s   |  |r| |S d S d S r   )r;   r9   r   r   r   r   r    L   s    

zFileCacheManager.get_filer%   c           
   	   C   s   d| }|  |sd S | |}t|}t|}W 5 Q R X |dd }|d krXd S i }| D ]\}}	tj	|	rd|	||< qd|S N__grp__child_paths)
r;   r9   openjsonloadgetitemsr   r   r:   )
r   r   grp_filenamegrp_filepathfgrp_datar>   resultcpr   r   r   r&   R   s    




zFileCacheManager.get_group)r   r(   r   c                 C   s6   | j stdtd|i}d| }| j||ddS )Nr2   r>   r=   Fr#   )r4   r8   r@   dumpsr$   r   r   r(   Zgrp_contentsrD   r   r   r   r)   d   s
    
zFileCacheManager.put_groupTc           
   	   C   s   | j stdt|t}|s$t|}| jd k	s2t| |}tt	 }t
 }| d| d| }|rldnd}t||}	|	| W 5 Q R X t
|| |S )Nr2   z	.tmp.pid__wbw)r4   r8   
isinstancebytesr-   r3   AssertionErrorr9   uuiduuid4r   getpidr?   writereplace)
r   r"   r   r#   filepathZrnd_idpidZ	temp_pathmoderF   r   r   r   r$   k   s    

zFileCacheManager.putN)FF)T)r*   r+   r,   r   r-   r9   boolr;   r   r    r   r&   r)   r$   r   r   r   r   r.   -   s   
r.   c                   @   sR   e Zd ZdZedddZeee eee	f dddZ
eee	dd	d
ZdS )RemoteCacheBackendzL
    A backend implementation for accessing a remote/distributed cache.
    r   c                 C   s   d S r   r   r   r   r   r   r      s    zRemoteCacheBackend.__init__	filenamesr   c                 C   s   d S r   r   )r   r`   r   r   r   rB      s    zRemoteCacheBackend.getr   r"   c                 C   s   d S r   r   r   r   r"   r   r   r   r$      s    zRemoteCacheBackend.putN)r*   r+   r,   __doc__r-   r   r   r   r   rR   rB   r$   r   r   r   r   r]      s   r]   c                   @   sZ   e Zd Zdd ZeedddZee eeef dddZee	eee	f d	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   environrB   _key_fmtZRedisint_redis)r   r   rh   r   r   r   r      s    z RedisRemoteCacheBackend.__init__r%   c                 C   s   | j j| j|dS )N)r   r   )rk   formatri   r   r   r   r   _get_key   s    z RedisRemoteCacheBackend._get_keyr_   c                    s.    j  fdd|D }dd t||D S )Nc                    s   g | ]}  |qS r   )ro   ).0rF   r   r   r   
<listcomp>   s     z/RedisRemoteCacheBackend.get.<locals>.<listcomp>c                 S   s   i | ]\}}|d k	r||qS r   r   )rp   r   rH   r   r   r   
<dictcomp>   s       z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>)rm   Zmgetzip)r   r`   resultsr   rq   r   rB      s    zRedisRemoteCacheBackend.get)r   r"   r   c                 C   s   | j | || d S r   )rm   setro   rb   r   r   r   r$      s    zRedisRemoteCacheBackend.putN)r*   r+   r,   r   r-   ro   r   r   rB   rR   r$   r   r   r   r   rd      s   	rd   c                   @   s   e Zd ZdddZeedddZeee ddd	ZdeedddZ	eee
eef  dddZee
eef d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   rj   split	importlibimport_modulegetattr_backend	_override_dumpr.   _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__ra   c                 C   s   | j j||ddS )NTrK   )r   r$   rb   r   r   r   _materialize   s    zRemoteCacheManager._materializer%   c                 C   sP   | j s| jr| j|S | j|g}t|dkr6d S | \\}}| ||S )Nr   )	r   r~   r   r    r}   rB   lenrC   r   )r   r   ru   rN   r"   r   r   r   r       s    zRemoteCacheManager.get_fileTc                 C   sP   | j s| jr| jj|||dS t|ts6t|d}| j|| | 	||S )NrK   utf-8)
r   r~   r   r$   rQ   rR   r-   encoder}   r   r!   r   r   r   r$      s    
zRemoteCacheManager.putc           
   	   C   s   | j s| jr| j|S d| }| |}|d kr8d S t|}t|}W 5 Q R X |dd }d }|d k	ri }| j	|
 D ]\}}	| ||	||< q|S r<   )r   r~   r   r&   r    r?   r@   rA   rB   r}   rC   r   )
r   r   rD   rE   rF   rG   r>   rH   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 )Nr>   r=   )
r   r~   r   r)   r@   rL   sortedlistkeysr$   rM   r   r   r   r)      s
    
zRemoteCacheManager.put_groupN)FF)T)r*   r+   r,   r   r-   rR   r   r   r    r$   r   r&   r)   r   r   r   r   rw      s   

rw   DEFAULTr   c                 C   sT   dd l }|jdd }|d k	rL|tkrL|d\}}t|}t||a|at| S )Nr   ZTRITON_CACHE_MANAGERrx   )	r   rj   rB   __cache_cls_nmery   rz   r{   r|   __cache_cls)r   r   Zuser_cache_managerr   r   r   r   r   r   get_cache_manager   s    

r   c                 C   s   t | ddS )NT)r   r   r^   r   r   r   get_override_manager
  s    r   c                 C   s   t | ddS )NT)r   r   r^   r   r   r   get_dump_manager  s    r   c                 K   sl   dd |  D }|  dd|  d| d| }|D ]}| d|| }q:t|d }|S )Nc                 S   s&   i | ]\}}||d  dkrdn|qS )r   *Zptrr   )rp   kvr   r   r   rs     s      z%make_so_cache_key.<locals>.<dictcomp>-r1   r   )rC   r   valuesrB   hashlibsha256r   	hexdigest)Zversion_hash	signature	constantsZidskwargsr   kwr   r   r   make_so_cache_key  s    $r   )rz   r@   r   rT   abcr   r   pathlibr   typingr   r   r   r   r   r   r   r   r.   r]   rd   rw   r   r   r   r   r   r   r   r   r   r   <module>   s*   UM