
    %Xg5                         d dl Z d dlZ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 d dlmZ d dlmZ  G d d      Zy)    N)Dexis)Recon)Rixerc                   J    e Zd Zd
dZd Z	 	 ddZddZd Zd
dZddZ	d	 Z
y)Asembc                 x   || _         || _        t        | j                         | _        |j                  d   |j                  d   d| _        d|j                  d   i| _        d|j                  d   i| _        t        | j                         | _        t        | j                         | _
        i | _        d | _        y )Namfernad)aer   r   )r   
do_verboser   dexisnsnsanser   rixerr   recondocachecol_ele)selferimpr   s      !/home/ernad/ernad/python/asemb.py__init__zAsemb.__init__   s    $466]
)+%)'*+466]
466]
    c                 l    | j                   }|j                  |   j                  d   }|dz   |z   dz   }|S )z---> called by class to see if out_fufi existsmocla/.amf.xml.gz)r   reportdirs)r   repcode	issuedater   	mocla_dirout_fufis         r   fufiz
Asemb.fufi$   s<    FFHHW%**73	s?Y.>r   Nc                    | j                   }i | _        i | _        |$| j                   j                  }|t	        d       y|| j                  |      | _        n| j                  |      | _        |t        j                  |      }||j                  }|t	        d       y|j                  |   j                  d   }|1t        |d      r|j                  |j                  }na|dz   |z   dz   }nU|j                  |   j                  d   }|d|z   dz   z  }t        j                  j!                  |      st	        d|        y|dz   |z   d	z   }t        j"                  |       |t%        d
      t        j&                  ||g      st	        d|z          |S t	        d| d|        | j(                  j+                  ||      }	|	t	        dt,        j.                         |9|dz   |z   dz   }t        j                  j!                  |      st	        d|z          y|| _        | j3                  |       | j4                  j7                  |d      }
| j8                  j;                  |
      }
| j8                  j=                  |
      }
t?        | j                        }|}d}|
jA                  d| j                   jB                  jD                        }t?        |      dkD  r=|d   jF                  }|}|jI                  d      rtK        |dd       }	 tK        |      }nd|jN                  v r|jN                  d   }|<|jI                  d      r tK        |dd       dz  }tQ        ||z        }ntQ        |      }| j4                  j7                  |d      }
| j8                  j;                  |
      }
| j8                  j=                  |
      }
| j                   jR                  jU                  |
      | _+        tY        jZ                  tY        j\                  |j^                  d   d            }||_#        tY        jZ                  tY        j\                  |j^                  d   d            }| j`                  |_#        tY        jZ                  tY        j\                  |j^                  d   d            }| jb                  |_#        tY        jZ                  tY        j\                  |j^                  d   d            }te        |      |_#        | jV                  jg                  |       | jV                  jg                  |       | jV                  jg                  |       | jV                  jg                  |       | ji                  |       |
jk                  |dd !       t	        d"|z          |S # tL        $ r |jN                  d   }Y w xY w)#z*build the amf file, use doc_fufi for brownNzasemb needs a repcode.zasemb needs an issuedate.r   
given_fufir   z.sidezasemb needs r   zasemb needs a side fufizasemb does not renew asemb: dexis.set_issuedate(, doc_fufi=doc_fufi%asemb can not continue without dexis.filezasemb can't start without 	add_statez//e:truncate
namespacesr   %truncated   r
   r"   entropyaverent
issue_size   Tcompressionpretty_printasemb wrote )6r   papnuspapwesgiven_repcodeprintlast_sigsigfilerget_issuedategiven_issuedater   r    hasattrr'   ospathisfileprepare	Exceptiondonerer   set_issuedatesysstderr	side_fufiparse_side_fufir   amf_docr   flattenremove_historylenxpathabovonsmaptextendswithfloat
ValueErrorconfintxget_colr   etElementQNamer   r7   r8   strappendcompose_docswrite)r   r!   r"   r+   parentr   r#   rR   r$   outrepdocr9   max_docsr5   	truncatesnumber_truncateissuedate_eleentropy_eleaverent_eleissue_size_eles                       r   buildzAsemb.build+   s    FF?ff**G./>}}W-DH}}V,DH++H5I))I 12HHW%**73	>q,'ALL,DLL	%Oi7'A	(--g6Iy722I77>>),YK01s?Y.>h566||Hyk2)H45O+I;k(LMjj&&y8&D;9

