
    KftQ                         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  G d d          ZdS )    N)Folder)Rixer)Staff)Idrefc                       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 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 S )#ReconFc                    || _         |j        d         |j        d         d| _        || _        d | _        t          | j         |          | _        t          | j         |          | _        t          | j         |          | _
        d | _        || _        t          | j                   | _        d | _        i | _        d | _        t#          j                    | _        d S )Namfernad)ae)
do_verbose)r   nsxpspacesr   docsr   folderr   staffr   rixerreportr   idrefwe_have_more_refsficons
issuedatesdatertoday)selferimpr   s      !/home/ernad/ernad/python/recon.py__init__zRecon.__init__   s    #huo#hw/1 1$	TV
;;;46j999
46j999
$46]]
!%[]]
 t    c                 6    |dk    rdS |dk    rdS |dk    rd S dS )N
iseditorof	haseditorisreplacedbyF )r   verbs     r   get_oppoverbzRecon.get_oppoverb*   s7    <;;<>!!4ur    c                 V   | j         }|j        d         dz   |z   }|j                            |d          }t	          |j        d                   }i }| t          d|            t                       |D ]1}t          j	        
                    |          }|d|          }	|||	<   2|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.fill3   s    F3&-""65"99aeEl##=5V55666FFF 	# 	#D7##D))D1gX:&G"F7OOr    Tc                     |                      |||          }| j                            |                                          }t	          j        || j        j                   |S )N	add_statedo_refs	top_nsmap)docr   wrap_with_amfgetrootetcleanup_namespacesr   r   )r   r<   r@   rA   rD   amf_docs         r   rI   zRecon.amf_docC   sU    hhw)WhEE***3;;==99
g;;;;r    c                 J   | j         }|j        d         dz   }|dz   |z   dz   }t          j        |          }t          |          dk    r t	          d| t
          j                   d S t          |          dk    r t	          d	| t
          j                   d S |d         S )
Netcz/reports/availabler*   *.xmlr   zrecon sees no file for file   recon sees several files for r   r,   globr/   r1   sysstderr)r   r<   r   fudiglob_stringavail_fufiss         r   r:   z
Recon.fufiI   s    Fve}33Sj7*W4i,,{q  9K99z# # # #4{a?+??z# # # #41~r    c                    | j         }|j        d         dz   }|dz   |z   dz   }t          j        |          }t          |          dk    rdS t          |          dk    r t	          d| t
          j        	           dS d
S )NrK   z/reports/enabledr*   rL   r   FrO   rP   rM   TrQ   )r   r<   r   rU   rV   
enab_fufiss         r   is_it_enabledzRecon.is_it_enabledY   s    Fve}11Sj7*W4Y{++
z??a5z??Q?+??z# # # #5tr    c                    | j         j        d         }|                     |          }|dS t          j                            |          s t          d| t          j                   dS t          j
        |          }|                                }|                     |          s/t          j        |t          j        |d                    }	d|	_        |                     |          r(t          j        |t          j        |d                    }
