
    Zf(                     l    d dl Z d dlZd dlmZmZmZmZmZ d dlmZ	 d dl
mZ d dlZ G d d          ZdS )    N)Element
SubElementElementTreeQNameparse)Xpafsc                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Z	 	 ddZd Zd Zd Zd Zd ZdS )RixerFc                    || _         || _        d |j        d         i| _        |j        d         | _        t          |j        d                   dz   | _        |j        d         |j        d         d| _        t          |          | _	        d S )Namf   ernad)ae)
r   
do_verbosens
namespacesamf_nslen
end_prefixxpspacesr   xpafs)selferimpr   s      !/home/ernad/ernad/python/rixer.py__init__zRixer.__init__   s|    $%1huoehuo..2#huo#hw/1 15\\
t    c                     | j         j        d         }t          t          |d          | j                  }|                    |           t          |          }|S )Nr   nsmap)r   r   r   r   r   appendr   )r   eler   amf_eleamf_docs        r   wrap_with_amfzRixer.wrap_with_amf   sY    5!%.. $1 1 1sg&&r   c                     || j         j        vrt          d|           | j         j        |         }t          t	          ||          | j                  }|S )Nzno such namespace r   )r   r   	Exceptionr   r   r   )r   namer   r"   s       r   basez
Rixer.base"   s]    TVY555666VYr]eBoo O- - -
r   c                    t          |t          j                  r|}nyt          |t                    rdt          j                            |          }t          j                            |          st          d|z             t          j
        |          }|                    d| j                  }i }|D ]}|                    d          }|||<   |S )1gets docs by ref, returning elements of the textsI don't see your file z//a:text[@ref]r   ref)
isinstanceet_ElementTreestrospathabspathisfiler'   filer	parse_laxxpathr   get)r   argtreein_fufidoc_listdocsdocr.   s           r   r?   z
Rixer.docs.   s    c2?++ 	,DDS!! 	,gooc**G7>>'** D 87 BCCC?7++D::.4=:II 	 	C''%..CDIIr   c                 ^    d|z   dz   }|                     || j                  }|d         }|S );get a doc by reference, may run out of memory because of //z//a:text[@ref=""]r-   r   r9   r   )r   r<   r.   xpr>   r@   s         r   
doc_by_refzRixer.doc_by_ref?   s6    $t+::bT]:;;qk
r   c                 R    d}|                     || j                  }|d         }|S )z(get the collection from the amf documentz/a:amf/a:collectionr-   r   rD   )r   r<   rE   col_listcol_eles        r   get_colzRixer.get_colF   s,    "::bT]:;;1+r   c                 R    d}|                     || j                  }|d         }|S )rB   z"/a:amf/a:collection/e:route/text()r-   r   rD   )r   r<   r.   rE   
route_listroutes         r   rM   zRixer.routeM   s,    1ZZt}Z==
1r   c                    | j         j        d         }t          t          |d          | j         j                  }t	          |t          |d          | j         j                  }|D ]V}|                    |           t	          |t          |d          | j         j                  }|                    |           W|S )2wrap document records elements to form an issuedocr   r   
collectionhaspart)r   r   r   r   r   addnextr!   )r   dorelsr   root_elerI   dorelhaspart_eles          r   wrap_dorelszRixer.wrap_dorelsT   s    5!5//!%, , ,XuV\'B'B#'69. . . 	& 	&EOOE"""$WeFI.F.F+/696 6 6Ku%%%%r   c                     | j         j        d         }t          t          |d          | j                  }t          |          }|                                }|                    |           t          |          }|S )rO   r   r   )	r   r   r   r   r   r   getrootr!   r   )r   fufir   r#   repdocrepdoc_rootr$   s          r   wrap_file_with_amfzRixer.wrap_file_with_amfb   ss    5!%.. $1 1 1tnn&&{###g&&r   c                     d}|                     || j                  }t          |          }|dk    rt          d| d           dS |d         }|                                                    ||           dS )	Nz/a:amf/a:collection/a:haseditorr-      zrixer can't handle z editorsFr   T)r9   r   r   print	getparentreplace)r   r<   haseditor_ele	editor_xpeditor_listtotal_editorsold_haseditor_eles          r   change_editorzRixer.change_editorm   s    5	jjt}jEEK((A????@@@5'N##%%--.?OOOtr   c                    |}t          |t          j                  r|                                }|                     |j                  dk    r|                    d          d         }|                     |          sd S |S )Nr   z./*r   )r/   r0   r1   rY   amf_nametagfindallis_noun)r   
ele_or_docr"   s      r   get_nounzRixer.get_nounx   sy    j"/22 	'$$&&C==!!U**++e$$Q'C||C   	4
r   c                     |}t          |t          j                  r|j        }d| j        z   dz   }|                    |          sd S || j        d          S )N{})r/   r0   _Elementrk   r   
startswithr   )r   name_or_eler(   prefixs       r   rj   zRixer.amf_name   s_    k2;// 	#?Dt{"S(v&& 	4DO$$%%r   c                 N    |                      |j                  }|dS |dv rdS dS )NF)organizationrP   persontextTrj   rk   r   r"   r(   s      r   rm   zRixer.is_noun   s5    }}SW%%<5CCC4ur   c                 N    |                      |j                  }|dS |dv rdS dS )NF)
iseditorof	haseditorTr{   r|   s      r   is_verbzRixer.is_verb   s5    }}SW%%<5...4ur   c                    |                      |          }|Et          |t          j                  r|                                }t          d|j        z              |                     |j                  }d|z   }|                    || j	                  }|D ]r}|
                                }|                     |          s | j        rt          d|j         d           K|
                                                    |           s|S )z/remove references from an amf noun to same nounNrixer: I need a noun, not z.//a:r-   rixer:  is not a verb)ro   r/   r0   r1   rY   r`   rk   rj   rl   r   ra   r   r   remove)r   