K!C)3g=I77>>),2Y>?"Y'##Gt#<##F+**62%
LL,0FFLL,>,> ! @	y>A }))H&O  %"'2"7."'"8 166!vvj)H  % !B036x*45x= ##Gt#<##F+**62vvxx''/

288ADDM;#GH&jj!$$w-!CD<<jj!$$w-!CD<<BHHQTT']L$IJ!*oM*N+K(K((#XADAnx'(I  .66*-.s   V+ +WWc                 4   | j                   }i | _        i | _        d| _        ||j                  }|t        d       y ||j                  }|t        d       y t        d| d|        | j                  j                  ||      }|t        dt        j                         |j                  j                  |j                  d	         }||vrt        d
       y ||   }t        j                  |      }|j!                  d| j                   j"                  j$                        }	d}
|	D ]  }|
dz  }
d| j                  |<    |j&                  |   j                  d   }|dz   |z   dz   }| j(                  j+                  |d       }| j,                  j/                  |      }| j,                  j1                  |      }| j(                  j+                  |d       }| j,                  j/                  |      }| j,                  j1                  |      }| j                   j2                  j5                  |      | _        t9        j:                  t9        j<                  |j>                  d   d            }||_         t9        j:                  t9        j<                  |j>                  d   d            }| j6                  jC                  |       | j6                  jC                  |       | jE                  |
       |jG                  |dd       t        d|z          |S )N z0asemb: build_unsorted can't do without a repcodez3asemb: build_unsorted can't do without an issuedater(   r)   r*   r,   r-   issuesz4asemb: build_unsorted can't do without an issue fufiz//a:text[@ref]/@refr1   r   r:   r   r   r   r/   r
   r"   r9   Tr;   r>   )$r   r@   r?   rD   rA   rB   rG   r   rO   rP   rQ   ddates_uniquer    rE   	parse_laxrX   rY   rZ   r   r   rT   r   rU   rV   ra   rb   r   rc   rd   re   r   r[   rg   rh   ri   )r   r!   r"   r+   r   rk   issue_fufis
issue_fufidocpapidsrm   papidr#   r$   rl   rp   rs   s                    r   build_unsortedzAsemb.build_unsorted   s   FF?ooGHI))I KL+I;k(LMjj&&y8&D;9

Kcc&&qvvh'78K'HI +
ooj)0&*ffll&8&8  :EMH!"DKK  HHW%**73	s?Y.>##Gt#<##F+**62##Gt#<##F+**62vvxx''/

288ADDM;#GH&BHHQTT']L$IJM*N+(#XADAnx'(r   c           	      &   | j                   }d}| j                  }| j                  D ]g  }t        j                  d|      }| j                  |      }|| j                  v r| j                  |   }n|}t        j                  t        j                  |j                  d   d      t        |      t        j                  |            }	|j                  |	       |j                  |       t        j                  t        j                  |j                  d   d      t        | j                  |         | j                  t        j                  |            }
|j                  |
       | j                  j                  |       |d	z  }||k\  sh y  y )
Nr   haspart)rZ   r
   sausage)decimshonuitem)weight	criterionpoletr:   )r   r   r@   rc   rd   compose_docr?   re   r   rf   shonusmakerg   rD   letnusr   )r   rm   r   