|r| j                            |          }|S |rd| _        |                     |          }| j         j        |         j        d         }| j         j        d	         r| j                            ||          }|r<t7          |t8                    r|d
z   }t;          j        |          }|D ]}| j        rt          d|            t          j                            |          }|dd         }||v rIt          j
        |          }|`|                     |                                           nt7          |tB                    rn|D ]k}|dz   |z   dz   }t          j                            |          s-t          j
        |          }|D|                     |                                           l| j                            |          }|S )zget the recon documentr   Nzrecon does not see rM   closedlatliTstate	use_staffz/*.xmlzrecon adds r*   z.xml)"r   r   r:   r3   r4   isfiler1   rS   rT   filer	parse_laxrF   rZ   rG   
SubElementQNametextlatest_linkr   	decommentr   resolve_refsr   r,   confr   inject
isinstancedictrR   r   r5   appendlist)r   r<   r@   rA   no_staffernad_nsr:   rD   doc_ele
closed_ele	latli_ele	state_dirrV   state_fufis
state_fufi
state_banakind	state_docitems                      r   rD   z	Recon.docg   s   69W%yy!!<4w~~d## 	...SZ@@@@4od##++--!!'** 	'w80L0LMMJ&JOG$$ 	Lgrx'/J/JKKI 	*&&s++CJ 	) &*D"##C((CFM'*/8	6;{# 	:j''99G 	8)T** 8'(2"i44"- 8 8J :8J88999!#!1!1*!=!=J%crc?Dy((  %
 ; ;I ( NN9#4#4#6#677778 It,, 8% 8 8D!*S4!7&!@J7>>*55 !  %
 ; ;I ( NN9#4#4#6#67777j""3'' 
r    r   c                    | 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                            |          }|dv r| j	        
                    ||          }k|                     |dd           }|&| j        rt          d	| t          j        
           |                                }t          j        || j        j                   |                                                    ||           	| j                             ||          }| j                            |           | j                            |           t          |          dk    r|S |dk     r|                     ||dz              |S )Nzrefs is r   zno refszref ref)personorganizationF)rA   r@   zstaff can't resolve rM   rB   )levelrO   )count)r   get_refsr   r1   strr/   attribr   nounr   rk   rD   rS   rT   rF   rG   rH   r   r   	getparentreplaceclear_refs_when_iddelete_by_subsequest_idri   )	r   rD   r   refsr}   ref_eler   resolved_docresolved_eles	            r   ri   zRecon.resolve_refs   s   z""3''? 	**s4yy()))t99>> !i   J 	? 	?C $fsl###3iG.'C:??7++D111j''S1188C$8GGL#? +666"z+ + + +'//11L!,$&)DDDD''>>>>z""3e"44
%%c***
**3///t99>>J199cq111
r    c                    |                      |          }d}|                    || j                  }g }|D ]!}d|j        v r|                    |           "|}t          |          }|dk    rt          d| d           d S |d         S )Nz/a:haseditor
namespacesuntilrO   zrecon: I can't deal with z editorsr   )rD   findallr   r   rn   r/   r1   )r   r<   rD   	editor_xpeditor_elescurrent_editors
editor_eletotal_editorss           r   get_current_editorzRecon.get_current_editor   s    hhw"	kk)kFF% 	/ 	/J*+++"":....%K((AEmEEEFFF41~r    c                 l    i }d| _         | j        j        D ]}|                     |||          ||<   |S )z'check relational data related to issuesFr?   )verboser   r   rD   )r   r@   rA   r   r<   s        r   all_docszRecon.all_docs   sM    
 v} 	6 	6G HHW	-4 % 6 6DMMr    c                    | j         j        |         }t          j                            |          st          dt          j                   i S t          | j         j	        d                   }|dz   | j         j	        d         z   }t          j
        |          D ]P}t          j                            |          d|          }|| j        v r4t          j        |          | j        |<   Qd S )Nz"I don't see the {intype} directoryrM   r
   z/*r   )r   r,   r3   r4   isdirr1   rS   rT   r/   r0   rR   r5   r   rb   rc   )r   intyperU   lenamf
staff_globr:   handles          r   
add_ficonszRecon.add_ficons   s    v{6"w}}T"" 	6SZHHHHITVZ&''D[46:e#44
Ij)) 	8 	8DW%%d++AvgI6F$$"'/$"7"7DK	8 	8r    c                     |                      d           |                      d           | j        D ]}|                     |           d S )Nr   avail)r   r   check_issuedates)r   r   s     r   check_dateszRecon.check_dates  sX          k 	* 	*F!!&))))	* 	*r    c                    | j         |         }| j        /| j                            | j        j        d                   | _        dD ]}d|z   dz   }|                    |          }|D ]}|j        }| j        	                    |          }|s&|j
        |         }	|	| j        vrO|	| j        k     rDt          t          j        |                     t          d|	 d|            t                       d S )Nissuesfromr   z.//*[@]z	bad date z in config )r   r   r   loose_datesr   r,   r   tagr   is_verbr   r   r1   docingshowr2   )
r   r   rD   destxp
found_eles	found_eler   r   dates
             r   r   zRecon.check_issuedates  s   k&!?""k55dfk(6KLLDO% 	 	DD3&BRJ' 
 
	m*,,S11  '-t..dj((fk)44555C$CC6CCDDD
		 	r    c                    |                      |          }|                     |d          }t          j                            |          }| j                            |dg          }|D ]c}| j                             |          }t          j                            |          s<t          j                            |          }||k    r|}d|S )NT)rp   r#   )
only_verbs)	r:   rD   r3   r4   getmtimer   r   r   ra   )r   r<   r:   repdoc	max_mtimer   r}   mtimes           r   r   zRecon.mtime  s    yy!!'D11G$$T**	z""6{m"DD 	" 	"C:??3''D7>>$'' G$$T**Ey  !	r    c                 `   |                     d          }|D ]C}||j        d         k    r(|                                                    |           ;|j        d= D|                     d          }|D ]:}||j        d         k     r'|                                                    |           ;|S )Nz.//*[@until]r   z.//*[@from]r   )r   r   r   remove)r   rD   	issuedate
until_eles	until_ele	from_elesfrom_eles          r   remove_outdatedzRecon.remove_outdated-  s    [[00
# 	. 	.I9+G444##%%,,Y7777 $W--KK..	! 	6 	6H8?6222""$$++H555
r    c                     dD ]J}|                     || j                  }|D ])}|                                                    |           *K|S )N)z.//e:*z.//a:iseditorofz.//a:person/a:emailr   )r   r   r   r   )r   rD   r4   	path_elespath_eles        r   	bareboneszRecon.barebones;  sd    H 	6 	6DDT]CCI% 6 6""$$++H55556
r    c                    t          j                    }| j        j        d         d| z   }| j                            |          }|t          |          dk    rdS t          |          d         }||         }t           j        	                    |          }|dz   }t           j        
                    |          rSt          j        |          }	|	dd         }
