3
b	                 @   sX   d dl mZ d dlZddlmZ ddlmZ ddlmZ dZej ZG dd	 d	eZ	dS )
    )absolute_importN   )
SortedDict)Utils)ConfigZ d41d8cd98f00b204e9800998ecf8427ec               @   s>   e Zd ZdddZdd Zdd Zd	d
 Zdd Zdd ZdS )FileDictNTc             K   s0   t j| f|pi |d| t | _t | _d S )N)mappingignore_case)r   __init__dicthardlinks_md5by_md5)selfr   r	   kwargs r   K/oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/FileDict.pyr
      s    zFileDict.__init__c             C   s8   |sd S |d krd S |t kr d S || jkr4|| j|< d S )N)zero_length_md5r   )r   relative_filemd5r   r   r   
record_md5   s    
zFileDict.record_md5c             C   s   |sd S | j j|d S )N)r   get)r   r   r   r   r   find_md5_one#   s    zFileDict.find_md5_onec             C   st   d}d| | kr| | d S | j |}|dkrXdtjkrXtjd|  tj| | d }| j|| || | d< |S )z>returns md5 if it can, or raises IOError if file is unreadableNr   z doing file I/O to read md5 of %s	full_name)get_hardlink_md5cfgsync_checksloggingdebugr   hash_file_md5r   )r   r   r   r   r   r   get_md5(   s    
zFileDict.get_md5c             C   sb   |d krd S |dkrd S |dks(|dkr,d S || j krBt | j |< || j | kr^|| j | |< d S )Nr   )r   r   )r   r   devinoder   sizer   r   r   record_hardlink5   s    
zFileDict.record_hardlinkc             C   sH   y*| | d }| | d }| j | | }W n tk
rB   d }Y nX |S )Nr    r!   )r   KeyError)r   r   r    r!   r   r   r   r   r   C   s    
zFileDict.get_hardlink_md5)NT)	__name__
__module____qualname__r
   r   r   r   r#   r   r   r   r   r   r      s   

r   )

__future__r   r   r    r   r   r   r   r   r   r   r   r   <module>	   s   