o Qa^ @stddlmZmZddlZddlZddlZddlZGdddeZ Gddde Z Gddde Z Gd d d eZ dS) )absolute_importdivisionNc@sReZdZejZdZddZddZdddZ d d Z d d Z d dZ dddZ dS)ProgressrcCstj|_|||dSN)sysstdout_stdoutnew_fileselflabels total_sizer-/usr/lib/python3/dist-packages/S3/Progress.py__init__szProgress.__init__cCsF||_||_d|_|j|_tj|_|j|_|j|_|j dddS)NrT)r ) r r initial_positioncurrent_positiondatetimenow time_start time_last time_currentdisplayr rrrr s zProgress.new_filecCsF|j|_tj|_|dkr||_n |dkr|j|7_|dS)Nr)rrrrrr)r rdelta_positionrrrupdate(s  zProgress.updatecCs|j|ddS)N) done_message)r)r messagerrrdone3sz Progress.donecCs |jd|j|jdS)Nz9%(action)s: '%(source)s' -> '%(destination)s' %(extra)s )rwriter flushr rrr output_labels6szProgress.output_labelscCs$t|jdkrt|_dSdS)NTF)time _last_displayr!rrr_display_needed:s zProgress._display_neededFNc Cs|r |d|_dS|j|jkrftj|jd}|ddkr'|dd7<|j|j}|j d|j t |j d}tj|j|j |dd}|jd |d|d||d|df|jdS|jd |j}||jkr|d d |_|jd |j|jdSdS) z display(new_file = False[/True], done = False[/True]) Override this method to provide a nicer output. rNTr#BQ.Az"100%% %s%s in %.2fs (%.2f %sB/s) dz%d%% )r"last_milestonerr S3Utils formatSizerrdayssecondsfloat microsecondsrrrr )r r r print_size timedelta sec_elapsed print_speed rel_positionrrrrAs,     zProgress.display)rrFN)__name__ __module__ __qualname__rrrr%rr rrr"r&rrrrrrs  rc@sReZdZdZedZedZedZedZedZedZ edZ d d d Z d S) ProgressANSIz?25lz?25hsuz%uG0K2KFNc Cs"|r||j|j|jdS|s|s|sdS|j|j}|jd|j t |j d}|dkrFt j |j|j|dd}nd}|j|j|j|j|jdt|jtt|j|j|jrs|jd|jptd||d|d d |r|jd ||jdS) G display(new_file = False[/True], done_message = None) Nr)r*rTrr'zY%(current)s of %(total)s %(percent)3d%% in %(elapsed)ds %(speed).2f %(speed_coeff)sB/sr+r#currenttotalpercentelapsedspeed speed_coeff %s )r"rrANSI_save_cursor_posr r&rrr1r2r3r4r.r/r0rrANSI_restore_cursor_posANSI_erase_to_eolstrrjustlenr )r r rr6r7r8rrrrks2    zProgressANSI.displayr:) r;r<r=SCIANSI_hide_cursorANSI_show_cursorrMrNANSI_move_cursor_to_columnrOANSI_erase_current_linerrrrrr>`sr>c@seZdZedZdddZdS) ProgressCR FNcCs|r|dS|s|s|sdS|j|j}|jd|jt|jd}|dkr:tj |j |j |dd}nd}|j |jdt|j tt|j|j|jr]|j d|jp^d||d|d d }|j ||ry|j d ||j dS) rCNr)r*rTrDz\ %(current)s of %(total)s %(percent)3d%% in %(elapsed)4ds %(speed)7.2f %(speed_coeff)sB/sr+r#rErL)r"r&rrr1r2r3r4r.r/r0rrrrCR_charrPrQrRr r )r r rr6r7r8outputrrrrs.  zProgressCR.displayr:)r;r<r=chrrZrrrrrrXsrXc@s eZdZdZddZddZdS) StatsInfozHolding info for stats totalscCs4d|_d|_d|_d|_d|_d|_d|_d|_dSrfilessizefiles_transferredsize_transferred files_copied size_copied files_deleted size_deletedr!rrrrs zStatsInfo.__init__cCsd}|jdurd|j}|jdur|d|j7}|d|7}|jr8d|j}|jdur2|d|j7}|d|7}|jrRd|j}|jdurL|d|j7}|d|7}|jrld|j}|jdurf|d|j7}|d|7}|S)Nr'zNumber of files: %dz (%d bytes) z Stats: zNumber of files transferred: %dzNumber of files copied: %dzNumber of files deleted: %dr^)r outstrtmp_strrrr format_outputs,             zStatsInfo.format_outputN)r;r<r=__doc__rrirrrrr]s r]) __future__rrrrr$S3.Utilsr.objectrr>rXr]rrrrsP/%