
     h2                     8    S SK r S SKrS SKrS SKr " S S5      rg)    Nc                       \ rS rSrSS jrSS jrS rSS jrS rSS jr	SS	 jr
SS
 jrS rSS jrSS jrS S jrS!S jrS!S jr  S S jrSS jrSS jrS"S jrS rS rS rS rSS jrSS jrSS jrSrg)#Folda	   c                     Xl         X l        g N)e
do_verbose)selferimpr	   s      !/home/ernad/ernad/python/folda.py__init__Folda.__init__   s    $    c                 @   U R                   nU R                  U5      n0 nUc  g U Ht  n[        R                  R	                  U5      nUR
                  R                  U5      (       a#  USS nX;  a  / XX'   XX   R                  U5        Me  U R                  XbS9  Mv     U$ )Nr   
   ex_on_non_rif)	r   list_amf_fufisospathbasenameRis_rifappendgripe_non_rif	r
   fudir   r   fufisoutfufibana	issuedates	            r   datesFolda.dates   s    FF##D)=D77##D)Dsszz$ 2J	'%'CN%%d+""4"E  
r   c                 ,   U R                   n[        R                  " US-   5      n0 nUc  g U Hb  n[        R                  R	                  U5      nUSS nXt;  a  / XG'   O[        SU SU 3[        R                  S9  XG   R                  U5        Md     U$ )Nz/????-??-??*.amf.xml.gzr   r   zrepeat of issuedate z in file)	r   globr   r   r   printsysstderrr   )r
   r   r   r   r   r    r!   r"   s           r   loose_datesFolda.loose_dates"   s     FF		$!::;=D77##D)DQr
I#!#,YKtD6B::'N!!$'  
r   Nc                     Sn0 nUb	  USU-   -  nOUS-  nUS-   U-   n[        [        R                  " U5      SS9 H5  n[        R                  R	                  U5      nUSS nUb  X:  a  M1  XeU'   M7     U$ )Nz
????-??-??*/Treverser   r   )sortedr(   r   r   r   )	r
   r   extstartglob_stringr   r    r!   r"   s	            r   dafusFolda.dafus6   s    "?39$K
 3KSj;.499[14@D77##D)DQr
I Y%6!	N A 
r   c                 b    [         R                   " US-   U-   S-   5      n[        U5      S:X  a  gg)Nr0   z_*r   FT)r(   len)r
   r   r"   r   s       r   has_it_issuedateFolda.has_it_issuedateJ   s/    		$*y0478u:?r   c                 X   U R                   n[        [        R                  " US-   5      SS9n0 n[        U5      S:X  a  gU Hd  n[        R
                  R                  U5      nUSS nU R                   R                  R                  S   R                  U5      (       d  M`  XeU'   Mf     U$ )z8same as dates but allows any file type, last comes first/*Tr1   r   Nr   is_date)
r   r3   r(   r:   r   r   r   r   rsmatchr   s	            r   by_datesFolda.by_datesP   s     FFtyy-t<u:?D77##D)DQr
I6688;;y)//	::!	N  
r   c                 x   Xl         U R                  n[        [        R                  " U R                   S-   5      5      n0 nU Hs  n[        R
                  R                  U5      nUR                  R                  U5      (       d  U(       a  USS n	X;  a  XvU	'   MY  M[  U(       a  Md  U R                  XrS9  Mu     U$ )zfirst datesr>   r   r   r   
r   r   r3   r(   r   r   r   r   r   r   )
r
   r   r   
do_non_rifr   r   r   r    r!   r"   s
             r   firstsFolda.firsts`   s    	FFtyyT!123D77##D)Dsszz$: 2J	'%)	NZ""4"E  
r   c                 J   Xl         U R                  n[        [        R                  " U R                   S-   5      5      n0 nU H\  n[        R
                  R                  U5      nUR                  R                  U5      (       a  USS nXeU'   MM  U R                  XbS9  M^     U$ )
last datesr>   r   r   r   rE   r   s	            r   lastsFolda.lastsr   s    	FFtyyT!123D77##D)Dsszz$ 2J	!%I""4"E  
r   c                 *   Xl         U R                  n[        [        R                  " U R                   S-   U-   S-   5      5      nSnU HF  n[        R
                  R                  U5      nUR                  R                  U5      (       d  MD  UnMH     U$ )zlast fufi for given issuedater0   r/    )	r   r   r3   r(   r   r   r   r   r   )r
   r   r"   r   r   out_fufir    r!   s           r   last_by_issuedateFolda.last_by_issuedate   sz    	FFtyyS9!<s!BCDD77##D)D33::d##H	 
 r   c                 4   Xl         [        [        R                  " U R                   S-   U-   S-   5      5      n[        U5      S:X  a  g US S nU HA  nU R                  (       a  [        SU 35        U(       a  M+  [        R                  " U5        MC     WS   $ )Nr0   r/   r   folda removes )r   r3   r(   r:   r	   r)   r   remove)r
   r   r"   do_testr   r    s         r   keep_only_lastFolda.keep_only_last   s    	tyyS9!<s!BCDu:?cr
Dtf-.7		$	 
 Awr   c                     Xl         U R                  XS9n[        U5      S:X  a  g[        U5      nUR	                  5         US   nX5   $ )rJ   r   r   N)r   rK   r:   r3   r2   )r
   r   r   last_issuedatesrK   lasts         r   	very_lastFolda.very_last   sL    	**T*G1$'Qx$$r   c                    U R                   n[        R                  R                  U5      (       d#  U(       a  [	        SU-   [
        R                  S9  g/ nUS-   UR                  S   -   n[        [        R                  " U5      5       H  nUR                  U5        M     U(       d  U$ US-   n[        R                  " U5       H  nUR                  U5        M     [        U5      n	U	$ )from old foldas libraryznothing in r&   Nr>   amfz.gz)r   r   r   isdirr)   r*   r+   r4   r3   r(   r   )
r
   foldawith_gzdo_warnr   r   	base_globr    	comp_globsorted_fufiss
             r   r   Folda.list_amf_fufis   s    FFww}}U##me+#**=DL155</	499Y/0DLL 1L%	IIi(DLL )e}r   c                     U R                  U5      n0 nU HZ  n[        R                  R                  U5      n[	        U5      S:  a  M3  USS S:w  a  M>  USS nXt;  d  MJ  0 XG'   USS nXTU   U'   M\     g)r_      r      _r      N)r   r   r   r   r:   )	r
   rb   r	   r   ivr    r!   r"   shotis	            r   isve
Folda.isve   s    ##E*D77##D)D4y2~Br{c!Qr
I" "R'+9e$ r   c                 ,   U R                  U5      n0 nU HP  n[        R                  R                  U5      nUSS S:w  a  M-  USS nUSS nXt;  a  XU'   MB  XU   :  d  ML  XU'   MR     [	        UR                  5       S S9n	0 n
U	 H	  nXG   X'   M     U
$ )r_   r   rk   rl   r   rm   c                 "    U R                  5       $ r   lowerxs    r   <lambda>(Folda.firsts_isda_shot.<locals>.<lambda>   
    1779r   key)r   r   r   r   r3   keys)r
   rb   r	   r   dr    r!   r"   ro   
issuedatesrn   s              r   firsts_isda_shotFolda.firsts_isda_shot   s    ##E*D77##D)DBr{c!Qr
IBKE!$)|#$)  AFFH*<=
#ILBM $	r   c                    U R                  U5      nUc#  U(       a  [        SU-   [        R                  S9  g0 nU HP  n[        R
                  R                  U5      nUSS S:w  a  M-  USS nUSS n	X;  a  XU'   MB  XU   :  d  ML  XU'   MR     [        UR                  5       S	 S
9n
/ nU
 H  nUR                  XX   5        M     U$ )r_   Nzno data for r&   r   rk   rl   r   rm   c                 "    U R                  5       $ r   rt   rv   s    r   rx   $Folda.firsts_shoti.<locals>.<lambda>   rz   r   r{   )
r   r)   r*   r+   r   r   r   r3   r}   r   )r
   rb   r	   rd   r   r~   r    r!   r"   ro   r   shotiss               r   firsts_shotiFolda.firsts_shoti   s     ##E*=nu,3::>D77##D)DBr{c!Qr
IBKE!$)|#$)  AFFH*<=
#IMM!,' $r   c                 d   Xl         U R                  n[        R                  " U R                   S-   5      n0 nU Hr  n[        R                  R                  U5      nUR                  R                  U5      (       a!  USS nX;   a  [        US-   U-   5      eXeU'   Mc  U R                  XbS9  Mt     U$ )Nr>   r   r   z
 twice in r   )