doc_or_elenoun_ele	noun_namerE   
same_nouns	same_nounverb_eles           r   flattenzRixer.flatten   s   ==,,*bo66 2'//11
.?@@@MM(,//	y %%bT]%CC
# 	2 	2I **,,H<<)) ? B@HL@@@AAA  ''1111r   c                    ||S |                      |          }|Gt          |t          j                  r|                                }t          d|j        z              dS d|z   dz   }|                    || j                  }|D ]r}|	                                }| 
                    |          s | j        rt          d|j         d           K|	                                                    |           s|S )z,remove references to ref, to avoid recursionNr   z.//*[@ref="rC   r-   r   r   )ro   r/   r0   r1   rY   r`   rk   rl   r   ra   r   r   r   )r   r   r.   r   rE   	ref_nounsref_nounr   s           r   cut_refzRixer.cut_ref   s   ;==,,*bo66 2'//11
.?@@@4S 4'$$RDM$BB	! 	2 	2H))++H<<)) ? B@HL@@@AAA  ''1111r   c                     |                      |          }|t          |           d}|                    || j                  }|D ])}|                                                    |           *|S )Nz.//*[@until]r-   ro   r`   rl   r   ra   r   )r   r   r   rE   	old_verbsold_verbs         r   remove_historyzRixer.remove_history   s~    ==,,*$$RDM$BB	! 	2 	2H  ''1111r   Nr   c                    |                      |          }|t          |           d}|                    || j                  }i }|D ]z}	|dk    rd|	                                j        v r$||                     |	          |vr>|*|                     |	                                          |vrj|	||	j        d         <   {|S )Nz
.//*[@ref]r-   r   untilr.   )ro   r`   rl   r   ra   attribrj   )
r   r   
only_nouns
only_verbslevelr   rE   refed_nounsouts
refed_nouns
             r   get_refszRixer.get_refs   s    ==,,*&&rdm&DD% 	8 	8Jqyyj2244;;;%==,,J>>%==!5!5!7!788
JJ-7D"5)**r   c                     |                      |          }|t          |           |                    || j                  }|D ])}|                                                    |           *|S )Nr-   r   )r   r   rE   r   
issue_eles	issue_eles         r   r   zRixer.remove   sy    ==,,*%%bT]%CC
# 	4 	4I!!((3333r   c                 V   t          |t                    st          d          t          j                            |          }t          j                            |          st          d|z             t          j        |          }|	                    d| j
                  }t          |          dk    r|	                    d| j
                  }d| j        j        d         z   d	z   }d| j        j        d
         z   dz   }d| j        j        d
         z   dz   }|D ]=}|j        }	|	||fv r|	|k    r'|                                                    |           >dD ]J}
|	                    |
| j
                  }|D ])}|                                                    |           *K|S )r+   zFixme: I need a string herer,   z/a:amf/a:collection/*r-   r   z/a:collection/*rq   r   z}haspartr   z
}issuedatez}repcode)z//e:itemz//e:sausage)r/   r2   r'   r3   r4   r5   r6   r7   r8   r9   r   r   r   r   rk   ra   r   )r   r;   r=   r<   eleshaspart_tagissuedate_tagrepcode_tagr"   rk   r4   s              r   members_onlyzRixer.members_only   s   #s## 	;9:::'//#&&w~~g&& 	@4w>???w''zz1dmzLLt99>>::/DM:JJDDFIe,,z9dfi00<?DFIg..; 	, 	,C'C{M222k!!&&s+++/ 	, 	,D::dt}:==D , ,&&s++++, r   c                    |                     d| j                  d         }d|j        vrt          dt          j                   |S |j        d         }|                    |          s|S |d|z   z  }||j        d<   |S )Nz//a:collection[1]r-   r   idzrixer: collection has no handle)file/)r9   r   r   r`   sysstderrendswith)r   r@   repcode	issuedatecoll_eleid_attrs         r   date_the_collectionzRixer.date_the_collection
  s    990T]9KKANx&&3z# # # #J/$'(( 	J3?" '
r   c                     |                     d          D ])}|                                                    |           *|S )Nz//comment())r9   ra   r   )r   r@   comments      r   	decommentzRixer.decomment  sE    yy// 	0 	0G&&w////
r   c                 J    d}| j                             ||          }|j        S )Nz'//a:collection[1]/a:haseditor/*/a:email)r   one_or_firstrz   )r   r@   rE   emails       r   editor_emailzRixer.editor_email  s&    6
''R00zr   )F)NNr   )__name__
__module____qualname__r   r%   r)   r?   rF   rJ   rM   rW   r]   rh   ro   rj   rm   r   r   r   r   r   r   r   r   r   r    r   r   r
   r
      s       	 	 	 	      "        	 	 		 	 	  & & &      &  *   @D   ,    <    
    r   r
   )r3   r   
lxml.etreer   r   r   r   r   etreer0   r   r   r7   r
   r   r   r   <module>r      s    				 



 F E E E E E E E E E E E E E             R R R R R R R R R Rr   