Opened 11 years ago
Closed 11 years ago
#22307 closed Bug (fixed)
tempfile.SpooledTemporaryFile passed to File causes exception
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | Core (Other) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
When a File object is created from a tempfile.SpooledTemporaryFile, an exception occurs when the File.size method is called and the tempfile.SpooledTemporaryFile isn't large enough to have been written to disk. The exception is caused by an attempt to call os.path.exists on a None value. The name attribute of the tempfile.SpooledTemporaryFile in this case is None in this case because it doesn't exist on disk.
Patch in pull request at https://github.com/django/django/pull/2455
The patch just adds another condition before calling os.path.exists to verify that the file name isn't None.
Traceback (most recent call last):
File "/Users/hrwl/Documents/Projects/django/tests/files/tests.py", line 215, in test_in_memory_spooled_temp
self.assertTrue(django_file.size, 17)
File "/Users/hrwl/Documents/Projects/django/django/core/files/base.py", line 43, in _get_size
elif hasattr(self.file, 'name') and os.path.exists(self.file.name):
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/genericpath.py", line 18, in exists
os.stat(path)
TypeError: coercing to Unicode: need string or buffer, NoneType found
Change History (6)
comment:1 by , 11 years ago
Patch needs improvement: | set |
---|---|
Triage Stage: | Unreviewed → Accepted |
Version: | 1.6 → master |
comment:2 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:3 by , 11 years ago
Resolution: | fixed |
---|---|
Status: | closed → new |
This commit causes a test failure under Python 3:
comment:4 by , 11 years ago
Patch needs improvement: | unset |
---|---|
Triage Stage: | Accepted → Ready for checkin |
Baptiste, can you review and merge https://github.com/django/django/pull/2459?
comment:6 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
That fixed it.
Thanks for the heads up.
Hi,
There's some trailing whitespace and the added test doesn't work on Python3.
Looks good otherwise.