summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2008-08-27 21:30:47 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2008-08-27 21:30:47 +0000
commit52672f2b942767e861c65dfbaa3058dc1f1a8303 (patch)
tree4103e9624193c70968c457124819a688d5e86490
parent8943a857a7bcf8aae9edc0eb09719e36f7b9e78c (diff)
Fixed #8534: getting the size of a file no longer opens it (at least for the built-in file-system storage). Thanks, snaury.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8638 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/fields/files.py5
-rw-r--r--tests/regressiontests/file_storage/models.py18
2 files changed, 23 insertions, 0 deletions
diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py
index 59bd35e27f..949f991c5c 100644
--- a/django/db/models/fields/files.py
+++ b/django/db/models/fields/files.py
@@ -54,6 +54,11 @@ class FieldFile(File):
return self.storage.url(self.name)
url = property(_get_url)
+ def _get_size(self):
+ self._require_file()
+ return self.storage.size(self.name)
+ size = property(_get_size)
+
def open(self, mode='rb'):
self._require_file()
return super(FieldFile, self).open(mode)
diff --git a/tests/regressiontests/file_storage/models.py b/tests/regressiontests/file_storage/models.py
index c0557bcab4..6a62c5252a 100644
--- a/tests/regressiontests/file_storage/models.py
+++ b/tests/regressiontests/file_storage/models.py
@@ -46,5 +46,23 @@ if Image:
>>> p2.mugshot.save("shot", ContentFile(image_data))
>>> os.remove(p2.mugshot.path)
>>> p2.delete()
+
+# Bug #8534: FileField.size should not leave the file open.
+>>> p3 = Person(name="Joan")
+>>> p3.mugshot.save("shot", ContentFile(image_data))
+
+# Get a "clean" model instance
+>>> p3 = Person.objects.get(name="Joan")
+
+# It won't have an opened file. This is a bit brittle since it depends on the
+# the internals of FieldFile, but there's no other way of telling if the
+# file's been opened or not.
+>>> hasattr(p3.mugshot, '_file')
+False
+
+# After asking for the size, the file should still be closed.
+>>> _ = p3.mugshot.size
+>>> hasattr(p3.mugshot, '_file')
+False
"""}
\ No newline at end of file