
    ngU                         d dl Z 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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      Zy)	    N)Folder)Rixer)Staff)Idref)Xpafsc                       e Zd Zd!dZd Zd Zi dfdZd Zd Zi ddfd	Z	d"d
Z
d Zi df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 Zd Zd Zd Zd Zd Zd Zd Zy )#ReconFc                    || _         |j                  d   |j                  d   d| _        || _        t	        | j                   |      | _        t        | j                   |      | _        t        | j                   |      | _	        t        | j                   |      | _        d | _        || _        t        | j                         | _        d | _        i | _        d | _        t%        j&                         | _        y )Namfernad)ae)
do_verbose)r   nsxpspacesr   r   folderr   staffr   rixerr   xpafsreportr   idrefwe_have_more_refsficons
issuedatesdatertoday)selferimpr   s      !/home/ernad/ernad/python/recon.py__init__zRecon.__init__   s    #hhuo#hhw/1$TVV
;466j9
466j9
466j9
$466]
!%[[]
     c                 (    |dk(  ry|dk(  ry|dk(  ry y)N
iseditorof	haseditorisreplacedbyF )r   verbs     r   get_oppoverbzRecon.get_oppoverb+   s(    <;>! r!   c                 L   | j                   }|j                  d   dz   |z   }|j                  j                  |d      }t	        |j
                  d         }i }|t        d|        t                |D ],  }t        j                  j                  |      }|d|  }	|||	<   . |S )Nrecon/F)with_gzr   zrecons sees no fufis in r   )r   dirsdlist_amf_fufislenextprintquitospathbasename)
r   whatr   r   fufiscut_lenreconsfufibanarepcodes
             r   fillz
Recon.fill7   s    FF3&-""65"9aeeEl#=,VH56FD77##D)D1gX&G"F7O  r!   Tc                     | j                  |||      }| j                  j                  |j                               }t	        j
                  || j                  j                         |S )N	add_statedo_refs	top_nsmap)docr   wrap_with_amfgetrootetcleanup_namespacesr   r   )r   r=   rA   rB   rE   amf_docs         r   rJ   zRecon.amf_docG   sM    hhw)WhE****3;;=9
g;r!   c                 <   | j                   }|j                  d   dz   }|dz   |z   dz   }t        j                  |      }t        |      dk(  rt	        d| t
        j                         y t        |      dkD  rt	        d	| t
        j                         y |d   S )