count_docsr   r   haspart_eletext_elenumbersausage_eleitem_eles              r   rh   zAsemb.compose_docs   s<   hh
FF[[E**Yc:K''.H#U+#**RXXadd7mY%G+.v;+1;;v+>@K OOK(x(zz"((144=&"A),T[[-?)@,0HH(.J(?AH
 x(LL,!OJX%5 !6 	r   c                    || j                   v r| j                   |   S |rt        d|z   dz   dd       | j                  j                  |      j	                         }|rt        dd       	 t        j                  |      }| j                   |<   |S # t
        j                  $ r? |dd	 d
z   }t        d| dt        j                         t        j                  d       Y bw xY w)Nzfetch z ... rv   T)endflushdone)r   r   2   u    …zasemb can not parse 'z'
rerun dexisr-   r:   )r   rB   r   fetchdecoderc   
fromstringXMLSyntaxErrorrP   rQ   exit)r   r   r   rk   r}   	print_outs         r   r   zAsemb.compose_doc   s    DLL <<&&(U"W,"DAjju%,,.&%	--$C "U
    	Ab	F*I))NCzz#HHQK		s   -B AC%$C%c                    |i | _         i | _        |}|| _        | j                  }t        |d      }i }d}d}	 |j	                         }|D ]  }|dd	 }|j!                  d
      }t#        |      dk  rt        d|z   dz          9|d   }|dk(  rd}nG|j%                  d      s|j%                  d      r%|j&                  d   }|d   }	 t)        |      }|dz  }	 t)        |      }|||d   <   |dkD  r||t/        j0                  |d      z  z  }|dz  }|| j                   |d   <    t-        t3        |d            | _        t-        t3        d|z  |z  d            }t-        |      | _        t9        ||j:                  d      }|D ]  }||   | j                  |<    | j                  S # t
        $ r t        j                         }dt        j                  j                  |      z   }	|	d|z   z  }	d| }
t        d|	 t        j                         t        j                  ||	       t        |
t        j                         t        j                  |       Y yw xY w# t*        $ r/ t-        |      }t        d| t        j                         d}Y w xY w# t*        $ r/ t-        |      }t        d| t        j                         d}Y w xY w)z%stores in self.weight and self.numberrr   z/home/ernad/_zasemb can not read zmocla: copy to r-   Fr3   	   zbad parts with line ''rv   r   ze-zasemb can't parse weight r6   r:   T)keyreverse)r?   r@   rR   open	readlinesUnicodeDecodeErrortimerI   rJ   basenamerB   rP   rQ   shutilcopy2removesplitrW   r\   	partitionr]   r^   rf   mathlogroundr7   r8   sortedget)r   r%   rR   	side_filepapwer   r7   lines
epoch_timesavegard_fufierrlinepartsr   weightsprint_weightr8   sorted_papidsr   s                      r   rS   zAsemb.parse_side_fufi  s    DKDKI!DNNN	C(	
	'')E D":DJJt$E5zA~-4s:;1XF| %)> **3/ "6]F  #v %E%(Oz6DHHVQ$777!OJ$.DKKa!I J 5!,-eC'MJ6:;7|u%))TB"E!&uDKK #{{o " 	 J*RWW-=-=i-HHMS:--M'	{3COM?3#**ELLM2#CJJ'IIi 	8 " #&v;L5l^D"zz+ F  "6{1,@::' s6   F( IJ(B0II4JJ4KKc                 <   | j                   }|j                  |   j                  d   }|j                  j	                  |d      }|y|| _        |j                  j	                  |d      }t        j                  j                  |      j                  dd      }|S )zget model for a reportr   z*.model)searchFz.modelrv   )
r   r   r    rx   last_by_mtime
model_fufirI   rJ   r   replace)r   r!   r   r#   
last_modellast_model_fufirD   s          r   rC   zAsemb.last_sigQ  s    FFHHW%**73	SS&&y&C
$##++Ii+Hgg/77"E
r   )F)NNNN)N)__name__
__module____qualname__r   r%   rt   r   rh   r   rS   rC    r   r   r   r      s9      <@m^3jB(HZ
r   r   )r   rI   rP   r   r   
lxml.etreeetreerc   rE   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s7     	 
         I Ir   