r   r   r(   r   r   r   r   r   	Exceptionr   r   s	            r   dates_uniqueFolda.dates_unique   s    	FF		$))d*+D77##D)Dsszz$ 2J	##I$<t$CDD!%I""4"E  
r   c                 n    U(       a  [        US-   5      eU R                  (       a  [        US-   5        U$ )Nzis not a rifz is not a rif)r   r	   r)   )r
   r    r   s      r   r   Folda.gripe_non_rif  s.    D>122__$()r   c                     U SU 3nU(       a  [        SU 35        [        R                  " U5      n[        U5      (       d  U(       a  [        SU-   S-   5        g [        U[        R
                  R                  S9nU$ )Nr0   zfolda: glob is zfolda see nothing for ''r{   )r)   r(   r:   maxr   r   getmtime)r
   r   searchr	   r6   r   latest_fufis          r   last_by_mtimeFolda.last_by_mtime  sp    ax(OK=12		+&5zz/+=CD%RWW%5%56r   c                 x    U R                  U5      nU R                  U5      nSnU H  nXd;   a  M
  US-  nM     U$ )z0count date different between two fudis, not usedr      )r   )r
   fudi_big
fudi_smalldafu_big
dafu_smallcountdates          r   dafudiFolda.dafudi#  sJ    $$X.&&z2
D!QJE  r   c                     U R                  U5      nUc  [        SU-   S-   5        gSnU R                  R                   H,  nU[        R
                  " 5       :  a  M  XB;   a  Us  $ US-  nM.     U$ )z&count date different between two fudisNzfolda does not see z count_gap_issues() return Noner   r   )r#   r)   r   r   datertoday)r
   r   dafur   r"   s        r   count_gap_issuesFolda.count_gap_issues.  sw    zz$<'$.56 7**I 5;;=( QJE +  r   c                 n    [        [        U R                  U5      R                  5       5      5      nUS   $ )Nr   )r3   listr#   r}   )r
   r   r#   s      r   first_issuedateFolda.first_issuedateH  s,    tDJJt,11345Qxr   c                 L   [         R                  R                  U5      (       d  [        S[        R
                  S9  g UR                  S5      (       d  SU-   nUS-   U-   n[        R                  " U5       H*  n[        SU SU 35        [         R                  " U5        M,     g )NzI need a directory herer&   .r>   rT   z by extension )	r   r   ra   r)   r*   r+   
startswithr(   rU   )r
   r   r4   r6   r    s        r   delete_by_extentionFolda.delete_by_extentionL  s    ww}}T""+#**=~~c"")CTkC'IIk*DN4&se<=IIdO +r   c                 ,   US-   U-   n[         R                   " U5      n[        U5      S:X  a  US   $ [        U5      S:X  a   U(       d  [        S[        R                  S9  g [        U5      S:  a$  U(       d  [        S[        R                  S9  US   $ g )Nr0   r   r   z"folda: no result for {glob_string}r&   z(folda: several results for {glob_string})r(   r:   r)   r*   r+   )r
   r   	bana_glob	do_silentr6   founds         r   