Netcz/reports/availabler+   *.xmlr   zrecon sees no file for file   recon sees several files for r   r-   globr0   r2   sysstderr)r   r=   r   fudiglob_stringavail_fufiss         r   r;   z
Recon.fufiM   s    FFvve}33Sj7*W4ii,{q +K=9zz#{a1+?zz#1~r!   c                     | j                   }|j                  d   dz   }|dz   |z   dz   }t        j                  |      }t        |      dk(  ryt        |      dkD  rt	        d| t
        j                  	       yy
)NrL   z/reports/enabledr+   rM   r   FrP   rQ   rN   TrR   )r   r=   r   rV   rW   
enab_fufiss         r   is_it_enabledzRecon.is_it_enabled]   sy    FFvve}11Sj7*W4YY{+
z?az?Q1+?zz#r!   c                    | j                   j                  d   }| j                  |      }|yt        j                  j                  |      st        d| t        j                         yt        j                  |      }|j                         }| j                  |      s1t        j                  |t        j                  |d            }	d|	_        | j#                  |      r*t        j                  |t        j                  |d            }
|r| j$                  j'                  |      }|S |rd| _        | j+                  |      }| j                   j,                  |   j.                  d   }| j                   j0                  d	   r| j2                  j5                  ||      }|r%t7        |t8              r|d
z   }t;        j:                  |      }|D ]|  }| j<                  rt        d|        t        j                  j?                  |      }|dd }||v rFt        j                  |      }|^|jA                  |j                                ~ nyt7        |tB              ri|D ]d  }|dz   |z   dz   }t        j                  j                  |      s.t        j                  |      }|F|jA                  |j                                f | j$                  j'                  |      }|S )zget the recon documentr   Nzrecon does not see rN   closedlatliTstate	use_staffz/*.xmlzrecon adds r+   z.xml)"r   r   r;   r4   r5   isfiler2   rT   rU   filer	parse_laxrG   r[   rH   
SubElementQNametextlatest_linkr   	decommentr   resolve_refsr   r-   confr   inject
isinstancedictrS   r   r6   appendlist)r   r=   rA   rB   no_staffernad_nsr;   rE   doc_ele
closed_ele	latli_ele	state_dirrW   state_fufis
state_fufi
state_banakind	state_docitems                      r   rE   z	Recon.dock   sa   6699W%yy!<ww~~d#'v.SZZ@ood#++-!!'*w80LMJ&JOG$grxx'/JKI**&&s+CJ &*D"##C(CFFMM'*//8	66;;{#jj''9G)T*'(2"ii4"-JJ<89!#!1!1*!=J%cr?Dy(  %
 ;I ( NN9#4#4#67 #. It,%D!*S4!7&!@J77>>*5  %
 ;I ( NN9#4#4#67 & jj""3' 
r!   c                    | j                   j                  |      }| j                  rt        dt	        |      z          t        |      dk(  r| j                  rt        d       |S |D ]	  }| j                  rt        d|z          ||   }|j                  d   }| j                  j                  |      }|dv r| j                  j                  ||      }n| j                  |dd       }|+| j                  rt        d	| t        j                  
       |j                         }t        j                   || j"                  j$                         |j'                         j)                  ||        | j                   j                  ||      }| j                  j+                  |       | j                  j-                  |       t        |      dk(  r|S |dk  r| j/                  ||dz          |S )Nzrefs is r   zno refszref ref)personorganizationF)rB   rA   zstaff can't resolve rN   rC   )levelrP   )count)r   get_refsr   r2   strr0   attribr   nounr   rl   rE   rT   rU   rG   rH   rI   r   r   	getparentreplaceclear_refs_when_iddelete_by_subsequest_idrj   )	r   rE   r   refsr~   ref_eler   resolved_docresolved_eles	            r   rj   zRecon.resolve_refs   s   zz""3'??*s4y()t9>i JCfsl#3iG..'C::??7+D11jj''S188C$8GL#??06"zz+'//1L!!,$&&))D''>) * zz""3e"4

%%c*

**3/t9>J19cq1
r!   c                    | j                  |      }d}|j                  || j                        }g }|D ]"  }d|j                  v r|j	                  |       $ |}t        |      }|dk7  rt        d| d       y |d   S )Nz/a:haseditor
namespacesuntilrP   zrecon: I can't deal with z editorsr   )rE   findallr   r   ro   r0   r2   )r   r=   rE   	editor_xpeditor_elescurrent_editors
editor_eletotal_editorss           r   get_current_editorzRecon.get_current_editor   s    hhw"	kk)kF%J*+++"":. & &K(A-m_HEF1~r!   c                 |    i }d| _         | j                  j                  D ]  }| j                  |||      ||<    |S )z'check relational data related to issuesFr@   )verboser   r   rE   )r   rA   rB   docsr=   s        r   all_docszRecon.all_docs   sG    
 vv}}G HHW	-4 % 6DM % r!   c                    | j                   j                  |   }t        j                  j	                  |      st        dt        j                         i S t        | j                   j                  d         }|dz   | j                   j                  d   z   }t        j                  |      D ]V  }t        j                  j                  |      d|  }|| j                  v r5t        j                  |      | j                  |<   X y )Nz"I don't see the {intype} directoryrN   r   z/*r   )r   r-   r4   r5   isdirr2   rT   rU   r0   r1   rS   r6   r   rc   rd   )r   intyperV   lenamf
