Merge pull request #127 from mwilliamson/sftp-file-context-manager

Turn SFTPFile into a context manager
This commit is contained in:
Jeff Forcier 2013-02-27 15:50:48 -08:00
commit a69abd4606
2 changed files with 19 additions and 0 deletions

View File

@ -474,3 +474,9 @@ class SFTPFile (BufferedFile):
x = self._saved_exception x = self._saved_exception
self._saved_exception = None self._saved_exception = None
raise x raise x
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
self.close()

View File

@ -23,6 +23,8 @@ a real actual sftp server is contacted, and a new folder is created there to
do test file operations in (so no existing files will be harmed). do test file operations in (so no existing files will be harmed).
""" """
from __future__ import with_statement
from binascii import hexlify from binascii import hexlify
import logging import logging
import os import os
@ -188,6 +190,17 @@ class SFTPTest (unittest.TestCase):
finally: finally:
sftp.remove(FOLDER + '/duck.txt') sftp.remove(FOLDER + '/duck.txt')
def test_3_sftp_file_can_be_used_as_context_manager(self):
"""
verify that an opened file can be used as a context manager
"""
try:
with sftp.open(FOLDER + '/duck.txt', 'w') as f:
f.write(ARTICLE)
self.assertEqual(sftp.stat(FOLDER + '/duck.txt').st_size, 1483)
finally:
sftp.remove(FOLDER + '/duck.txt')
def test_4_append(self): def test_4_append(self):
""" """
verify that a file can be opened for append, and tell() still works. verify that a file can be opened for append, and tell() still works.