get_uniqueFolda.get_uniqueW  s    Sj9,		+&u:?8Ou:?:::'u:>@::'8O	 r   c                    [         R                   " US-   U-   5      n[        U5      S:X  a  g UR                  [        R                  R
                  S9  [        U5      S:  ap  UR                  S5      nU(       a  [        S5        M4  [        R                  R                  U5      (       a  [        R                  " U5        [        U5      S:  a  Mp  US   $ )Nr>   r   r{   r   zfolda want to remove {old_fufi})
r(   r:   sortr   r   r   popr)   isfilerU   )r
   r   	extensionr	   r   old_fufis         r   remove_all_but_recentFolda.remove_all_but_recentg  s    		$+	12u:?

rww''
(%j1nyy|H78ww~~h''		(# %j1n Qxr   c                    [         R                  R                  U5      (       d  [        S[        R
                  S9  gU(       a  [        SU SU 35        US-   U-   n[        R                  " U5       H  nU(       a  [        SU 35        [         R                  R                  U5      R                  U5      (       a  U(       a  [        SU-   5        Mb  U(       a  [        S	U-   5        [         R                  " U5        M     g )
Nzfolda has no {fudi}r&   Fzfiler clears z from r>   zfolda sees zfiler.clear_by_extension keeps z!filer.clear_by_extension removes )
r   r   ra   r)   r*   r+   r(   r   r   rU   )r
   r   r4   prefixr	   r6   
found_fufis          r   clear_by_prefixFolda.clear_by_prefixu  s    ww}}T""'cjj9M#fTF34TkC'))K0JJ<01ww
+66v>>;jHI9JFGIIj! 1r   )r	   r   r   )F)NN)FF)TF)T)r/   F)__name__
__module____qualname____firstlineno__r   r#   r,   r7   r;   rB   rG   rK   rP   rW   r\   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__ r   r   r   r   	   s    
$(( $	%(,&0 .2"6 
	4	 "r   r   )r   r(   r*   r   r   r   r   r   <module>r      s    	  
 }" }"r   