@@ -315,7 +315,9 @@ class ResultPrinter(BaseResultHandler):
315
315
SRC_DEST_TRANSFER_LOCATION_FORMAT = '{src} to {dest}'
316
316
SRC_TRANSFER_LOCATION_FORMAT = '{src}'
317
317
318
- def __init__ (self , result_recorder , out_file = None , error_file = None ):
318
+ def __init__ (
319
+ self , result_recorder , out_file = None , error_file = None , frequency = 0 , oneline = True
320
+ ):
319
321
"""Prints status of ongoing transfer
320
322
321
323
:type result_recorder: ResultRecorder
@@ -331,6 +333,8 @@ def __init__(self, result_recorder, out_file=None, error_file=None):
331
333
"""
332
334
self ._result_recorder = result_recorder
333
335
self ._out_file = out_file
336
+ self ._frequency = frequency
337
+ self ._first = True
334
338
if self ._out_file is None :
335
339
self ._out_file = sys .stdout
336
340
self ._error_file = error_file
@@ -347,12 +351,31 @@ def __init__(self, result_recorder, out_file=None, error_file=None):
347
351
DryRunResult : self ._print_dry_run ,
348
352
FinalTotalSubmissionsResult : self ._clear_progress_if_no_more_expected_transfers ,
349
353
}
354
+ self ._now = time .time ()
355
+ self ._oneline = oneline
350
356
351
357
def __call__ (self , result ):
352
358
"""Print the progress of the ongoing transfer based on a result"""
353
- self ._result_handler_map .get (type (result ), self ._print_noop )(
354
- result = result
355
- )
359
+ result_handler = self ._result_handler_map .get (type (result ), self ._print_noop )
360
+ if type (result ) is ProgressResult :
361
+ result_handler = self ._override_progress_result_handler (
362
+ result , result_handler
363
+ )
364
+ result_handler (result = result )
365
+
366
+ def _override_progress_result_handler (self , result , result_handler ):
367
+ if (
368
+ type (result ) in [ProgressResult ]
369
+ and (
370
+ self ._first
371
+ or (self ._frequency == 0 )
372
+ or (time .time () - self ._now >= self ._frequency )
373
+ )
374
+ ):
375
+ self ._now = time .time ()
376
+ self ._first = False
377
+ return result_handler
378
+ return self ._print_noop
356
379
357
380
def _print_noop (self , ** kwargs ):
358
381
# If the result does not have a handler, then do nothing with it.
@@ -463,15 +486,19 @@ def _print_progress(self, **kwargs):
463
486
if not self ._result_recorder .expected_totals_are_final ():
464
487
progress_statement += self ._STILL_CALCULATING_TOTALS
465
488
466
- # Make sure that it overrides any previous progress bar.
467
- progress_statement = self ._adjust_statement_padding (
468
- progress_statement , ending_char = '\r '
469
- )
470
- # We do not want to include the carriage return in this calculation
471
- # as progress length is used for determining whitespace padding.
472
- # So we subtract one off of the length.
473
- self ._progress_length = len (progress_statement ) - 1
474
-
489
+ if self ._oneline :
490
+ # Make sure that it overrides any previous progress bar.
491
+ progress_statement = self ._adjust_statement_padding (
492
+ progress_statement , ending_char = '\r '
493
+ )
494
+ # We do not want to include the carriage return in this calculation
495
+ # as progress length is used for determining whitespace padding.
496
+ # So we subtract one off of the length.
497
+ self ._progress_length = len (progress_statement ) - 1
498
+ else :
499
+ progress_statement = self ._adjust_statement_padding (
500
+ progress_statement , ending_char = '\n '
501
+ )
475
502
# Print the progress out.
476
503
self ._print_to_out_file (progress_statement )
477
504
0 commit comments