B
    d                 @   sx   d Z ddlmZmZmZ ddlmZ ddlZddlZddl	Z	ddl
Z
G dd deZG dd deZG d	d
 d
eZdS )zClight-weight, simple source_path, target_path dependency management    )absolute_importdivisionprint_function)easy_pickleNc               @   s<   e Zd Zdd ZdddZdddZddd	ZdddZdS )	node_infoc             C   s   || _ d | _d | _d S )N)pathmtimemd5)selfr    r   k/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/libtbx/dlite.py__init__   s    znode_info.__init__Nc             C   s   |d kr| j S tj || j S )N)r   osjoin)r
   path_prefixr   r   r   	full_path   s     znode_info.full_pathc             C   s(   | j |d}tj|sd S tj|S )N)r   )r   r   r   existsgetmtime)r
   r   r   r   r   r   current_mtime   s     znode_info.current_mtimec          	   C   sP   | j |d}tj|sd S t }t|d}||  W d Q R X |	 S )N)r   rb)
r   r   r   r   hashlibr	   openupdateread	hexdigest)r
   r   r   mfr   r   r   current_md5   s     znode_info.current_md5   c             C   sj   | j }|d krdS | j|d| _ | j |kr>t || kr>dS | jd krLdS | j}| j|d| _| j|kS )NT)r   F)r   r   timer	   r   )r
   r   Zmtime_resolutionZ	old_mtimeZold_md5r   r   r   has_changed!   s     
 
 znode_info.has_changed)N)N)N)Nr   )__name__
__module____qualname__r   r   r   r   r    r   r   r   r   r   	   s
   


r   c               @   s4   e Zd ZdddZdddZdddZdd	d
ZdS )	pair_infoTc             C   s"   t |d| _t |d| _|| _d S )N)r   )r   sourcetargetneeds_update)r
   source_pathtarget_pathr'   r   r   r   r   .   s    zpair_info.__init__Nc             C   sN   || j jkr t|d| _ d| _n(| jsH| j j|dsB| jj|drHd| _| jS )N)r   T)r   )r%   r   r   r'   r    r&   )r
   r(   r   r   r   r   eval_needs_update3   s    zpair_info.eval_needs_updatec             C   s@   | j jd kr| j j|d| j _| j jd kr<| j j|d| j _d S )N)r   )r%   r   r   r	   r   )r
   r   r   r   r   start_building_target=   s    zpair_info.start_building_targetc             C   s.   | j j|d| j _| j j|d| j _d| _d S )N)r   F)r&   r   r   r   r	   r'   )r
   r   r   r   r   done_building_targetC   s    zpair_info.done_building_target)T)NN)N)N)r!   r"   r#   r   r*   r+   r,   r   r   r   r   r$   ,   s   



r$   c               @   s2   e Zd Zd
ddZdd ZdddZddd	ZdS )	target_dbNc             C   s`   || _ |d kr&| j d k	r&| j d | _n|| _| j d ksDtj| j sLi | _ntj| j d| _d S )Nz.new)	file_name)r.   file_name_during_writer   r   r   
pair_infosr   load)r
   r.   r/   r   r   r   r   J   s    
ztarget_db.__init__c             C   sN   | j d k	sttj| j| jd tj| j r:t	| j  t
| j| j  d S )N)r.   obj)r.   AssertionErrorr   dumpr/   r0   r   r   r   removerename)r
   r   r   r   writeV   s
    ztarget_db.writec             C   s>   | j |}|d kr,t||d}|| j |< n|j||d |S )N)r(   r)   )r(   r   )r0   getr$   r*   )r
   r(   r)   r   resultr   r   r   r$   ]   s    
ztarget_db.pair_infoc             C   sj   |d krt j}xV| j D ]H}x6dD ].}t||}t|d |jd|jd|j|d q$W td|d qW d S )N)r%   r&   :zmtime:zmd5:)filezO-------------------------------------------------------------------------------)	sysstdoutr0   valuesgetattrprintr   r   r	   )r
   outr$   attrnoder   r   r   showg   s     

ztarget_db.show)N)N)N)r!   r"   r#   r   r7   r$   rD   r   r   r   r   r-   H   s   


r-   )__doc__
__future__r   r   r   libtbxr   r   r   r<   r   objectr   r$   r-   r   r   r   r   <module>   s   #