staff_globr;   handles          r   
add_ficonszRecon.add_ficons   s    vv{{6"ww}}T"6SZZHITVVZZ&'D[466::e#44
IIj)DWW%%d+Avg6F$"'//$"7DKK *r!   c                     | j                  d       | j                  d       | j                  D ]  }| j                  |        y )Nr   avail)r   r   check_issuedates)r   r   s     r   check_dateszRecon.check_dates  s6      kkF!!&) "r!   c                    | j                   |   }| j                  7| j                  j                  | j                  j
                  d         | _        dD ]  }d|z   dz   }|j                  |      }|D ]  }|j                  }| j                  j                  |      }|s-|j                  |   }	|	| j                  vsK|	| j                  k  s[t        t        j                  |             t        d|	 d|        t                  y )Nissuesfromr   z.//*[@]z	bad date z in config )r   r   r   loose_datesr   r-   r   tagr   is_verbr   r   r2   docingshowr3   )
r   r   rE   destxp
found_eles	found_eler   r   dates
             r   r   zRecon.check_issuedates  s    kk&!??""kk55dffkk(6KLDO%DD3&BRJ'	mm**,,S1 ''-t.djj(fkk)45	${6(CD (	 &r!   c                    | j                  |      }| j                  |d      }t        j                  j	                  |      }| j
                  j                  |dg      }|D ]d  }| j                  j                  |      }t        j                  j                  |      s>t        j                  j	                  |      }||kD  sc|}f |S )NT)rq   r$   )
only_verbs)	r;   rE   r4   r5   getmtimer   r   r   rb   )r   r=   r;   repdoc	max_mtimer   r~   mtimes           r   r   zRecon.mtime!  s    yy!'D1GG$$T*	zz""6{m"DC::??3'D77>>$'GG$$T*Ey !	  r!   c                 H   |j                  d      }|D ]A  }||j                  d   kD  r |j                         j                  |       5|j                  d= C |j                  d      }|D ]4  }||j                  d   k  s|j                         j                  |       6 |S )Nz.//*[@until]r   z.//*[@from]r   )r   r   r   remove)r   rE   	issuedate
until_eles	until_ele	from_elesfrom_eles          r   remove_outdatedzRecon.remove_outdated1  s    [[0
#I9++G44##%,,Y7 $$W- $ KK.	!H8??622""$++H5 " 
r!   c                     dD ]L  }|rd|v r
|j                  || j                        }|D ]!  }|j                         j                  |       # N |S )N)z.//e:*z.//a:iseditorofz.//a:person/a:emailemailr   )r   r   r   r   )r   rE   
show_emailr5   	path_elespath_eles         r   	bareboneszRecon.barebones?  sZ     IDgoDT]]CI%""$++H5 &	 I 
r!   c                    t        j                         }| j                  j                  d   d| z   }| j                  j                  |      }|t        |      dk(  ryt        |      d   }||   }t         j                  j                  |      }|dz   }t         j                  j                  |      rOt        j                  |      }	|	dd }
|
|k(  r| j                  rt        d|
        yt        j                  |       t        j                  |       | j                  rt        d	| d
|        	 t        j                   |d       t        j                  |       y# t"        $ r Y !w xY w)Nblattz	/reports/r   Fz/latest.html
   zblata: link is there at Tzblata links z to latest.html in zlatest.html)r4   getcwdr   r-   r   by_datesr0   rp   r5   r6   islinkreadlinkr   r2   r   chdirsymlinkFileExistsError)r   r=   	start_dir	html_fudidates	last_dater;   r<   fuli
