diff options
author | Jeff Forcier <jeff@bitprophet.org> | 2016-04-23 18:54:48 -0700 |
---|---|---|
committer | Jeff Forcier <jeff@bitprophet.org> | 2016-04-23 18:54:50 -0700 |
commit | 94ea88fc71521918c1f99d34bfcefabc55d394ac (patch) | |
tree | beb03cab18141b26f81ba5db0ed7e012fc546bdd | |
parent | cdc4c6de258899bd481a999989eb7f16ddedce43 (diff) |
Refactor because ugh.
Original contributor probably meant to patch both of these...BUT.
Fuck copy-pasting. Fuck iiiiiit
-rw-r--r-- | paramiko/sftp_client.py | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/paramiko/sftp_client.py b/paramiko/sftp_client.py index b953526c..6a24b943 100644 --- a/paramiko/sftp_client.py +++ b/paramiko/sftp_client.py @@ -591,6 +591,18 @@ class SFTPClient(BaseSFTP, ClosingContextManager): """ return self._cwd and u(self._cwd) + def _transfer_with_callback(self, reader, writer, file_size, callback): + size = 0 + while True: + data = reader.read(32768) + writer.write(data) + size += len(data) + if len(data) == 0: + break + if callback is not None: + callback(size, file_size) + return size + def putfo(self, fl, remotepath, file_size=0, callback=None, confirm=True): """ Copy the contents of an open file object (``fl``) to the SFTP server as @@ -620,15 +632,9 @@ class SFTPClient(BaseSFTP, ClosingContextManager): """ with self.file(remotepath, 'wb') as fr: fr.set_pipelined(True) - size = 0 - while True: - data = fl.read(32768) - fr.write(data) - size += len(data) - if callback is not None: - callback(size, file_size) - if len(data) == 0: - break + size = self._transfer_with_callback( + reader=fl, writer=fr, file_size=file_size, callback=callback + ) if confirm: s = self.stat(remotepath) if s.st_size != size: @@ -688,16 +694,9 @@ class SFTPClient(BaseSFTP, ClosingContextManager): with self.open(remotepath, 'rb') as fr: file_size = self.stat(remotepath).st_size fr.prefetch() - size = 0 - while True: - data = fr.read(32768) - fl.write(data) - size += len(data) - if len(data) == 0: - break - if callback is not None: - callback(size, file_size) - return size + return self._transfer_with_callback( + reader=fr, writer=fl, file_size=file_size, callback=callback + ) def get(self, remotepath, localpath, callback=None): """ |