@@ -57,6 +57,7 @@ def _create_new_result_cls(name, extra_fields=None, base_cls=BaseResult):
5757FailureResult = _create_new_result_cls ('FailureResult' , ['exception' ])
5858
5959DryRunResult = _create_new_result_cls ('DryRunResult' )
60+ SkipFileResult = _create_new_result_cls ('SkipFileResult' )
6061
6162ErrorResult = namedtuple ('ErrorResult' , ['exception' ])
6263
@@ -132,6 +133,13 @@ def _on_failure(self, future, e):
132133 self ._src ,
133134 self ._dest ,
134135 )
136+ self ._result_queue .put (
137+ SkipFileResult (
138+ transfer_type = self ._transfer_type ,
139+ src = self ._src ,
140+ dest = self ._dest ,
141+ )
142+ )
135143 else :
136144 self ._result_queue .put (
137145 FailureResult (
@@ -167,6 +175,7 @@ def __init__(self):
167175 self .files_transferred = 0
168176 self .files_failed = 0
169177 self .files_warned = 0
178+ self .files_skipped = 0
170179 self .errors = 0
171180 self .expected_bytes_transferred = 0
172181 self .expected_files_transferred = 0
@@ -184,6 +193,7 @@ def __init__(self):
184193 SuccessResult : self ._record_success_result ,
185194 FailureResult : self ._record_failure_result ,
186195 WarningResult : self ._record_warning_result ,
196+ SkipFileResult : self ._record_skipped_file_result ,
187197 ErrorResult : self ._record_error_result ,
188198 CtrlCResult : self ._record_error_result ,
189199 FinalTotalSubmissionsResult : self ._record_final_expected_files ,
@@ -299,6 +309,9 @@ def _record_failure_result(self, result, **kwargs):
299309 self .files_failed += 1
300310 self .files_transferred += 1
301311
312+ def _record_skipped_file_result (self , result , ** kwargs ):
313+ self .files_skipped += 1
314+
302315 def _record_warning_result (self , ** kwargs ):
303316 self .files_warned += 1
304317
@@ -359,6 +372,7 @@ def __init__(self, result_recorder, out_file=None, error_file=None):
359372 SuccessResult : self ._print_success ,
360373 FailureResult : self ._print_failure ,
361374 WarningResult : self ._print_warning ,
375+ SkipFileResult : self ._print_skip ,
362376 ErrorResult : self ._print_error ,
363377 CtrlCResult : self ._print_ctrl_c ,
364378 DryRunResult : self ._print_dry_run ,
@@ -375,6 +389,10 @@ def _print_noop(self, **kwargs):
375389 # If the result does not have a handler, then do nothing with it.
376390 pass
377391
392+ def _print_skip (self , ** kwargs ):
393+ # Don't reset progress length since this result printer doesn't print a newline
394+ self ._redisplay_progress (reset_progress_length = False )
395+
378396 def _print_dry_run (self , result , ** kwargs ):
379397 statement = self .DRY_RUN_FORMAT .format (
380398 transfer_type = result .transfer_type ,
@@ -427,23 +445,26 @@ def _get_transfer_location(self, result):
427445 src = result .src , dest = result .dest
428446 )
429447
430- def _redisplay_progress (self ):
448+ def _redisplay_progress (self , reset_progress_length = True ):
431449 # Reset to zero because done statements are printed with new lines
432450 # meaning there are no carriage returns to take into account when
433451 # printing the next line.
434- self ._progress_length = 0
452+ if reset_progress_length :
453+ self ._progress_length = 0
435454 self ._add_progress_if_needed ()
436455
437456 def _add_progress_if_needed (self ):
438457 if self ._has_remaining_progress ():
439458 self ._print_progress ()
459+ else :
460+ self ._clear_progress_if_no_more_expected_transfers (ending_char = '\r ' )
440461
441462 def _print_progress (self , ** kwargs ):
442- # Get all of the statistics in the correct form.
463+ # Get all the statistics in the correct form.
443464 remaining_files = self ._get_expected_total (
444465 str (
445466 self ._result_recorder .expected_files_transferred
446- - self ._result_recorder .files_transferred
467+ - ( self ._result_recorder .files_transferred + self . _result_recorder . files_skipped )
447468 )
448469 )
449470
@@ -506,7 +527,7 @@ def _adjust_statement_padding(self, print_statement, ending_char='\n'):
506527 def _has_remaining_progress (self ):
507528 if not self ._result_recorder .expected_totals_are_final ():
508529 return True
509- actual = self ._result_recorder .files_transferred
530+ actual = self ._result_recorder .files_transferred + self . _result_recorder . files_skipped
510531 expected = self ._result_recorder .expected_files_transferred
511532 return actual != expected
512533
@@ -516,9 +537,9 @@ def _print_to_out_file(self, statement):
516537 def _print_to_error_file (self , statement ):
517538 uni_print (statement , self ._error_file )
518539
519- def _clear_progress_if_no_more_expected_transfers (self , ** kwargs ):
540+ def _clear_progress_if_no_more_expected_transfers (self , ending_char = ' \n ' , ** kwargs ):
520541 if self ._progress_length and not self ._has_remaining_progress ():
521- uni_print (self ._adjust_statement_padding ('' ), self ._out_file )
542+ uni_print (self ._adjust_statement_padding ('' , ending_char = ending_char ), self ._out_file )
522543
523544
524545class NoProgressResultPrinter (ResultPrinter ):
0 commit comments