|
|k    r| j        rt          d|
            dS t          j        |           t          j        |           | j        rt          d	| d
|            	 t          j        |d           n# t"          $ r Y nw xY wt          j        |           dS )Nblattz	/reports/r   Fz/latest.html
   zblata: link is there at Tzblata links z to latest.html in zlatest.html)r3   getcwdr   r,   r   by_datesr/   ro   r4   r5   islinkreadlinkr   r1   r   chdirsymlinkFileExistsError)r   r<   	start_dir	html_fudidates	last_dater:   r;   fuli
there_link
there_dates              r   rg   zRecon.latest_linkC  s   IKK	FK(+@w+@+@@	$$Y//=CJJ!OO5KKN	Yw%%>)7>>$ 	T**J#AbD)JY&&? CAZAABBBtIdOOO
? 	GEEE)EEFFF	Jt]++++ 	 	 	D	
ts   E 
E$#E$c                 h    |                     d| j                  }t          |          dk    rdS dS )Nz//e:no_publishr   r   TF)r   r   r/   )r   rD   eless      r   is_it_nopublishzRecon.is_it_nopublish_  s3    {{+{FFt99q==4ur    c                     | j                             dd          }| j        j        |j        d<   |                     g d          }|D ]/}|                    ||                                                    0|S )N
collectionr
   idFr?   )r   baser   impnar   r   rn   rF   )r   root_eler   r<   s       r   unitedzRecon.unitede  sv    :??<77 $==2u=== 	9 	9GOOHW-55778888r    c                     |                      d           |                      d           |                                  |                                  |                                  d S )Nr   r   )r   check_av2staffcheck_bigwigcheck_we_have_editor)r   s    r   
check_relszRecon.check_relsm  sb          !!#####r    c                     dD ]j}||j         v r+||j         vr dS |j         |         |j         |         k    r dS ||j         v r+||j         vr dS |j         |         |j         |         k    r dS kdS )Nr   FT)r   )r   v1v2r   s       r   has_it_same_spanzRecon.has_it_same_spant  s    ' 
	! 
	!F""** 559V$	&(999 55""** 559V$	&(999 55tr    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 ]Y}|                    | j         j        dz             s&| j        |         }|                    d| j                  }|D ]}|                                }|                     |j	                  }| 
                    |          }	|	I|	du rt          d	| d
| d           d|j	        }
|
|v rpt          |                    d                    dk    r|j        d         }|| j        vrt          d| d|            | j        |         }d|	z   dz   |z   dz   }|                    || j                  }t          |          dk    r#d|	 d| d}|d| dz  }t          |           0t          |          dk    r>t          t          |                    }| d|	 d| d}|| z  }t          |           |d                                         }|                     ||          rt          d           t          t!          j        |          d           t          t!          j        |                     [d S )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 
rO   zs z
 in recordzIncompatible spans )end)r   r   r   
