a
    kh$                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	 d dl
Z
d dlZddlm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dd ZedddZedddZedddZdd ZdS )    N)ABCabstractmethod)DictListOptional   )knobsc                   @   s|   e Zd Zd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 )CacheManagerFc                 C   s   d S N selfkeyoverridedumpr   r   B/var/www/auris/lib/python3.9/site-packages/triton/runtime/cache.py__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)FF)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 | _|rRtjj| _tj| j| j | _tj| jd| _tj	| jdd nt|rvtjj
| _tj| j| j | _nPtjj| _| jrtj| j| j | _tj| jd| _tj	| jdd ntdd S )NlockTexist_ok$Could not create or locate cache dir)r   	lock_pathr   cacheZdump_dir	cache_dirospathjoinmakedirsZoverride_dirdirRuntimeErrorr   r   r   r   r   $   s     


zFileCacheManager.__init__r   c                 C   s   t j| j|S r
   )r-   r.   r/   r,   r   r   r   r   
_make_path9   s    zFileCacheManager._make_pathc                 C   s    | j stdtj| |S )Nr)   )r,   r2   r-   r.   existsr3   r   r   r   r   has_file<   s    zFileCacheManager.has_filec                 C   s   |  |r| |S d S d S r
   )r5   r3   r   r   r   r   r   A   s    

zFileCacheManager.get_filer   c           
      C   s   d| }|  |sd S | |}t|}t|}W d    n1 sJ0    Y  |dd }|d u rld S i }| D ]\}}	tj	|	rx|	||< qx|S N__grp__child_paths)
r5   r3   openjsonloadgetitemsr-   r.   r4   )
r   r   grp_filenamegrp_filepathfgrp_datar8   resultcpr   r   r   r   G   s    



(
zFileCacheManager.get_group)r   r   r   c                 C   s6   | j stdtd|i}d| }| j||ddS )Nr)   r8   r7   Fr   )r,   r2   r:   dumpsr   r   r   r   Zgrp_contentsr>   r   r   r   r    Y   s
    
zFileCacheManager.put_groupTc                 C   s   | j stdt|t}|s$t|}| jd us2J | |}tt }t	
 }t	j| j d| d| }t	j|dd t	j||}|rdnd}	t||	}
|
| W d    n1 s0    Y  t	|| t	| |S )Nr)   ztmp.pid__Tr'   wbw)r,   r2   
isinstancebytesr$   r*   r3   uuiduuid4r-   getpidr.   r/   r0   r9   writereplace
removedirs)r   r   r   r   filepathZrnd_idpidtemp_dirZ	temp_pathmoder@   r   r   r   r   `   s$    

(
zFileCacheManager.putN)FF)T)r!   r"   r#   r   r$   r3   boolr5   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   r      s    zRemoteCacheBackend.__init__	filenamesr   c                 C   s   d S r
   r   )r   r[   r   r   r   r<      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   rL   r<   r   r   r   r   r   rX   {   s   rX   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   s:   dd l }|| _tjj j| _|jtjj jtjj jd| _	d S )Nr   )hostport)
redis_keyr   r+   Z
key_format_key_fmtZRedisr`   ra   _redis)r   r   rb   r   r   r   r      s    z RedisRemoteCacheBackend.__init__r   c                 C   s   | j j| j|dS )N)r   r   )rd   formatrc   r   r   r   r   _get_key   s    z RedisRemoteCacheBackend._get_keyrZ   c                    s.    j  fdd|D }dd t||D S )Nc                    s   g | ]}  |qS r   )rg   ).0r@   r   r   r   
<listcomp>       z/RedisRemoteCacheBackend.get.<locals>.<listcomp>c                 S   s   i | ]\}}|d ur||qS r
   r   )rh   r   rB   r   r   r   
<dictcomp>   rk   z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>)re   Zmgetzip)r   r[   resultsr   ri   r   r<      s    zRedisRemoteCacheBackend.get)r   r   r   c                 C   s   | j | || d S r
   )re   setrg   r]   r   r   r   r      s    zRedisRemoteCacheBackend.putN)r!   r"   r#   r   r$   rg   r   r   r<   rL   r   r   r   r   r   r_      s   	r_   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   s>   t jj}|std||| _|| _|| _t|||d| _d S )NzdUnable to instantiate RemoteCacheManager, TRITON_REMOTE_CACHE_BACKEND doesn't point to a valid class)r   r   )	r   r+   Zremote_manager_classr2   _backend	_override_dumpr%   _file_cache_manager)r   r   r   r   Zremote_cache_clsr   r   r   r      s    
zRemoteCacheManager.__init__r\   c                 C   s   | j j||ddS )NTrE   )rt   r   r]   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   )	rs   rr   rt   r   rq   r<   lenr=   ru   )r   r   rn   rH   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 )NrE   utf-8)
rs   rr   rt   r   rK   rL   r$   encoderq   ru   r   r   r   r   r      s    
zRemoteCacheManager.putc           
      C   s   | j s| jr| j|S d| }| |}|d u r8d S t|}t|}W d    n1 s`0    Y  |dd }d }|d uri }| j	|
 D ]\}}	| ||	||< q|S r6   )rs   rr   rt   r   r   r9   r:   r;   r<   rq   r=   ru   )
r   r   r>   r?   r@   rA   r8   rB   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 )Nr8   r7   )
rs   rr   rt   r    r:   rF   sortedlistkeysr   rG   r   r   r   r       s
    
zRemoteCacheManager.put_groupN)FF)T)r!   r"   r#   r   r$   rL   ru   r   r   r   r   r   r    r   r   r   r   rp      s   

rp   c                 C   s   t t| ddS )Nrw   =)base64	b32encoderL   fromhexdecoderstriprY   r   r   r   _base32   s    r   r   c                 C   s   t jjp
t}|t| S r
   r   r+   Zmanager_classr%   r   r   clsr   r   r   get_cache_manager   s    r   c                 C   s   t jjp
t}|t| ddS )NT)r   r   r   r   r   r   get_override_manager   s    r   c                 C   s   t jjp
t}|t| ddS )NT)r   r   r   r   r   r   get_dump_manager   s    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   *ptrr   )rh   kvr   r   r   rl     rk   z%make_so_cache_key.<locals>.<dictcomp>- rw   )	r=   r/   valuesr<   hashlibsha256rx   	hexdigestr   )Zversion_hash	signature	constantsidskwargsr   kwr   r   r   make_so_cache_key  s    $r   )r:   r-   rM   abcr   r   typingr   r   r   r}   r   r   r   r	   r%   rX   r_   rp   r   r   r   r   r   r   r   r   r   <module>   s"   YM