a
    aI                     @   sZ   d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dl	m
Z
 G dd dZdS )    N)Dexisc                   @   sJ   e Zd Zdd Zdd ZdddZdd	 ZdddZdddZdd Z	dS )Asembc                 C   sT   || _ t| j | _|jd |jd d| _d|jd i| _d|jd i| _i | _d S )Namfernad)aer   r   )r   r   dexisnsnsaZnsedocache)selferimp r   !/home/ernad/ernad/python/asemb.py__init__   s    zAsemb.__init__c                 C   s*   | j }|j| jd }|d | d }|S )z.--> called by class to see if out_fufi exisitsmocla/.amf.xml.gz)r   reportdirs)r   repcode	issuedater   	mocla_dirout_fufir   r   r   fufi   s    z
Asemb.fufiNc                 C   s  | j }i | _i | _|du r6| j j}|du r6td dS | || _|durTt|}|du rv|j	}|du rvtd dS |j
| jd }t|dr|jdur|j}n|d | d }|d | d }|du rtd	t||gstd
|  |S td| d|  | jj||d}|du r,tdtjd |du rd|d | d }tj|sdtd|  dS || _| | t| j}	|	}
d|jv r|jd }|d dkrt|dd d }t||	 }
nt|}tt|jd |	 }
|j| }t|| _ | j j!"|| _ | j j!#| j | _$t%t&|j'd d}||_(d|_)t%t&|j'd d}| j*|_(d|_)t%t&|j'd d}| j+|_(d|_)t%t&|j'd d}t,|	|_(d|_)| j$-| | j$-| | j$-| | j$-| | .|
 | j j/|dd td|  |S )z*build the amf file, use doc_fufi for brownNzasemb needs a repcode.zasemb needs an issuedate.r   
given_fufir   z.sider   zasemb needs a side fufizasemb does not renew zasemb: dexis.set_issuedate(z, doc_fufi=)doc_fufiz%asemb can not continue without dexis.)filezasemb can't start without truncate%r   d   r   r   
entropyaverent
issue_size   )compressionzasemb wrote )0r   papnuspapwesgiven_repcodeprintlast_sigsigfilerget_issuedategiven_issuedater   r   hasattrr   	Exceptiondonerer   set_issuedatesysstderrospathisfile	side_fufiparse_side_fufilenconffloatintreconsetparserepdocxwrap_file_with_amfget_colcol_eleElementQNamer	   texttailr#   r$   strappendcompose_docswrite)r   r   r   r   r   r   r:   r   outr%   max_docsr   Z
recon_fufiZissuedate_eleZentropy_eleZaverent_eleZissue_size_eler   r   r   build$   s    








zAsemb.buildc                 C   s   | j }d}| j}| jD ]}tjd|d}d|_| |}| j| }tjt|j	d dt
|t|d}	d|	_||	 d|_|| tjt|j	d dt
| j| | jt|d	}
d|
_||
 d|_| j| d|_|d
7 }||kr d S qd S )Nr   haspart)nsmapr"   r   Zsausage)Zdecimshonuitem)weightZ	criterionZpoletr&   )r
   r   r)   rA   rH   rK   compose_docr(   rI   r	   rL   shonusmakerM   r-   letnusrG   )r   rQ   r
   
count_docsr   papidhaspart_eleZtext_elenumberZsausage_eleZitem_eler   r   r   rN   s   s<    





zAsemb.compose_docsFc                 C   sl   || j v r| j | S |r.td| d ddd | j| }|rNtddd t|}d|_|| j |< |S )	Nzfetch z ...  T)endflushdone)rb   r"   )r   r+   r   fetchdecoderA   
fromstringrK   )r   r]   
do_verboserP   docr   r   r   rX      s    



zAsemb.compose_docc                 C   s6  |duri | _ i | _|}|| _| j}t|d}i }d}d}| D ]}|dd }|d}t|dk rztd| d  qB|d }	|	d	krd}	t|	}	|	||d
 < |	dkr||	t	
|	d 8 }|d
7 }|| j |d
 < qBtt|d| _ttd| | d}
t|
| _t||jdd}|D ]}|| | j|< q| jS )z%stores in self.weight and self.numberNrr   r   	   zbad parts with line ''r`   r&   r!   T)keyreverse)r(   r)   r:   open	readlinessplitr<   r+   r>   mathlogrL   roundr#   r$   sortedget)r   r   r:   	side_fileZpapwer\   r#   linepartsrW   r$   Zsorted_papidsr]   r   r   r   r;      s@    


zAsemb.parse_side_fufic                 C   s`   | j }|j| jd }|jj|dd}|du r2dS || _|jj|dd}tj|	dd}|S )zget model for a reportr   z*.model)searchNFz.modelr`   )
r   r   r   dlast_by_mtime
model_fufir7   r8   basenamereplace)r   r   r   r   
last_modellast_model_fufir-   r   r   r   r,      s    zAsemb.last_sig)NNN)F)N)
__name__
__module____qualname__r   r   rR   rN   rX   r;   r,   r   r   r   r   r      s   
O

)r   )rr   r7   r5   
lxml.etreeetreerA   r.   r[   rY   r   r   r   r   r   r   r   <module>   s   