Merge branch '1.13'
This commit is contained in:
commit
c1434dbd24
|
@ -124,9 +124,11 @@ class BufferedFile (object):
|
|||
file first). If the ``size`` argument is negative or omitted, read all
|
||||
the remaining data in the file.
|
||||
|
||||
``'b'`` mode flag is ignored (``self.FLAG_BINARY`` in ``self._flags``),
|
||||
because SSH treats all files as binary, since we have no idea what
|
||||
encoding the file is in, or even if the file is text data.
|
||||
.. note::
|
||||
``'b'`` mode flag is ignored (``self.FLAG_BINARY`` in
|
||||
``self._flags``), because SSH treats all files as binary, since we
|
||||
have no idea what encoding the file is in, or even if the file is
|
||||
text data.
|
||||
|
||||
:param int size: maximum number of bytes to read
|
||||
:return:
|
||||
|
@ -285,7 +287,8 @@ class BufferedFile (object):
|
|||
Set the file's current position, like stdio's ``fseek``. Not all file
|
||||
objects support seeking.
|
||||
|
||||
.. note:: If a file is opened in append mode (``'a'`` or ``'a+'``), any seek
|
||||
.. note::
|
||||
If a file is opened in append mode (``'a'`` or ``'a+'``), any seek
|
||||
operations will be undone at the next write (as the file position
|
||||
will move back to the end of the file).
|
||||
|
||||
|
|
|
@ -67,6 +67,18 @@ liver insulin receptors. Their sensitivity to insulin is, however, similarly
|
|||
decreased compared with chicken.
|
||||
'''
|
||||
|
||||
|
||||
# Here is how unicode characters are encoded over 1 to 6 bytes in utf-8
|
||||
# U-00000000 - U-0000007F: 0xxxxxxx
|
||||
# U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
|
||||
# U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
|
||||
# U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
||||
# U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
|
||||
# U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
|
||||
# Note that: hex(int('11000011',2)) == '0xc3'
|
||||
# Thus, the following 2-bytes sequence is not valid utf8: "invalid continuation byte"
|
||||
NON_UTF8_DATA = b'\xC3\xC3'
|
||||
|
||||
FOLDER = os.environ.get('TEST_FOLDER', 'temp-testing000')
|
||||
|
||||
sftp = None
|
||||
|
@ -466,7 +478,7 @@ class SFTPTest (unittest.TestCase):
|
|||
f.write('?\n')
|
||||
|
||||
with sftp.open(FOLDER + '/happy.txt', 'r') as f:
|
||||
self.assertEqual(f.readline(), u'full line?\n')
|
||||
self.assertEqual(f.readline(), u('full line?\n'))
|
||||
self.assertEqual(f.read(7), b'partial')
|
||||
finally:
|
||||
try:
|
||||
|
@ -747,6 +759,23 @@ class SFTPTest (unittest.TestCase):
|
|||
sftp.remove(FOLDER + '/test%file')
|
||||
|
||||
|
||||
def test_O_non_utf8_data(self):
|
||||
"""Test write() and read() of non utf8 data"""
|
||||
try:
|
||||
with sftp.open('%s/nonutf8data' % FOLDER, 'w') as f:
|
||||
f.write(NON_UTF8_DATA)
|
||||
with sftp.open('%s/nonutf8data' % FOLDER, 'r') as f:
|
||||
data = f.read()
|
||||
self.assertEqual(data, NON_UTF8_DATA)
|
||||
with sftp.open('%s/nonutf8data' % FOLDER, 'wb') as f:
|
||||
f.write(NON_UTF8_DATA)
|
||||
with sftp.open('%s/nonutf8data' % FOLDER, 'rb') as f:
|
||||
data = f.read()
|
||||
self.assertEqual(data, NON_UTF8_DATA)
|
||||
finally:
|
||||
sftp.remove('%s/nonutf8data' % FOLDER)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
SFTPTest.init_loopback()
|
||||
# logging is required by test_N_file_with_percent
|
||||
|
|
Loading…
Reference in New Issue