o
    »bcõ  ã                   @   sF   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G dd„ dƒZdS )é    Nc                   @   sf   e Zd Zdd„ Zddd„Zi fdd„Zdd	„ Zddd„Zdd„ Zddd„Z	dd„ Z
dd„ Zdd„ Zd
S )ÚTransc                 C   s   || _ i | _d S ©N)ÚeÚsheets)ÚselfÚerimp© r   ú!/home/ernad/ernad/python/trans.pyÚ__init__   s   zTrans.__init__Fc                 C   sŒ   |   |¡}t |||g¡sdS t |¡}|  ||¡}t|ƒ}| d¡}	~~t 	¡  |r9t
ddƒ}
|
 |	¡ |
 ¡  t |	¡}t ||¡ d S )NFúutf-8z
/tmp/errorÚw)Úget_fufiÚfilerÚdonereÚetÚparseÚ
get_resultÚbytesÚdecodeÚgcÚcollectÚopenÚwriteÚcloseÚjsonÚloadsÚdump)r   ÚshenaÚin_fufiÚout_fufiÚdo_errorÚ
sheet_fufiÚin_docÚout_docÚ	out_bytesÚ
out_stringÚ
error_fileÚdatar   r   r	   Úfufi_to_json   s    





zTrans.fufi_to_jsonc                 C   s¬   |   |¡}| jjd }tj |¡}| dd¡d }|› d|› d|› d}d}	|D ]}
|	d	|
 d
 ||
  7 }	q(d|	› d
|› d
|› }|d|› d|› 7 }tj|ddd dS )z;for papers screen transformation because so maxvars in lxmlÚlogÚ.é   r   ú/Ú_z.errz$--maxvars 1000000 --maxdepth 1000000z --stringparam ú z/usr/bin/xsltproc z > z 2> T)ÚcheckÚshellN)	r   r   ÚdirsÚosÚpathÚbasenameÚsplitÚ
subprocessÚrun)r   r   r   r   Úparamsr!   Úlog_dirÚin_indicÚerr_fufiÚargsÚparamÚsr   r   r	   Ú
via_system'   s   
zTrans.via_systemc                 C   s.   |   ||¡}t|ƒ}| d¡}~~t ¡  |S )Nr   )r   r   r   r   r   )r   r   r"   r#   r$   r%   r   r   r	   Údoc_to_json6   s   
zTrans.doc_to_jsonNc                 C   sH   |d u r	t  d¡}t|tƒrt  |¡}| j|||d}|j|dd |S )Nz<root/>)r8   T)Úpretty_print)r   Ú
fromstringÚ
isinstanceÚstrr   r   r   )r   r   Úingestr   r8   r#   r   r   r	   Úingest_to_fufi@   s   


zTrans.ingest_to_fufic                 C   s6   |   |¡}t |¡}t |¡}| d¡ || j|< |S )Ni@B )r   r   r   ÚXSLTÚset_global_max_depthr   )r   r   r!   Ú	sheet_docÚsheetr   r   r	   Ú
load_sheetT   s   




zTrans.load_sheetc                 C   sF   || j vr
|  |¡ | j | }|d u r||ƒ}|S ||fi |¤Ž}|S r   )r   rK   )r   r   r"   r8   rJ   Úresultr   r   r	   r   \   s   


ÿzTrans.get_resultc                 C   sF   | j }|jjd }| j jd d | | }tj |¡s!td| ƒ‚|S )NÚxslÚstyler,   zI don't see the file )r   ÚabovoÚextr1   r2   r3   ÚisfileÚ	Exception)r   r   r   rP   r!   r   r   r	   r   g   s   zTrans.get_fufic                 C   sP   |   |¡}t |||g¡sdS t |¡}| ¡ }|  ||¡}t | ¡ |¡ |S )NF)r   r   r   r   r   Úgetrootr   Úinstall_xml)r   r   r   r   r!   r"   Úin_eler#   r   r   r	   Úfufi_to_fufio   s   

zTrans.fufi_to_fufic                 C   s<   |   |¡}t |¡}| ¡ }|  ||¡}t | ¡ |¡ |S )ztranform fufi to itself)r   r   r   rS   r   r   rT   )r   Úfufir   r!   r"   rU   r#   r   r   r	   rW   {   s   

z
Trans.fufi)Fr   )Ú__name__Ú
__module__Ú__qualname__r
   r(   r?   r@   rF   rK   r   r   rV   rW   r   r   r   r	   r      s    



r   )	r   r   r2   Ú
lxml.etreeÚetreer   r6   r   r   r   r   r   r	   Ú<module>   s   