there_link
there_dates              r   rh   zRecon.latest_linkJ  s>   IIK	FFKK(Ywi+@@	$$Y/=CJ!OKN	Yww%>)77>>$T*J#Ab)JY&??4ZLABIIdO
??L&9)EF	JJt]+ 	  		s   8E$ $	E0/E0c                 \    |j                  d| j                        }t        |      dkD  ryy)Nz//e:no_publishr   r   TF)r   r   r0   )r   rE   eless      r   is_it_nopublishzRecon.is_it_nopublishf  s*    {{+{Ft9q=r!   c                     | j                   j                  dd      }| j                  j                  |j                  d<   | j                  g d      }|D ]$  }|j                  ||   j                                & |S )N
collectionr   idFr@   )r   baser   impnar   r   ro   rG   )r   root_eler   r=   s       r   unitedzRecon.unitedl  sg    ::??<7 $==2u==GOOHW-5578  r!   c                     | j                  d       | j                  d       | j                          | j                          | j                          y )Nr   r   )r   check_av2staffcheck_bigwigcheck_we_have_editor)r   s    r   
check_relszRecon.check_relst  s>      !!#r!   c                    dD ]  }||j                   v r1||j                   vr y|j                   |   |j                   |   k7  r y||j                   v sQ||j                   vr y|j                   |   |j                   |   k7  s y y)Nr   FT)r   )r   v1v2r   s       r   has_it_same_spanzRecon.has_it_same_span{  s    'F"* 99V$		&(99 "* 99V$		&(99  ( r!   c                     |dd  }|S )N   r&   )r   strings     r   	de_amf_nszRecon.de_amf_ns  s    r!   c           	         d| j                   j                  d   z   dz   }|dz   }| j                  D ],  }|j                  | j                   j                  dz         s-| j                  |   }|j                  d| j                        }|D ]  }|j                         }| j                  |j                        }| j                  |      }	|	C|	du rt        d	| d
| d       Z|j                  }
|
|v rkt        |j                  d            dkD  r|j                  d   }|| j                  vrt        d| d|        | j                  |   }d|	z   dz   |z   dz   }|j                  || j                        }t        |      dk(  rd|	 d| d}|d| dz  }t        |       t        |      dkD  r2t        t        |            }| d|	 d| d}|| z  }t        |       _|d   j                         }| j                  ||      rt        d       t        t!        j"                  |      d       t        t!        j"                  |              / y )N{r   }r   -z	//*[@ref]r   Fz	bad verb z for z, record garbled../*r   r~   zNo relations to z	 seen in z//a:z	/*[@ref='z']zno   in zrecord 
rP   zs z
 in recordzIncompatible spans )end)r   r   r   
startswithr   xpathr   r   r   r   r(   r2   r0   r   r   r   r   r   )r   amf_nstags_to_ignorer   rE   target_eles
target_eleverb_eler'   target_verbr   target_handle
target_docr   target_nounsmessr   target_verb_eles                     r   r   zRecon.check_av2staff  s]   tvvyy''#- </kkF$$TVV\\C%78++f%C))KDMM)JK)
%//1~~hll3"//5&%'IdV58IJK nn.(z''./!3 * 1 1% 8 3,]O9VHMN![[7
k)K7&@4G)//t}}/M|$) Qvhd;Dgm_B77D$K|$q(L 12E#WAk]"VHJGD}o.D$K".q/";";"=((?C*+fkk(+4fkk/23M * "r!   c           
         i }g }| j                   D ]  }d|vs|j                  |        | j                   D ]  }d|vr| j                   |   }|j                  d| j                        }|D ]  }d|j                  vr|j                  d   }||v r=|j                  d| j                        }t        |      dkD  rt        | d| d       b||v r||   }	t        d	| d
