3
b^                  @   st   d dl mZmZ d dlZd dlZd dlZd dlZG dd deZ	G dd de	Z
G dd de	ZG d	d
 d
eZdS )    )absolute_importdivisionNc               @   sR   e Zd ZejZdZdd Zdd ZdddZ	d	d
 Z
dd Zdd ZdddZdS )Progressr   c             C   s   t j| _| j|| d S )N)sysstdout_stdoutnew_file)selflabels
total_size r   K/oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/Progress.py__init__   s    zProgress.__init__c             C   sF   || _ || _d| _| j| _tjj | _| j| _| j| _| j	dd d S )Nr   T)r   )
r
   r   initial_positioncurrent_positiondatetimenow
time_start	time_lasttime_currentdisplay)r	   r
   r   r   r   r   r      s    zProgress.new_file   c             C   sF   | j | _tjj | _ |dkr$|| _n|dkr:|  j|7  _| j  d S )Nr   r   )r   r   r   r   r   r   )r	   r   Zdelta_positionr   r   r   update(   s    zProgress.updatec             C   s   | j |d d S )N)done_message)r   )r	   messager   r   r   done3   s    zProgress.donec             C   s    | j jd| j  | j j  d S )Nz9%(action)s: '%(source)s' -> '%(destination)s'  %(extra)s
)r   writer
   flush)r	   r   r   r   output_labels6   s    zProgress.output_labelsc             C   s$   t j  | j dkr t j  | _dS dS )Nr   TF)time_last_display)r	   r   r   r   _display_needed:   s    
zProgress._display_neededFNc             C   s  |r| j   d| _dS | j| jkrtjj| jd}|d dkrN|d  d7  < | j| j }|j	d |j
 t|jd  }tjj| j| j | dd}| jjd	|d |d ||d |d f  | jj  dS | jd
 | j }|| jkr|d d | _| jjd| j | jj  dS dS )z
        display(new_file = False[/True], done = False[/True])

        Override this method to provide a nicer output.
        r   NTr    BiQ g    .Az"100%%  %s%s in %.2fs (%.2f %sB/s)
d      z%d%% )r   Zlast_milestoner   r   S3Utils
formatSizer   r   dayssecondsfloatmicrosecondsr   r   r   r   )r	   r   r   Z
print_size	timedeltasec_elapsedprint_speedZrel_positionr   r   r   r   A   s*     "

zProgress.displayr   r   )r   r   )FN)__name__
__module____qualname__r   r   r   r!   r   r   r   r   r   r"   r   r   r   r   r   r      s   
r   c               @   sR   e Zd ZdZed Zed Zed Zed Zed Zed Z	ed Z
dddZd
S )ProgressANSIz[z?25lz?25hsuz%uGZ0KZ2KFNc          	   C   s(  |r(| j   | jj| j | jj  dS |p.| r@| j  r@dS | j| j }|jd |j	 t
|jd  }|dkrtjj| j| j | dd}nd}| jj| j | jj| j | jjdt| jjtt| j| j| jr| jd | j pd||d |d	 d
  |r| jjd|  | jj  dS )zG
        display(new_file = False[/True], done_message = None)
        NiQ g    .Ar   Tr#   zY%(current)s of %(total)s   %(percent)3d%% in %(elapsed)ds  %(speed).2f %(speed_coeff)sB/sr%   r   )currenttotalpercentelapsedspeedspeed_coeffz  %s
)r   r#   )r   r   r   ANSI_save_cursor_posr   r"   r   r   r*   r+   r,   r-   r'   r(   r)   r   r   ANSI_restore_cursor_posANSI_erase_to_eolstrrjustlenr   )r	   r   r   r.   r/   r0   r   r   r   r   k   s0    
zProgressANSI.display)FN)r1   r2   r3   ZSCIZANSI_hide_cursorZANSI_show_cursorr=   r>   ZANSI_move_cursor_to_columnr?   ZANSI_erase_current_liner   r   r   r   r   r4   `   s   r4   c               @   s   e Zd ZedZdddZdS )
ProgressCR   FNc             C   s  |r| j   dS |p| r(| j  r(dS | j| j }|jd |j t|jd  }|dkrxtj	j
| j| j | dd}nd}| jj| j dt| jjtt| j| j| jr| jd | j pd||d |d	 d
 }| jj| |r| jjd|  | jj  dS )zG
        display(new_file = False[/True], done_message = None)
        NiQ g    .Ar   Tr#   z\ %(current)s of %(total)s   %(percent)3d%% in %(elapsed)4ds  %(speed)7.2f %(speed_coeff)sB/sr%   r   )r7   r8   r9   r:   r;   r<   z  %s
)r   r#   )r   r"   r   r   r*   r+   r,   r-   r'   r(   r)   r   r   r   r   CR_charr@   rA   rB   r   r   )r	   r   r   r.   r/   r0   outputr   r   r   r      s,    zProgressCR.display)FN)r1   r2   r3   chrrE   r   r   r   r   r   rC      s   rC   c               @   s    e Zd ZdZdd Zdd ZdS )	StatsInfozHolding info for stats totalsc             C   s4   d | _ d | _d | _d | _d | _d | _d | _d | _d S )N)filessizefiles_transferredsize_transferredfiles_copiedsize_copiedfiles_deletedsize_deleted)r	   r   r   r   r      s    zStatsInfo.__init__c             C   s   d}| j d k	r<d| j  }| jd k	r0|d| j 7 }|d| 7 }| jrpd| j }| jd k	rd|d| j 7 }|d| 7 }| jrd| j }| jd k	r|d| j 7 }|d| 7 }| jrd| j }| jd k	r|d| j 7 }|d| 7 }|S )Nr#   zNumber of files: %dz (%d bytes) z
Stats: zNumber of files transferred: %dzNumber of files copied: %dzNumber of files deleted: %d)rI   rJ   rK   rL   rM   rN   rO   rP   )r	   outstrZtmp_strr   r   r   format_output   s,    








zStatsInfo.format_outputN)r1   r2   r3   __doc__r   rR   r   r   r   r   rH      s   
rH   )
__future__r   r   r   r   r    S3.Utilsr'   objectr   r4   rC   rH   r   r   r   r   <module>	   s   P/%