
    P,iB[                         S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJr   " S S5      rg)	    N)Rixer)Staff)Idref)Spana)Xpafsc                       \ rS rSrS'S jrS rS r0 S4S jrS rS	 r	S
 r
0 SS4S jrS(S jrS r0 S4S jrS rS rS rS rS rS'S jrS rS rS rS rS rS rS rS rS rS rS rS  r S! r!S" r"S# r#S$ r$S%r%g&))Recon   Fc                    Xl         UR                  S   UR                  S   S.U l        X l        [	        U R                   US9U l        [        U R                   US9U l        [        U R                   US9U l	        [        U R                   US9U l        S U l        X l        [        U R                   5      U l        S U l        0 U l        S U l        [$        R&                  " 5       U l        g )Namfernad)ae)
do_verbose)r   nsxpspacesr   r   staffr   rixerr   spanar   xpafsreportr   idrefwe_have_more_refsficons
issuedatesdatertoday)selferimpr   s      !/home/ernad/ernad/python/recon.py__init__Recon.__init__   s    #hhuo#hhw/1$466j9
466j9
466j9
466j9
$466]
!%[[]
     c                 .    US:X  a  gUS:X  a  gUS:X  a  g g)N
iseditorof	haseditorisreplacedbyF )r   verbs     r    get_oppoverbRecon.get_oppoverb+   s(    <;>! r#   c                 J   U R                   nUR                  S   S-   U-   nUR                  R                  USS9n[	        UR
                  S   5      n0 nUc  [        SU 35        [        5         U H,  n[        R                  R                  U5      nUSU*  n	XvU	'   M.     U$ )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   folderfufiscut_lenreconsfufibanarepcodes
             r    fill
Recon.fill7   s    FF3&-""65"9aeeEl#=,VH56FD77##D)D1gX&G"7O  r#   Tc                     U R                  XUS9nU R                  R                  UR                  5       5      n[        R
                  " XPR                  R                  S9  U$ )N	add_statedo_refs	top_nsmap)docr   wrap_with_amfgetrootetreecleanup_namespacesr   r   )r   rA   rF   rG   rJ   amf_docs         r    rO   Recon.amf_docG   sI    hhwWhE****3;;=9  FFII>r#   c                 6   U R                   nUR                  S   S-   nUS-   U-   S-   n[        R                  " U5      n[        U5      S:X  a  [	        SU 3[
        R                  S9  g [        U5      S:  a  [	        S	U 3[
        R                  S9  g US   $ )
Netcz/reports/availabler.   *.xmlr   zrecon sees no file for file   recon sees several files for r   r0   globr3   r5   sysstderr)r   rA   r   fudiglob_stringavail_fufiss         r    r?   
Recon.fufiM   s    FFvve}33Sj7*W4ii,{q +K=9zz#{a1+?zz#1~r#   c                     U R                   nUR                  S   S-   nUS-   U-   S-   n[        R                  " U5      n[        U5      S:X  a  g[        U5      S:  a  [	        SU 3[
        R                  S	9  gg
)NrR   z/reports/enabledr.   rS   r   FrV   rW   rT   TrX   )r   rA   r   r\   r]   
enab_fufiss         r    is_it_enabledRecon.is_it_enabled]   sy    FFvve}11Sj7*W4YY{+
z?az?Q1+?zz#r#   c                     U R                  U5      nUc  g [        R                  R                  U5      (       d  [	        SU 3[
        R                  S9  g [        R                  " U5      nU$ )Nzrecon does not see rT   )	r?   r7   r8   isfiler5   rZ   r[   filer	parse_lax)r   rA   r?   rJ   s       r    bare_docRecon.bare_dock   sW    yy!<ww~~d##'v.SZZ@ood#
r#   c                    U R                   R                  S   nU R                  U5      nUR                  5       nU R	                  U5      (       d3  [
        R                  " U[
        R                  " US5      5      nSUl        U R                  U5      (       a,  [
        R                  " U[
        R                  " US5      5        U(       a  U R                  R                  U5      nU$ U(       a  SU l        U R                  U5      nU R                   R                  U   R                  S   n	U R                   R                   S   (       a  U R"                  R%                  Xq5      nU(       GaG  ['        U[(        5      (       a  U	S-   n
[*        R*                  " U
5      nU H  nU R,                  (       a  [/        SU 35        [0        R2                  R5                  U5      nUS	S
 nX;   a  MM  [6        R8                  " U5      nUc  Mh  UR;                  UR                  5       5        M     O['        U[<        5      (       at  U Hn  nU	S-   U-   S-   n[0        R2                  R?                  U5      (       d  M4  [6        R8                  " U5      nUc  MO  UR;                  UR                  5       5        Mp     U R                  R                  U5      nU$ )zget the recon documentr   closedlatliTstate	use_staffz/*.xmlzrecon adds Nr.   z.xml) r   r   rh   rL   rb   rM   
SubElementQNametextlatest_linkr   	decommentr   resolve_refsr   r0   confr   inject
isinstancedictrY   r   r5   r7   r8   r9   rf   rg   appendlistre   )r   rA   rF   rG   no_staffernad_nsrJ   doc_ele
closed_ele	state_dirr]   state_fufis
state_fufi
state_banakind	state_docitems                    r    rJ   	Recon.docu   s/   6699W%mmG$++-!!'**))'5;;x3RSJ&JOG$$Wekk(G&DE**&&s+CJ &*D"##C(CFFMM'*//8	66;;{#jj''9G)T**'(2"ii4"-JJ<89!#!1!1*!=J%cr?D(  %
 ;I ( NN9#4#4#67 #. It,,%D!*S4!7&!@J77>>*55  %
 ;I ( NN9#4#4#67 & jj""3' 
r#   c                    U R                   R                  U5      nU R                  (       a  [        S[	        U5      -   5        [        U5      S:X  a  U R                  (       a  [        S5        U$ U GH  nU R                  (       a  [        SU-   5        X4   nUR                  S   nU R                  R                  U5      nUS;   a  U R                  R                  X5      nMt  U R                  USS S9nUc.  U R                  (       a  [        S	U 3[        R                  S
9  M  UR                  5       n[        R                   " XR"                  R$                  S9  UR'                  5       R)                  XX5        GM     U R                   R                  XS9nU R                  R+                  U5        U R                  R-                  U5        [        U5      S:X  a  U$ US:  a  U R/                  XS-   S9  U$ )Nzrefs is r   zno refszref ref)personorganizationF)rG   rF   zstaff can't resolve rT   rH   )levelrV   )count)r   get_refsr   r5   strr3   attribr   nounr   rw   rJ   rZ   r[   rL   rM   rN   r   r   	getparentreplaceclear_refs_when_iddelete_by_subsequest_idru   )	r   rJ   r   refsr   ref_eler   resolved_docresolved_eles	            r    ru   Recon.resolve_refs   s   zz""3'??*s4y()t9>i JCfsl#iG..'C::??7+D11jj''188C$8GL#??06"zz+'//1L$$\VVYYG''>) * zz""3"4

%%c*

**3/t9>J19cq1
r#   c                    U R                  U5      nSnUR                  X0R                  S9n/ nU H&  nSUR                  ;   a  M  UR	                  U5        M(     Un[        U5      nUS:w  a  [        SU S35        g US   $ )Nz/a:haseditor
namespacesuntilrV   zrecon: I can't deal with z editorsr   )rJ   findallr   r   rz   r3   r5   )r   rA   rJ   	editor_xpeditor_elescurrent_editors
editor_eletotal_editorss           r    get_current_editorRecon.get_current_editor   s    hhw"	kk)kF%J*+++"":. & &K(A-m_HEF1~r#   c                 v    0 nSU l         U R                  R                   H  nU R                  XAUS9X4'   M     U$ )z'check relational data related to issuesFrE   )verboser   r   rJ   )r   rF   rG   docsrA   s        r    all_docsRecon.all_docs   sC    
 vv}}G HHW-4 % 6DM % r#   c                    U R                   R                  U   n[        R                  R	                  U5      (       d  [        S[        R                  S9  0 $ [        U R                   R                  S   5      nUS-   U R                   R                  S   -   n[        R                  " U5       HZ  n[        R                  R                  U5      SU*  nX`R                  ;   a  M7  [        R                  " U5      U R                  U'   M\     g )Nz"I don't see the {intype} directoryrT   r   z/*r   )r   r0   r7   r8   isdirr5   rZ   r[   r3   r4   rY   r9   r   rf   rg   )r   intyper\   lenamf
staff_globr?   handles          r    
add_ficons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                     U R                  S5        U R                  S5        U R                   H  nU R                  U5        M     g )Nr   avail)r   r   check_issuedates)r   r   s     r    check_datesRecon.check_dates  s6      kkF!!&) "r#   c                 J   U R                   U   nU R                  cA  U R                  R                  R	                  U R                  R
                  S   5      U l        S H  nSU-   S-   nUR                  U5      nU H  nUR                  nU R                  R                  U5      nU(       d  M3  UR                  U   n	XR                  ;  d  MS  XR                  :  d  Md  [        [        R                  " U5      5        [        SU	 SU 35        [        5         M     M     g )Nissues)fromr   z.//*[@]z	bad date z in config )r   r   r   foldaloose_datesr0   r   tagr   is_verbr   r   r5   docingshowr6   )
r   r   rJ   destxp
found_eles	found_eler   r   dates
             r    r   Recon.check_issuedates  s    kk&!??""ffll66tvv{{87LMDO%DD3&BRJ'	mm**,,S1 ''-.jj(fkk)45	${6(CD (	 &r#   c                    U R                  U5      nU R                  USS9n[        R                  R	                  U5      nU R
                  R                  US/S9nU Hl  nU R                  R                  U5      n[        R                  R                  U5      (       d  MD  [        R                  R	                  U5      nXt:  d  Mj  UnMn     U$ )NT)r|   r&   )
only_verbs)	r?   rJ   r7   r8   getmtimer   r   r   re   )r   rA   r?   repdoc	max_mtimer   r   mtimes           r    r   Recon.mtime   s    yy!'D1GG$$T*	zz""6{m"DC::??3'D77>>$''GG$$T*E !	  r#   c                 T   UR                  S5      nU HC  nX$R                  S   :  a!  UR                  5       R                  U5        M6  UR                  S	 ME     UR                  S5      nU H6  nX&R                  S   :  d  M  UR                  5       R                  U5        M8     U$ )Nz.//*[@until]r   z.//*[@from]r   )r   r   r   remove)r   rJ   	issuedate
until_eles	until_ele	from_elesfrom_eles          r    remove_outdatedRecon.remove_outdated0  s    [[0
#I++G44##%,,Y7 $$W- $ KK.	!H??622""$++H5 " 
r#   c                     S HS  nU(       a  SU;   a  M  UR                  X0R                  S9nU H"  nUR                  5       R                  U5        M$     MU     U$ )N)z.//e:*z.//a:iseditorofz.//a:person/a:emailemailr   )r   r   r   r   )r   rJ   
show_emailr8   	path_elespath_eles         r    	barebonesRecon.barebones>  sU    HDgoD]]CI%""$++H5 &	 I 
r#   c                 *    [         R                  " 5       nU R                  R                  S   SU 3-   nU R                  R                  R                  U5      nUb  [        U5      S:X  a  g[        U5      S   nXE   n[         R                  R                  U5      nUS-   n[         R                  R                  U5      (       aV  [         R                  " U5      n	U	SS n
X:X  a   U R                  (       a  [        SU
 35        g[         R                  " U5        [         R                  " U5        U R                  (       a  [        S	U S
U 35         [         R                   " US5        [         R                  " U5        g! ["         a     N#f = f)z8has the web site link to the latest issue of the report?blatt	/reports/r   Fz/latest.html
   zblata: link is there at Tzblata links z to latest.html in zlatest.html)r7   getcwdr   r0   r   by_datesr3   r{   r8   r9   islinkreadlinkr   r5   r   chdirsymlinkFileExistsError)r   rA   	start_dir	html_fudidates	last_dater?   r@   fuli
there_link
there_dates              r    rs   Recon.latest_linkH  sD   AIIK	FFKK(Ywi+@@	%%i0=CJ!OKN	ww%>)77>>$T*J#Ab)J&??4ZLABIIdO
??L&9)EF	JJt]+ 	  		s   F 
FFc                 t    UR                  5       R                  SU R                  S9n[        U5      S:  a  gg)Nz.//e:no_publishr   r   TF)rL   r   r   r3   )r   rJ   eless      r    is_it_nopublishRecon.is_it_nopublishf  s3    {{}$$%64==$Qt9q=r#   c                     U R                  U5      nUR                  5       R                  SU R                  S9n[	        U5      S:  a  gg)Nz.//e:nopillsr   r   TF)rh   rL   r   r   r3   )r   rA   rJ   r   s       r    is_it_nopillsRecon.is_it_nopillsl  s@    mmG${{}$$^$Nt9q=r#   c                     U R                   R                  SS5      nU R                  R                  UR                  S'   U R                  / SS9nU H$  nUR                  X#   R                  5       5        M&     U$ )N
collectionr   idFrE   )r   baser   impnar   r   rz   rL   )r   root_eler   rA   s       r    unitedRecon.uniteds  se    ::??<7 $==2u==GOOH-5578  r#   c                     U R                  S5        U R                  S5        U R                  5         U R                  5         U R                  5         g )Nr   r   )r   check_av2staffcheck_bigwigcheck_we_have_editor)r   s    r    
check_relsRecon.check_rels{  s>      !!#r#   c                     USS  nU$ )N   r(   )r   strings     r    	de_amf_nsRecon.de_amf_ns  s    r#   c           	         SU R                   R                  S   -   S-   nUS-   nU R                   GHJ  nUR                  U R                   R                  S-   5      (       d  M3  U R                  U   nUR                  SU R                  S9nU GH  nUR                  5       nU R                  UR                  5      nU R                  U5      n	U	c  ME  U	SL a  [        S	U S
U S35        M^  UR                  n
X;   a  Mq  [        UR                  S5      5      S:  a  M  UR                  S   nXR                  ;  a  [        SU SU 35        M  U R                  U   nSU	-   S-   U-   S-   nUR                  XR                  S9n[        U5      S:X  a   SU	 SU S3nUSU S3-  n[        U5        GM'  [        U5      S:  a2  [        [        U5      5      nU SU	 SU S3nX -  n[        U5        GMh  US   R                  5       nU R                  R!                  UU5      (       a  GM  [        S5        [        ["        R$                  " U5      SS9  [        ["        R$                  " U5      5        GM     GMM     g )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 
rV   zs z
 in recordzIncompatible spans )end)r   r   r   
startswithr   xpathr   r   r  r   r*   r5   r3   r   r   r   has_it_samer   r   )r   amf_nstags_to_ignorer   rJ   target_eles
target_eleverb_eler)   target_verbr   target_handle
target_docr   target_nounsmessr   target_verb_eles                     r    r  Recon.check_av2staff  s_   tvvyy''#- </kkF$$TVV\\C%78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)//}}/M|$) Qvhd;Dgm_B77D$K|$q(L 12E#WAk]"VHJGDo.D$K".q/";";"=::))(ODD*+fkk(+4fkk/23M * "r#   c           
         0 n/ nU R                    H  nSU;  d  M  UR                  U5        M     U R                    H  nSU;  a  M  U R                   U   nUR                  SU R                  S9nU H  nSUR                  ;  a  M  UR                  S   nXr;   a<  UR                  SU R                  S9n[        U5      S:  a  [        U SU S35        Me  Xq;   a  X   n	[        S	U S
U SU	 35        X1U'   M     M     g )Nr  "/a:collection/a:haseditor/a:personr   r   r  r   r  z: bigwig and other datazbigwig error z of )r   rz   r  r   r   r3   r5   )
r   perid_repcodebigwigsr   rJ   ed_elesed_eleperid
other_elestargets
             r    r  Recon.check_bigwig  s   kkF& v& " kkF& ++f%Cii D+/==   :G!-e,#!'e!NJ:*tF83JKL)*1FM%VHDIJ'-e$ " "r#   c                     U R                    HO  nU R                   U   n/ nSU;  a$  U R                  U5        UR                  U5        M>  U R                  U5        MQ     g )Nr  )r   &check_person_handle_in_homepage_personrz   &check_person_handle_in_homepage_report)r   r   rJ   r)  s       r     check_person_handle_in_homepages&Recon.check_person_handle_in_homepages  sV    kkF++f%CG& ;;C@v&77< "r#   c                    [         R                  " U5      nUR                  SU R                  S9n[	        U5      S:w  a  [        SU 35        g US   R                  S5      S   nUR                  SU R                  S9n[	        U5      S:w  a  [        S	U 35        g US   R                  nXF;  a  [        S
U SU 35        g g )Nz/a:person/@idr   rV   zI need a handle in r   r.   z/a:person/a:homepageno hopa in recon:  not in )r   r   r  r   r3   r5   splitrr   )r   rJ   
doc_stringidsr,  hopas	main_hopas          r    r1  ,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                 v   [         R                  " U5      nUR                  SU R                  S9n[	        U5      S:X  a  g U H  n[         R                  " U5      nUR                  SU R                  S9n[	        U5      S:X  a  MD  UR                  SU R                  S9n[	        U5      S:w  a    g US   R                  S5      S   nS	nUR                  XR                  S9n	[	        U	5      S:X  a  [        S
U 35        M  U	S   R                  n
Xz;  d  M  [        SU SU
 35        [        U 5        M     g )Nr'  r   r   r  z./@refrV   r.   r6  z./a:homepager7  r8  r9  )r   r   r  r   r3   r:  r5   rr   )r   rJ   r;  editors
person_eleattribute_elesr   perefr   r=  r>  s              r    r2  ,Recon.check_person_handle_in_homepage_report  s)   [[%
))@'+}}  6w<1!JZ0J'--e-NN>"a'##H#GD4yA~GMM#&r*EB$$RMM$BE5zQJ<01aI%whyk:;&) "r#   c                    U R                    H  nUR                  U R                  R                  S-   5      (       d  M2  U R	                  U5      (       d  MJ  U R                   U   nUR                  SU R                  S9nSnU H  nSUR                  ;  d  M  US-  nM     US:X  d  M  [        R                  " U5      n[        SU 35        M     g )Nr  z/a:collection/a:haseditorr   r   r   rV   zI need an editor in
)r   r  r   r   rb   r  r   r   r   r   r5   )r   r   rJ   r   count_editorsr   r;  s          r    r  Recon.check_we_have_editor  s    kkF$$TVV\\C%788%%f--++f%C))$?/3}} $ >KM)
*"3"33!Q&M * !#[[-
-j\:; "r#   c                    U R                  U5      n[        SU 35        SnU R                  R                  X#5      nSnU R                  R                  X%5      n[	        U5      S:X  a  g[	        U5      [	        U5      :w  a  [        S[
        R                  S9  g[	        U5      n0 nSn	X:  a  Xi   XU	   '   U	S-  n	X:  a  M  U$ )	zold version of getting mothersrecon: start from /a:collection/e:forked/@reportz/a:collection/e:forked/@startr   Nrecon: bad forking datarT   rV   )rJ   r5   r   runr3   rZ   r[   )
r   rA   rJ   
repcode_xprepcodes	starts_xpstartstotal_mothersmothersr   s
             r    get_mothers_by_startRecon.get_mothers_by_start  s    hhw"7),-5
::>>#23	/x=A v;#h-'+#**=F#'-}GUO$QJE # r#   c                     U R                   R                  S   SU 3-   n[        U R                   R                  R	                  U5      R                  5       5      n[        U5      S:X  a  gUS   $ )z"first date that has actual  papersr   r   r   Nr6  )r   r0   r{   r   r   keysr3   )r   rA   r   r   s       r    jun_dateRecon.jun_date5  s^    FFKK(Ywi+@@	TVV\\**95::<=u:?Ryr#   c                 b    U R                  U5      nU R                  R                  USU5      nU$ )Nr&   )rh   r   
has_it_rel)r   rA   r   rJ   bulis        r    has_it_editorRecon.has_it_editor=  s-    mmG$zz$$S+yAr#   c                    U R                  U5      n[        SU 35        SnU R                  R                  X#5      nSnU R                  R                  X%5      n[	        U5      S:X  a  g[	        U5      [	        U5      :w  a  [        S[
        R                  S9  g[	        U5      n0 nSn	X:  aN  XI   n
[        Xi   5      nU R                  R                  U
   R                  U5      nUS   nXU
'   U	S	-  n	X:  a  MN  U$ )
z-new version from before 2025-09-13, uses spanrJ  rK  z/a:collection/e:forked/@spanr   NrL  rT   r6  rV   )rJ   r5   r   rM  r3   rZ   r[   intr   r   last_issues)r   rA   rJ   rN  rO  spans_xpspansrR  rS  r   
mothercodespanra  
last_issues                 r    get_mothersRecon.get_mothersB  s    hhw"7),-5
::>>#21

s-x=A u:X&+#**=E
#!Ju|$D&&--
3??EK$RJ",JQJE # r#   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   N)F)r   )&__name__
__module____qualname____firstlineno__r!   r*   rB   rO   r?   rb   rh   rJ   ru   r   r   r   r   r   r   r   r   rs   r   r   r   r  r  r  r  r3  r1  r2  r  rT  rX  r]  rg  __static_attributes__r(   r#   r    r	   r	      s    0
  *,T   &( :x&P" "$T 
8** <$.4`.6
=":<$0
r#   r	   )r7   rY   rZ   r   rf   r   r   r   r   r   r   r   r   r   
lxml.etreerM   r   r   r	   r(   r#   r    <module>ro     s5    	  
         K	 K	r#   