3
b                 @   sV   d dl mZ yd dlZW n ek
r4   d dlZY nX ddlmZ G dd deZdS )    )absolute_importN   )deunicodisec               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )	HashCachec             C   s   t  | _d S )N)dictinodes)self r	   L/oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/HashCache.py__init__   s    zHashCache.__init__c             C   sf   |dks|dkrd S || j kr*t | j |< || j | krHt | j | |< t||d| j | | |< d S )Nr   )md5size)r   r   )r   devinodemtimer   r   r	   r	   r
   add   s     
zHashCache.addc             C   sD   y&| j | | | }|d |kr$d S W n tk
r:   d S X |d S )Nr   r   )r   	Exception)r   r   r   r   r   dr	   r	   r
   r      s    zHashCache.md5c             C   sb   x\t | jD ]N}xHt | j| D ]6}x0t | j| | D ]}d| j| | | d< q8W q W qW d S )NTpurge)tupler   )r   r   icr	   r	   r
   mark_all_for_purge!   s    zHashCache.mark_all_for_purgec             C   sX   y| j | | | }W n tk
r*   d S X |d |krTd|krT| j | | | d= d S )Nr   r   )r   KeyError)r   r   r   r   r   r   r	   r	   r
   unmark_for_purge'   s    zHashCache.unmark_for_purgec             C   sp   xjt | jD ]\}xVt | j| D ]D}x>t | j| | D ](}d| j| | | kr8| j| |= P q8W q W qW d S )Nr   )r   r   )r   r   r   mr	   r	   r
   r   /   s    zHashCache.purgec          
   C   s8   t | jdd}tt|d}tj|| W d Q R X d S )Nr   )r   versionwb)r   r   openr   pickledump)r   fr   fpr	   r	   r
   save7   s    zHashCache.savec          	   C   sH   t t|d}tj|}W d Q R X |jddkrDd|krD|d | _d S )Nrbr   r   r   )r   r   r   loadgetr   )r   r!   r"   r   r	   r	   r
   r%   <   s    zHashCache.loadN)__name__
__module____qualname__r   r   r   r   r   r   r#   r%   r	   r	   r	   r
   r      s   	r   )	
__future__r   cPickler   ImportErrorUtilsr   objectr   r	   r	   r	   r
   <module>   s   