diff options
| author | Carson Gee <x@carsongee.com> | 2015-06-10 10:43:49 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-06-12 10:17:21 -0400 |
| commit | e93e0c03b28137e26f9249e0b7c458b0d667a74e (patch) | |
| tree | a6bae160007e57a3085c0c98fecf0b603e522ce7 | |
| parent | 3c593ba79e5bdee46419e2aa6b14e7ce8bc01758 (diff) | |
Fixed #24963 -- Added File.seekable() on Python 3.
| -rw-r--r-- | django/core/files/utils.py | 5 | ||||
| -rw-r--r-- | docs/ref/files/file.txt | 7 | ||||
| -rw-r--r-- | docs/releases/1.9.txt | 3 | ||||
| -rw-r--r-- | tests/files/tests.py | 13 |
4 files changed, 27 insertions, 1 deletions
diff --git a/django/core/files/utils.py b/django/core/files/utils.py index 8cc212fe1f..2656fa7188 100644 --- a/django/core/files/utils.py +++ b/django/core/files/utils.py @@ -1,3 +1,6 @@ +from django.utils import six + + class FileProxyMixin(object): """ A mixin class used to forward file methods to an underlaying file @@ -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) diff --git a/docs/ref/files/file.txt b/docs/ref/files/file.txt index fd5a915426..74343d10f8 100644 --- a/docs/ref/files/file.txt +++ b/docs/ref/files/file.txt @@ -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 diff --git a/docs/releases/1.9.txt b/docs/releases/1.9.txt index 5be8f233b5..38e6723d30 100644 --- a/docs/releases/1.9.txt +++ b/docs/releases/1.9.txt @@ -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 ^^^^^^^^^^^^ diff --git a/tests/files/tests.py b/tests/files/tests.py index cd2ccaf9f1..2ce4d0139d 100644 --- a/tests/files/tests.py +++ b/tests/files/tests.py @@ -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): """ |