| d|	        |||<     y )Nr   "/a:collection/a:haseditor/a:personr   r~   r   r   r   z: bigwig and other datazbigwig error z of )r   ro   r   r   r   r0   r2   )
r   perid_repcodebigwigsr   rE   ed_elesed_eleperid
other_elestargets
             r   r   zRecon.check_bigwig  s   kkF& v& " kkF& ++f%Cii D+/==   :G!-e,G#!'e!NJ:*tF83JKLM)*51FM%VHDIJ'-e$ " "r!   c                     | j                   D ]K  }| j                   |   }g }d|vr#| j                  |       |j                  |       ;| j                  |       M y )Nr   )r   &check_person_handle_in_homepage_personro   &check_person_handle_in_homepage_report)r   r   rE   r  s       r    check_person_handle_in_homepagesz&Recon.check_person_handle_in_homepages  sV    kkF++f%CG& ;;C@v&77< "r!   c                    t        j                  |      }|j                  d| j                        }t	        |      dk7  rt        d|        y |d   j                  d      d   }|j                  d| j                        }t	        |      dk7  rt        d	|        y |d   j                  }||vrt        d
| d|        y y )Nz/a:person/@idr   rP   zI need a handle in r   r+   z/a:person/a:homepageno hopa in recon:  not in )r   r   r   r   r0   r2   splitrg   )r   rE   
doc_stringidsr  hopas	main_hopas          r   r  z,Recon.check_person_handle_in_homepage_person  s    [[%
iiDMMiBs8q='
|45AS!"%		0T]]	Ku:?Kw'(!HMM		!GE7(9+67 "r!   c                 x   t        j                  |      }|j                  d| j                        }t	        |      dk(  ry |D ]  }t        j                  |      }|j                  d| j                        }t	        |      dk(  rD|j                  d| j                        }t	        |      dk7  r y |d   j                  d      d   }d	}|j                  || j                        }	t	        |	      dk(  rt        d
|        |	d   j                  }
||
vst        d| d|
        t        |         y )Nr  r   r   r   z./@refrP   r+   r  z./a:homepager  r  r  )r   r   r   r   r0   r  r2   rg   )r   rE   r  editors
person_eleattribute_elesr   perefr   r   r!  s              r   r  z,Recon.check_person_handle_in_homepage_report  s-   [[%
))@'+}}  6w<1!JZ0J'--e-NN>"a'##H#GD4yA~GMM#&r*EB$$RDMM$BE5zQJ<01aII%whyk:;&) "r!   c                    | j                   D ]  }|j                  | j                  j                  dz         s,| j	                  |      s>| j                   |   }|j                  d| j                        }d}|D ]  }d|j                  vs|dz  } |dk(  st        j                  |      }t        d|         y )Nr   z/a:collection/a:haseditorr   r   r   rP   zI need an editor in
)r   r   r   r   r[   r   r   r   r   r   r2   )r   r   rE   r   count_editorsr   r  s          r   r   zRecon.check_we_have_editor  s    kkF$$TVV\\C%78%%f-++f%C))$?/3}} $ >KM)
*"3"33!Q&M * !#[[-
-j\:; "r!   c                    | j                  |      }t        d|        d}| j                  j                  ||      }d}| j                  j                  ||      }t	        |      dk(  ry t	        |      t	        |      k7  rt        dt
        j                         y t	        |      }i }d}	|	|k  r||	   |||	   <   |	dz  }	|	|k  r|S )Nzrecon: start from z/a:collection/e:forked/@reportz/a:collection/e:forked/@startr   zrecon: bad forking datarN   rP   )rE   r2   r   runr0   rT   sterr)
r   r=   rE   
repcode_xprepcodes	starts_xpstartstotal_mothersmothersr   s
             r   get_motherszRecon.get_mothers$  s    hhw"7),-5
::>>#z23	Y/x=A v;#h-'+#))<Fm#'-e}GHUO$QJE m# r!   N)F)r   ) __name__
__module____qualname__r    r(   r>   rJ   r;   r[   rE   rj   r   r   r   r   r   r   r   r   rh   r   r   r   r   r   r   r   r  r  r  r   r2  r&   r!   r   r	   r	      s    0
  *,T   &( ?B&P" "$T 
8(** 	8$.4`.6
=":<$r!   r	   )r4   rS   rT   r   rc   r   r   r   r   r   r   r   r   r   
lxml.etreeetreerH   r   r   r	   r&   r!   r   <module>r8     s5    	  
         h hr!   