o
    cJ*                     @   s>   d dl Z d dlZd dlZd dlZd dlmZ G dd dZdS )    N)Rexerc                   @   s   e Zd Zdd Zd'ddZd'ddZd'dd	Zd'd
dZdd Zd'ddZ	d(ddZ
d(ddZd(ddZd(ddZd'ddZd'ddZd)ddZd d! Zd"d# Zd$d% Zd&S )*Folderc                 C   s
   || _ d S N)e)selferimp r   "/home/ernad/ernad/python/folder.py__init__
   s   zFolder.__init__Fc           	      C   s   || _ | j}| |}i }|d u rd S |D ]+}tj|}|j|r9|dd }||vr1g ||< || | q| j	||d q|S )Nr   
   ex_on_non_rif)
fudir   list_amf_fufisospathbasenameRis_rifappendgripe_non_rif	r   r   r   r   fufisoutfufibana	issuedater   r   r	   dates   s   
zFolder.datesc           	      C   sx   || _ | j}tt| j d }i }t|dkrdS |D ]}tj|}|dd }| jjj	d 
|s5q|||< q|S )z&same as dates but allows any file type/*r   Nr   is_date)r   r   sortedgloblenr   r   r   r   rsmatchr   r   r   r	   by_dates    s   
zFolder.by_datesc           	      C   sx   || _ | j}tt| j d }i }|D ]%}tj|}|j|r2|dd }||vr1|||< qq| j	||d q|S )zfirst datesr   r   r   r   
r   r   r    r!   r   r   r   r   r   r   r   r   r   r	   firsts0   s   
zFolder.firstsc           	      C   sn   || _ | j}tt| j d }i }|D ] }tj|}|j|r-|dd }|||< q| j	||d q|S )
last datesr   r   r   r   r&   r   r   r   r	   lastsB   s   
zFolder.lastsc                 C   sX   || _ | j}tt| j d | d }d}|D ]}tj|}|j|s'q|}q|S )zlast fufi for given issuedate/* )	r   r   r    r!   r   r   r   r   r   )r   r   r   r   r   out_fufir   r   r   r   r	   last_by_issuedateQ   s   zFolder.last_by_issuedatec                 C   sD   || _ | j||d}t|dkrdS t|}|  |d }|| S )r(   r   r   N)r   r)   r"   r    reverse)r   r   r   last_issuedatesr)   lastr   r   r	   	very_last^   s   zFolder.very_lastTc           	      C   s   | j }tj|std| tjd dS g }|d |jd  }tt		|D ]}|
| q&|s2|S |d }t		|D ]}|
| q;t|}|S )from old folders libraryznothing in fileNr   amfz.gz)r   r   r   isdirprintsysstderrextr    r!   r   )	r   folderwith_gzr   r   	base_globr   	comp_globsorted_fufisr   r   r	   r   i   s   zFolder.list_amf_fufisc           	      C   s|   |  |}i }|D ]2}tj|}t|dk rq	|dd dkr!q	|dd }||vr;i ||< |dd }||| |< q	dS )r3      r      _r      N)r   r   r   r   r"   )	r   r<   
do_verboser   ivr   r   r   shotir   r   r	   isve|   s   
zFolder.isvec                 C   s   |  |}i }|D ]0}tj|}|dd dkrq	|dd }|dd }||vr/|||< q	||| k r9|||< q	t| dd d}	i }
|	D ]}|| |
|< qH|
S )	r3   r   rB   rC   r   rD   c                 S      |   S r   lowerxr   r   r	   <lambda>       z)Folder.firsts_isda_shot.<locals>.<lambda>key)r   r   r   r   r    keys)r   r<   rE   r   dr   r   r   rG   
issuedatesrF   r   r   r	   firsts_isda_shot   s&   
zFolder.firsts_isda_shotc                 C   s   |  |}|du rtd| tjd dS i }|D ]0}tj|}|dd dkr)q|dd }|dd }||vr>|||< q||| k rH|||< qt| d	d
 d}	g }
|	D ]	}|
	||  qW|
S )r3   Nzno data for r4   r   rB   rC   r   rD   c                 S   rI   r   rJ   rL   r   r   r	   rN      rO   z%Folder.firsts_shoti.<locals>.<lambda>rP   )
r   r8   r9   r:   r   r   r   r    rR   r   )r   r<   rE   r   rS   r   r   r   rG   rT   shotisr   r   r	   firsts_shoti   s,   
zFolder.firsts_shotic           	      C   s   || _ | j}t| j d }i }|D ],}tj|}|j|r7|dd }||v r2t|d | |||< q| j	||d q|S )Nr   r   r   z
 twice in r   )
r   r   r!   r   r   r   r   r   	Exceptionr   r   r   r   r	   dates_unique   s   
zFolder.dates_uniquec                 C   s&   |rt |d t|d tjd |S )Nz is not a rifr4   )rX   r8   r9   r:   )r   r   r   r   r   r	   r      s   zFolder.gripe_non_rifr+   c                 C   sH   | d| }t  |}t|std| d  d S t|tjjd}|S )Nr*   zfolder see nothing for ''rP   )r!   r"   r8   maxr   r   getmtime)r   r   searchglob_stringr   latest_fufir   r   r	   last_by_mtime   s   
zFolder.last_by_mtimec                 C   s8   |  |}|  |}d}|D ]}||v rq|d7 }q|S )z0count date different between two fudis, not usedr      )rY   )r   fudi_big
fudi_smalldafu_big
dafu_smallcountdater   r   r	   dafudi   s   


zFolder.dafudic                 C   sb   |  |}|du rtd| d  dS d}| jjD ]}|t kr"q||v r*|  S |d7 }q|S )z&count date different between two fudisNzfolder does not see z count_gap_issues() return Noner   ra   )r   r8   r   rT   datertoday)r   r   dafurf   r   r   r   r	   count_gap_issues   s   

	zFolder.count_gap_issuesc                 C   s   t t| | }|d S )Nr   )r    listr   rR   )r   r   r   r   r   r	   first_issuedate  s   zFolder.first_issuedateN)F)T)r+   )__name__
__module____qualname__r
   r   r%   r'   r)   r.   r2   r   rH   rU   rW   rY   r   r`   rh   rl   rn   r   r   r   r	   r      s$    











	r   )r   r!   r9   ri   rexerr   r   r   r   r   r	   <module>   s    