summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Forcier <jeff@bitprophet.org>2012-10-15 13:33:16 -0700
committerJeff Forcier <jeff@bitprophet.org>2012-10-15 13:33:16 -0700
commit786920a3208fa335f334689d65b7302e9d52a568 (patch)
treedca1487fe19f6bdbff1fc965521e94d1176a099b
parent78815afe9db56846279ceee5af3863c0ee16e9b8 (diff)
parentdfb45dec7fac59559009cac16d9b354ef4890de3 (diff)
downloadparamiko-786920a3208fa335f334689d65b7302e9d52a568.tar.gz
Merge branch '1.8'
-rw-r--r--NEWS9
-rw-r--r--paramiko/sftp_client.py4
-rw-r--r--tests/test_buffered_pipe.py8
-rw-r--r--tests/test_transport.py7
-rw-r--r--tests/test_util.py13
-rw-r--r--tests/util.py10
6 files changed, 28 insertions, 23 deletions
diff --git a/NEWS b/NEWS
index 39aae7ca..ed9fd008 100644
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,15 @@ v1.9.0 (DD MM YYYY)
v1.8.1 (DD MM YYYY)
-------------------
+* #90: Ensure that callbacks handed to `SFTPClient.get()` always fire at least
+ once, even for zero-length files downloaded. Thanks to Github user `@enB` for
+ the catch.
+* #85: Paramiko's test suite overrides
+ `unittest.TestCase.assertTrue/assertFalse` to provide these modern assertions
+ to Python 2.2/2.3, which lacked them. However on newer Pythons such as 2.7,
+ this now causes deprecation warnings. The overrides have been patched to only
+ execute when necessary. Thanks to `@Arfrever` for catch & patch.
+
v1.8.0 (3rd Oct 2012)
---------------------
diff --git a/paramiko/sftp_client.py b/paramiko/sftp_client.py
index f446ba3d..3eaefc9c 100644
--- a/paramiko/sftp_client.py
+++ b/paramiko/sftp_client.py
@@ -612,12 +612,12 @@ class SFTPClient (BaseSFTP):
size = 0
while True:
data = fr.read(32768)
- if len(data) == 0:
- break
fl.write(data)
size += len(data)
if callback is not None:
callback(size, file_size)
+ if len(data) == 0:
+ break
finally:
fl.close()
finally:
diff --git a/tests/test_buffered_pipe.py b/tests/test_buffered_pipe.py
index f285d05b..b9d91f6a 100644
--- a/tests/test_buffered_pipe.py
+++ b/tests/test_buffered_pipe.py
@@ -26,6 +26,8 @@ import unittest
from paramiko.buffered_pipe import BufferedPipe, PipeTimeout
from paramiko import pipe
+from util import ParamikoTest
+
def delay_thread(pipe):
pipe.feed('a')
@@ -39,11 +41,7 @@ def close_thread(pipe):
pipe.close()
-class BufferedPipeTest (unittest.TestCase):
-
- assertTrue = unittest.TestCase.failUnless # for Python 2.3 and below
- assertFalse = unittest.TestCase.failIf # for Python 2.3 and below
-
+class BufferedPipeTest(ParamikoTest):
def test_1_buffered_pipe(self):
p = BufferedPipe()
self.assert_(not p.read_ready())
diff --git a/tests/test_transport.py b/tests/test_transport.py
index cea4a1dd..1c57d18d 100644
--- a/tests/test_transport.py
+++ b/tests/test_transport.py
@@ -36,6 +36,7 @@ from paramiko import OPEN_SUCCEEDED, OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
from paramiko.common import MSG_KEXINIT, MSG_CHANNEL_WINDOW_ADJUST
from paramiko.message import Message
from loop import LoopSocket
+from util import ParamikoTest
LONG_BANNER = """\
@@ -105,11 +106,7 @@ class NullServer (ServerInterface):
return OPEN_SUCCEEDED
-class TransportTest (unittest.TestCase):
-
- assertTrue = unittest.TestCase.failUnless # for Python 2.3 and below
- assertFalse = unittest.TestCase.failIf # for Python 2.3 and below
-
+class TransportTest(ParamikoTest):
def setUp(self):
self.socks = LoopSocket()
self.sockc = LoopSocket()
diff --git a/tests/test_util.py b/tests/test_util.py
index 7e56245d..458709b2 100644
--- a/tests/test_util.py
+++ b/tests/test_util.py
@@ -28,6 +28,7 @@ import unittest
from Crypto.Hash import SHA
import paramiko.util
+from util import ParamikoTest
test_config_file = """\
Host *
@@ -58,17 +59,7 @@ BGQ3GQ/Fc7SX6gkpXkwcZryoi4kNFhHu5LvHcZPdxXV1D+uTMfGS1eyd2Yz/DoNWXNAl8TI0cAsW\
from paramiko import *
-class UtilTest (unittest.TestCase):
-
- assertTrue = unittest.TestCase.failUnless # for Python 2.3 and below
- assertFalse = unittest.TestCase.failIf # for Python 2.3 and below
-
- def setUp(self):
- pass
-
- def tearDown(self):
- pass
-
+class UtilTest(ParamikoTest):
def test_1_import(self):
"""
verify that all the classes can be imported from paramiko.
diff --git a/tests/util.py b/tests/util.py
new file mode 100644
index 00000000..2e0be087
--- /dev/null
+++ b/tests/util.py
@@ -0,0 +1,10 @@
+import unittest
+
+
+class ParamikoTest(unittest.TestCase):
+ # for Python 2.3 and below
+ if not hasattr(unittest.TestCase, 'assertTrue'):
+ assertTrue = unittest.TestCase.failUnless
+ if not hasattr(unittest.TestCase, 'assertFalse'):
+ assertFalse = unittest.TestCase.failIf
+