with self._sftp_open_file(remote_path) as f:
return f.stat().st_size
+ @staticmethod
+ def _format_size(file_size):
+ """
+ Given a file_size in bytes, returns a human-readable representation.
+ """
+ for unit in ('B', 'KB', 'MB', 'GB', 'TB'):
+ if abs(file_size) < 1024.0:
+ break
+ file_size = file_size / 1024.0
+ return "{:3.0f}{}".format(file_size, unit)
+
def remove(self, path):
self.run(args=['rm', '-fr', path])
rem = remote.Remote(name='jdoe@xyzzy.example.com', ssh=self.m_ssh)
assert rem._sftp_get_size('/fake/file') == 42
+ def test_format_size(self):
+ assert remote.Remote._format_size(1023).strip() == '1023B'
+ assert remote.Remote._format_size(1024).strip() == '1KB'
+ assert remote.Remote._format_size(1024**2).strip() == '1MB'
+ assert remote.Remote._format_size(1024**5).strip() == '1TB'
+ assert remote.Remote._format_size(1021112).strip() == '997KB'
+ assert remote.Remote._format_size(1021112**2).strip() == '971GB'