Skip to content

Commit 3aa71e8

Browse files
committed
abstract out common transfer speed method
Adds common method used by upload and download progress bars.
1 parent 019b2d4 commit 3aa71e8

3 files changed

Lines changed: 31 additions & 22 deletions

File tree

ddsc/core/download.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import queue
88
from ddsc.core.localstore import HashUtil
99
from ddsc.core.ddsapi import DDS_TOTAL_HEADER
10-
from ddsc.core.util import humanize_bytes
10+
from ddsc.core.util import humanize_bytes, transfer_speed_str
1111

1212
SWIFT_EXPIRED_STATUS_CODE = 401
1313
S3_EXPIRED_STATUS_CODE = 403
@@ -324,11 +324,11 @@ def make_spinner_char(self, current_time):
324324
return self.spinner_chars[half_seconds % 4]
325325

326326
def make_download_speed(self, current_time, total_bytes_downloaded):
327-
elapsed_seconds = current_time - self.start_time
328-
if elapsed_seconds > 0 and total_bytes_downloaded > 0:
329-
bytes_per_second = float(total_bytes_downloaded) / (elapsed_seconds + 0.5)
330-
return '@ {}/s'.format(humanize_bytes(bytes_per_second))
331-
return ''
327+
return transfer_speed_str(
328+
current_time=current_time,
329+
start_time=self.start_time,
330+
transfered_bytes=total_bytes_downloaded
331+
)
332332

333333
def get_download_progress(self):
334334
files_downloaded = 0

ddsc/core/tests/test_util.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ def test_verify_terminal_encoding_none_is_ok(self):
2626

2727
class TestProgressBar(TestCase):
2828
@patch('ddsc.core.util.sys.stdout')
29-
def test_show_no_waiting(self, mock_stdout):
29+
@patch('ddsc.core.util.transfer_speed_str')
30+
def test_show_no_waiting(self, mock_transfer_speed_str, mock_stdout):
3031
progress_bar = ProgressBar()
31-
progress_bar._speed = Mock()
32-
progress_bar._speed.return_value = ' @ 100 MB/s'
32+
mock_transfer_speed_str.return_value = ' @ 100 MB/s'
3333

3434
# replace line with our progress
3535
progress_bar.update(percent_done=0, details='sending really_long_filename.txt', transfered_bytes=0)
@@ -55,10 +55,10 @@ def test_show_no_waiting(self, mock_stdout):
5555
mock_stdout.write.assert_called_with(expected)
5656

5757
@patch('ddsc.core.util.sys.stdout')
58-
def test_show_with_waiting(self, mock_stdout):
58+
@patch('ddsc.core.util.transfer_speed_str')
59+
def test_show_with_waiting(self, mock_transfer_speed_str, mock_stdout):
5960
progress_bar = ProgressBar()
60-
progress_bar._speed = Mock()
61-
progress_bar._speed.return_value = ' @ 100 MB/s'
61+
mock_transfer_speed_str.return_value = ' @ 100 MB/s'
6262

6363
# we make some progress
6464
progress_bar.update(percent_done=10, details='sending short.txt', transfered_bytes=100)

ddsc/core/util.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -154,20 +154,14 @@ def set_state(self, state):
154154
self.state = state
155155

156156
def _get_line(self):
157+
speed = transfer_speed_str(current_time=time.time(), start_time=self.start_time,
158+
transfered_bytes=self.transfered_bytes)
157159
if self.state == self.STATE_DONE:
158-
return 'Done: 100%{}'.format(self._speed())
160+
return 'Done: 100%{}'.format(speed)
159161
details = self.current_item_details
160162
if self.state == self.STATE_WAITING:
161163
details = self.wait_msg
162-
return 'Progress: {}%{} - {}'.format(self.percent_done, self._speed(), details)
163-
164-
def _speed(self):
165-
current_time = time.time()
166-
elapsed_seconds = current_time - self.start_time
167-
if elapsed_seconds > 0 and self.transfered_bytes > 0:
168-
bytes_per_second = float(self.transfered_bytes) / (elapsed_seconds + 0.5)
169-
return ' @ {}/s'.format(humanize_bytes(bytes_per_second))
170-
return ''
164+
return 'Progress: {}%{} - {}'.format(self.percent_done, speed, details)
171165

172166
def show(self):
173167
line = self._get_line()
@@ -466,3 +460,18 @@ def join_with_commas_and_and(items):
466460
return ' and '.join([head_items_str, last_item])
467461
else:
468462
return last_item
463+
464+
465+
def transfer_speed_str(current_time, start_time, transfered_bytes):
466+
"""
467+
Return transfer speed str based
468+
:param current_time: float: current time
469+
:param start_time: float: starting time
470+
:param transfered_bytes: int: bytes transferred
471+
:return: str: end user str
472+
"""
473+
elapsed_seconds = current_time - start_time
474+
if elapsed_seconds > 0 and transfered_bytes > 0:
475+
bytes_per_second = float(transfered_bytes) / (elapsed_seconds + 0.5)
476+
return '@ {}/s'.format(humanize_bytes(bytes_per_second))
477+
return ''

0 commit comments

Comments
 (0)