summaryrefslogtreecommitdiff
path: root/paramiko/sftp_client.py
diff options
context:
space:
mode:
authorJeff Forcier <jeff@bitprophet.org>2016-04-23 18:57:13 -0700
committerJeff Forcier <jeff@bitprophet.org>2016-04-23 18:57:13 -0700
commita0bf23a25c39d5c4d61dda29b60b04c1a6fd1c41 (patch)
tree14a49408fd2d4248e8ce45650d9c73435f8522af /paramiko/sftp_client.py
parent294bc5eb4b66f72366b275715fbf33b10ed764e6 (diff)
parentc312b620e7945797468702aeb27cb58def3f0f80 (diff)
downloadparamiko-a0bf23a25c39d5c4d61dda29b60b04c1a6fd1c41.tar.gz
Merge branch '1.15' into 1.16
Diffstat (limited to 'paramiko/sftp_client.py')
-rw-r--r--paramiko/sftp_client.py36
1 files changed, 18 insertions, 18 deletions
diff --git a/paramiko/sftp_client.py b/paramiko/sftp_client.py
index 57225558..daaae3ef 100644
--- a/paramiko/sftp_client.py
+++ b/paramiko/sftp_client.py
@@ -592,6 +592,18 @@ class SFTPClient(BaseSFTP, ClosingContextManager):
# TODO: make class initialize with self._cwd set to self.normalize('.')
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
@@ -621,15 +633,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:
@@ -689,16 +695,10 @@ class SFTPClient(BaseSFTP, ClosingContextManager):
file_size = self.stat(remotepath).st_size
with self.open(remotepath, 'rb') as fr:
fr.prefetch(file_size)
+ return self._transfer_with_callback(
+ reader=fr, writer=fl, file_size=file_size, callback=callback
+ )
- size = 0
- while True:
- data = fr.read(32768)
- fl.write(data)
- size += len(data)
- if callback is not None:
- callback(size, file_size)
- if len(data) == 0:
- break
return size
def get(self, remotepath, localpath, callback=None):