diff options
-rw-r--r-- | NEWS | 9 | ||||
-rw-r--r-- | paramiko/sftp_client.py | 4 | ||||
-rw-r--r-- | tests/test_buffered_pipe.py | 8 | ||||
-rw-r--r-- | tests/test_transport.py | 7 | ||||
-rw-r--r-- | tests/test_util.py | 13 | ||||
-rw-r--r-- | tests/util.py | 10 |
6 files changed, 28 insertions, 23 deletions
@@ -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 + |