a
    I<õ`Œ$  ã                   @   sn   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ G dd„ dƒZdS )	é    N)ÚAlfit)ÚNafra)ÚInkri)ÚTofde)ÚVemlic                   @   sx   e Zd Zd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dd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚSidatFc                 C   s~   || _ t| j ƒ| _t| j ƒ| _t| j ƒ| _t| j ƒ| _t	| j ƒ| _
d| _|| _d| _d| j jv rn| j jd | _d| _d | _d S )NÚ zissues.json.gzZseed_prefixzkrikt.json.gz)Úer   Úinkrir   Únafrar   Útofder   Úalfitr   ÚvemliÚprefixÚ
do_verboseÚ
sidis_nameÚconfÚ
krikt_nameÚi)ÚselfÚerimpr   © r   ú!/home/ernad/ernad/python/sidat.pyÚ__init__   s    zSidat.__init__c                 C   sZ   | j }|jd }|d }t |¡D ]2}tj |¡}| dd¡}||jvrJq"|  |¡ q"dS )z:--> The steps that have to be taken to update, for testingÚseedsú/*.txtú.txtr   N)	r	   ÚdirsÚglobÚosÚpathÚbasenameÚreplaceÚliveÚupdate_report)r   r	   Úseed_dirÚglob_stringÚfufiÚbanaÚrepcoder   r   r   Ú
update_all!   s    

zSidat.update_allc                 C   s(   | j }|j| }|jd d | j }|S ©z--> called by trainÚsidatú/)r	   Úreportr   r   )r   r)   r	   r.   Úissues_fufir   r   r   Ú
sidis_fufi-   s    
zSidat.sidis_fufic                 C   s    | j }|jd d | d }|S )ú--> called by startr   r-   r   )r	   r   )r   r)   r	   r'   r   r   r   Ú	seed_fufi4   s    zSidat.seed_fufic                 C   s(   | j }|j| }|jd d | j }|S r+   )r	   r.   r   r   )r   r)   r	   r.   Ú
krikt_fufir   r   r   r3   :   s    
zSidat.krikt_fufic                 C   s"   | j }|j| }|jd d }|S )z--> called by sedatr,   z/sedat.json.gz)r	   r.   r   )r   r)   r	   r.   Ú
sedat_fufir   r   r   r4   B   s    
zSidat.sedat_fufic                 C   sL   g }t |  |¡dƒ}| ¡ D ]*}| d¡r,q| ¡  ¡ d }| |¡ q|S )r1   Úrú#r   )Úopenr2   Ú	readlinesÚ
startswithÚstripÚsplitÚappend)r   r)   ÚpapidsÚ	seed_fileÚlineÚpapidr   r   r   r=   J   s    
zSidat.papidsc                 C   sþ   | j }|j| }|  |¡}|  |¡}t|d | ƒ t ||g¡rTtdƒ |  |¡ || _|j	d d | j
 }tj |¡s¨| jrœtd|› d|› ƒ tdƒ | j|d | jrºtd	| ƒ tj |¡rú| j |¡ | j |¡ | j |¡ | j |¡}|S d
S )z3--> The steps that have to be taken to update seedsú z#sidat: I need to rebuild the seeds.r,   r-   zsidat sees no z to update for zsidat tries a build)Úonly_repcodezsidat wants an update for N)r	   r.   r0   r2   ÚprintÚfilerÚdonereÚbuildr)   r   r   r   r    Úisfiler   r   Úupdate_for_krikt_fufir   r   r   Ú
build_fufi)r   r)   r	   r.   r/   Z
seeds_fufir3   Ú
vemli_fufir   r   r   r$   V   s0    



zSidat.update_reportNc                 C   sÔ   | j }|jd }|d }t |¡D ]¬}tj |¡}| dd¡}|| _||jvrPq"|durb||krbq"||j	vr~t
d| d ƒ q"|j| | _| jjd d	 | _|  |¡ tj| jd
dr¾t
dƒ |  ¡  |  ¡  q"dS )z;--> The steps that have to be taken only once, in principler   r   r   r   Nzsidat does not see the report Ú.r,   z
/sidat.txtT)Úallow_missingzsidat: no external seeds.)r	   r   r   r   r    r!   r"   r)   r#   ÚreportsrC   r.   r'   Úissues_vs_sidocrD   Úis_emptyÚ	get_seedsÚkrikt_seeds)r   rB   r	   r%   r&   r2   r(   r)   r   r   r   rF   ~   s*    



zSidat.buildc                 C   sö   |   | j¡}t |¡ || _t ||g¡sJtj| j|gddsJtdƒ dS i | _d| _	t
|dƒ}| jdu rœ| jr~tdd	dd
 | j ¡ | _| jrœtddd | ¡ D ]}| d¡r´q¤|  | ¡ ¡ q¤t | j|¡ t
| jdƒ}| | j	¡ | ¡  dS )z=find what can be done by issues and what can be done by sidocT)Údo_allow_emptyz)sidat is not renewing the issues_vs_sidocFr   r5   Nzsidat loads the inkri ... rA   )ÚendÚflushÚdone)rT   r6   Úw)r0   r)   rD   Úpreparer/   rE   r'   rC   Úissuesr,   r7   r   r   r
   Úloadr8   r9   Ú
study_seedr:   ÚdumpÚwriteÚclose)r   r2   r/   r>   r?   Z
sidat_filer   r   r   rN   ˜   s4    
ÿ


zSidat.issues_vs_sidocc           
      C   s*  | j }| j}d|jvr"tdƒ dS |jd d }| j}t |¡}|j}|jd d }t	 
||g¡sfdS d }tj |¡r‚d| d	 }|d
krŽdS | ¡ rÖtj |¡sÖd| d | }	| jrÄtd|	 ƒ tj|	dd dS |jd d | }	|d urø|	|7 }	|	d| 7 }	| jrtd|	 ƒ tj|	dd d S )NZget_input_for_seedszsidat sees no way to get seeds.Fr,   ú
/sidoc.xmlÚstylez/seeds_to_amf.xslt.xmlz | /usr/bin/xsltproc z - r   Tzrsync -va ernad@biomed.news:rA   zsidat runs )Úshellz > )r	   r.   r   rC   r   r'   r   ÚstatÚst_sizerD   rE   r    rG   Ú
is_testingr   Ú
subprocessÚrun)
r   r	   r.   Ú
sidoc_fufiZ
sidat_fufiZ
sidat_infoZ
sidat_sizeZstyle_filter_fufiZseeds_to_amfÚrunnerr   r   r   rP   »   s@    


ÿzSidat.get_seedsc                 C   s¬   | j }| j}|jd d }tj |¡s6td| ƒ dS |jd d }tj |¡s\td| ƒ‚|jd d | j }g }| 	|¡ | 	|¡ t
 ||¡s˜dS |j d||¡ d	S )
Nr,   r^   zI don't see Fr_   z/krikts.xslt.xmlr-   ÚkriktsT)r	   r.   r   r   r    rG   rC   Ú	Exceptionr   r<   rD   rE   ÚtÚfufi_to_json)r   r	   r.   rf   Ú
style_fufir3   Úin_fufisr   r   r   rQ   Þ   s"    

zSidat.krikt_seedsc                 C   s@   | j }| j| }||v r*|| | j|< dS |  j|d 7  _dS )NTÚ
F)r   r   rX   r,   )r   Úseedr   r@   r   r   r   rZ   ñ   s    
zSidat.study_seed)F)N)Ú__name__Ú
__module__Ú__qualname__r   r*   r0   r2   r3   r4   r=   r$   rF   rN   rP   rQ   rZ   r   r   r   r   r      s   
(
##r   )r   r   rd   rD   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   Ú<module>   s   