startswithr   xpathr   r   r   r   r'   r1   r/   r   r   r   r   r   )r   amf_nstags_to_ignorer   rD   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   tvy''#- </k +	4 +	4F$$TV\C%788 +f%C))KDM)JJK) &4 &4
%//11~~hl33"//55&%''JdJJJJJKKK n.((z''..//!33 * 1% 8 33M]MMVMMNNN![7
k)K7&@4G)//t}/MM|$$));;;v;;;D7m7777D$KKK|$$q((L 1 122E#GGkGGVGGGD}..D$KKK".q/";";"="=((?CC *+++fk(++4444fk/223333M&4+	4 +	4r    c           
         i }g }| j         D ]}d|vr|                    |           | j         D ]}d|vr| j         |         }|                    d| j                  }|D ]}d|j        vr|j        d         }||v rE|                    d| j                  }t          |          dk    rt          | d| d           b||v r ||         }	t          d	| d
| d|	            |||<   d S )Nr   "/a:collection/a:haseditor/a:personr   r}   r   r   r   z: bigwig and other datazbigwig error z of )r   rn   r   r   r   r/   r1   )
r   perid_repcodebigwigsr   rD   ed_elesed_eleperid
other_elestargets
             r   r   zRecon.check_bigwig  s^   k 	' 	'F&  v&&&k 	. 	.F&  +f%Cii D+/=   : :G! . .--e,G##!'e!N!NJ:**KKFKKKLLLM))*51FI%IIVIIIIJJJ'-e$$.	. 	.r    c                     | j         D ]U}| j         |         }g }d|vr+|                     |           |                    |           @|                     |           Vd S )Nr   )r   &check_person_handle_in_homepage_personrn   &check_person_handle_in_homepage_report)r   r   rD   r
  s       r    check_person_handle_in_homepagesz&Recon.check_person_handle_in_homepages  sy    k 		= 		=F+f%CG&  ;;C@@@v&&&77<<<<		= 		=r    c                    t          j        |          }|                    d| j                  }t	          |          dk    rt          d|            d S |d                             d          d         }|                    d| j                  }t	          |          dk    rt          d	|            d S |d         j        }||vrt          d
| d|            d S d S )Nz/a:person/@idr   rO   zI need a handle in r   r*   z/a:person/a:homepageno hopa in recon:  not in )r   r   r   r   r/   r1   splitrf   )r   rD   
doc_stringidsr  hopas	main_hopas          r   r  z,Recon.check_person_handle_in_homepage_person  s    [%%
iiDMiBBs88q==4
44555FAS!!"%		0T]	KKu::??'''(((F!HM		!!6E66966777F "!r    c                    t          j        |          }|                    d| j                  }t	          |          dk    rd S |D ]}t          j        |          }|                    d| j                  }t	          |          dk    rG|                    d| j                  }t	          |          dk    r d S |d                             d          d         }d	}|                    || j                  }	t	          |	          dk    rt          d
|            |	d         j        }
||
vr't          d| d|
            t          |            d S )Nr  r   r   r   z./@refrO   r*   r  z./a:homepager  r  r  )r   r   r   r   r/   r  r1   rf   )r   rD   r  editors
person_eleattribute_elesr   perefr   r  r  s              r   r  z,Recon.check_person_handle_in_homepage_report  s~   [%%
))@'+}  6 6w<<1F! 	 	JZ00J'--e-NNN>""a''##H#GGD4yyA~~GMM#&&r*EB$$RDM$BBE5zzQ0J00111aII%%:::y::;;;o&&& &#	 	r    c                 `   | j         D ]}|                    | j        j        dz             s%|                     |          s;| j         |         }|                    d| j                  }d}|D ]}d|j        vr|dz  }|dk    r&t          j	        |          }t          d|            d S )Nr   z/a:collection/a:haseditorr   r   r   rO   zI need an editor in
)r   r   r   r   rZ   r   r   r   r   r   r1   )r   r   rD   r   count_editorsr   r  s          r   r   zRecon.check_we_have_editor  s    k 	< 	<F$$TV\C%788 %%f-- +f%C))$?/3} $ > >KM) ' '
*"333!Q&M!!#[--
:j::;;;	< 	<r    N)F)r   )__name__
__module____qualname__r   r'   r=   rI   r:   rZ   rD   ri   r   r   r   r   r   r   r   r   rg   r   r   r   r   r   r   r   r  r  r  r   r%   r    r   r   r      s          0      *,T          &( ? ? ? ?B& & & &P  " "$T 
 
 
 
8 8 8(* * *  *         8    $ $ $    .4 .4 .4`. . .6
= 
= 
=  "  :< < < < <r    r   )r3   rR   rS   r   rb   r   r   r   r   r   r   r   r   r   
lxml.etreeetreerG   r   r%   r    r   <module>r*     s    				  



                                 K< K< K< K< K< K< K< K< K< K<r    