summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarson Gee <x@carsongee.com>2015-06-10 10:43:49 -0400
committerTim Graham <timograham@gmail.com>2015-06-12 10:17:21 -0400
commite93e0c03b28137e26f9249e0b7c458b0d667a74e (patch)
treea6bae160007e57a3085c0c98fecf0b603e522ce7
parent3c593ba79e5bdee46419e2aa6b14e7ce8bc01758 (diff)
Fixed #24963 -- Added File.seekable() on Python 3.
-rw-r--r--django/core/files/utils.py5
-rw-r--r--docs/ref/files/file.txt7
-rw-r--r--docs/releases/1.9.txt3
-rw-r--r--tests/files/tests.py13
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):
"""