B
    18\@                 @   s<   d Z ddlZddlZG dd dZdd Zedkr8e  dS )z"Show file statistics by extension.    Nc               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Statsc             C   s
   i | _ d S )N)stats)self r   S/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Tools/scripts/byext.py__init__   s    zStats.__init__c             C   s`   xZ|D ]R}t j|r"| | qt j|r:| | qtjd|  | 	ddd qW d S )NzCan't find %s
z<???>unknown   )
ospathisdirstatdirisfilestatfilesysstderrwriteaddstats)r   argsargr   r   r   statargs   s    
zStats.statargsc          
   C   s   |  ddd yt|}W nD tk
r` } z&tjd||f  |  ddd d S d }~X Y nX xtt|D ]h}|dr|ql|	drqltj
||}tj
|r|  dd	d qltj
|r| | ql| | qlW d S )
Nz<dir>dirsr	   zCan't list %s: %s
Z
unlistablez.#~z<lnk>links)r   r
   listdirOSErrorr   r   r   sorted
startswithendswithr   joinislinkr   r   r   )r   dirnameserrnamefullr   r   r   r      s$    

zStats.statdirc       
   
   C   s4  t j|\}}t j|\}}||kr,d}t j|}|s@d}| |dd y"t|d}| }W d Q R X W nD tk
r } z&t	j
d||f  | |dd d S d }~X Y nX | |dt| d	|kr| |d
d d S |s| |dd t|d }| |dt| ~| }	| |dt|	 d S )N z<none>filesr	   rbzCan't open %s: %s
Z
unopenablebytes    binaryemptyzlatin-1lineswords)r
   r   splitextsplitnormcaser   openreadIOErrorr   r   r   lenstr
splitlines)
r   filenameheadextbasefdatar#   r-   r.   r   r   r   r   -   s4    zStats.statfilec             C   s&   | j |i }||d| ||< d S )Nr   )r   
setdefaultget)r   r:   keyndr   r   r   r   J   s    zStats.addstatsc                s  t | j}i }x|D ]}|| j|  qW t | i ttt|d< d}i | jd< x D ]}d}t|t|}xH|D ]@}| j| |}|d krd}	ntd| }	||7 }t||	}qzW t|tt|}||< || jd |< q^W |d x|D ]}|| j| d< qW  	dd  fdd}
|
  xN|D ]F}x8 D ]0}| j| |d}t
d	| |f d
d q@W t
  q6W |
  d S )Nr:      ZTOTALr   z%dc                 s0   x$ D ]} t d|  | f dd qW t   d S )Nz%*s )end)print)col)colscolwidthr   r   printheaderl   s    
z!Stats.report.<locals>.printheaderr&   z%*srD   )rE   )r   r   updatemaxmapr5   r?   r6   appendinsertrF   )r   extscolumnsr:   ZminwidthrG   totalZcwvaluewrJ   r   )rH   rI   r   reportN   sD    








zStats.reportN)	__name__
__module____qualname__r   r   r   r   r   rU   r   r   r   r   r   	   s   
r   c              C   s6   t jdd  } | stjg} t }||  |  d S )Nr	   )r   argvr
   curdirr   r   rU   )r   sr   r   r   mainz   s    
r\   __main__)__doc__r
   r   r   r\   rV   r   r   r   r   <module>   s   q	