Loading django/core/files/utils.py +5 −0 Original line number Diff line number Diff line from django.utils import six class FileProxyMixin(object): """ A mixin class used to forward file methods to an underlaying file Loading @@ -24,6 +27,8 @@ class FileProxyMixin(object): write = property(lambda self: self.file.write) writelines = property(lambda self: self.file.writelines) xreadlines = property(lambda self: self.file.xreadlines) if six.PY3: seekable = property(lambda self: self.file.seekable) def __iter__(self): return iter(self.file) docs/ref/files/file.txt +6 −1 Original line number Diff line number Diff line Loading @@ -89,7 +89,12 @@ The ``File`` Class the following attributes and methods of its ``file`` object: ``encoding``, ``fileno``, ``flush``, ``isatty``, ``newlines``, ``read``, ``readinto``, ``readlines``, ``seek``, ``softspace``, ``tell``, ``truncate``, ``writelines``, ``xreadlines``. ``truncate``, ``writelines``, ``xreadlines``. If you are using Python 3, the ``seekable`` method is also available. .. versionchanged:: 1.9 The ``seekable`` method was added. .. currentmodule:: django.core.files.base Loading docs/releases/1.9.txt +3 −0 Original line number Diff line number Diff line Loading @@ -200,6 +200,9 @@ File Storage <django.core.files.storage.Storage.get_valid_name>` is now called when the :attr:`~django.db.models.FileField.upload_to` is a callable. * :class:`~django.core.files.File` now has the ``seekable()`` method when using Python 3. File Uploads ^^^^^^^^^^^^ Loading tests/files/tests.py +13 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,19 @@ class FileTests(unittest.TestCase): f = File(StringIO('one\ntwo\nthree')) self.assertEqual(list(f), ['one\n', 'two\n', 'three']) def test_seekable(self): """ File.seekable() should be available on Python 3. """ with tempfile.TemporaryFile() as temp: temp.write(b"contents\n") test_file = File(temp, name="something.txt") if six.PY2: self.assertFalse(hasattr(test_file, 'seekable')) if six.PY3: self.assertTrue(hasattr(test_file, 'seekable')) self.assertTrue(test_file.seekable()) class NoNameFileTestCase(unittest.TestCase): """ Loading Loading
django/core/files/utils.py +5 −0 Original line number Diff line number Diff line from django.utils import six class FileProxyMixin(object): """ A mixin class used to forward file methods to an underlaying file Loading @@ -24,6 +27,8 @@ class FileProxyMixin(object): write = property(lambda self: self.file.write) writelines = property(lambda self: self.file.writelines) xreadlines = property(lambda self: self.file.xreadlines) if six.PY3: seekable = property(lambda self: self.file.seekable) def __iter__(self): return iter(self.file)
docs/ref/files/file.txt +6 −1 Original line number Diff line number Diff line Loading @@ -89,7 +89,12 @@ The ``File`` Class the following attributes and methods of its ``file`` object: ``encoding``, ``fileno``, ``flush``, ``isatty``, ``newlines``, ``read``, ``readinto``, ``readlines``, ``seek``, ``softspace``, ``tell``, ``truncate``, ``writelines``, ``xreadlines``. ``truncate``, ``writelines``, ``xreadlines``. If you are using Python 3, the ``seekable`` method is also available. .. versionchanged:: 1.9 The ``seekable`` method was added. .. currentmodule:: django.core.files.base Loading
docs/releases/1.9.txt +3 −0 Original line number Diff line number Diff line Loading @@ -200,6 +200,9 @@ File Storage <django.core.files.storage.Storage.get_valid_name>` is now called when the :attr:`~django.db.models.FileField.upload_to` is a callable. * :class:`~django.core.files.File` now has the ``seekable()`` method when using Python 3. File Uploads ^^^^^^^^^^^^ Loading
tests/files/tests.py +13 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,19 @@ class FileTests(unittest.TestCase): f = File(StringIO('one\ntwo\nthree')) self.assertEqual(list(f), ['one\n', 'two\n', 'three']) def test_seekable(self): """ File.seekable() should be available on Python 3. """ with tempfile.TemporaryFile() as temp: temp.write(b"contents\n") test_file = File(temp, name="something.txt") if six.PY2: self.assertFalse(hasattr(test_file, 'seekable')) if six.PY3: self.assertTrue(hasattr(test_file, 'seekable')) self.assertTrue(test_file.seekable()) class NoNameFileTestCase(unittest.TestCase): """ Loading