mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Fixed #15644 -- Improved Django File wrapper to support more file-like objects. Thanks nickname123 and Michael Palumbo for working on the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17871 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -36,8 +36,13 @@ class File(FileProxyMixin):
|
||||
if not hasattr(self, '_size'):
|
||||
if hasattr(self.file, 'size'):
|
||||
self._size = self.file.size
|
||||
elif os.path.exists(self.file.name):
|
||||
elif hasattr(self.file, 'name') and os.path.exists(self.file.name):
|
||||
self._size = os.path.getsize(self.file.name)
|
||||
elif hasattr(self.file, 'tell') and hasattr(self.file, 'seek'):
|
||||
pos = self.file.tell()
|
||||
self.file.seek(0, os.SEEK_END)
|
||||
self._size = self.file.tell()
|
||||
self.file.seek(pos)
|
||||
else:
|
||||
raise AttributeError("Unable to determine the file's size.")
|
||||
return self._size
|
||||
@@ -61,12 +66,12 @@ class File(FileProxyMixin):
|
||||
|
||||
if hasattr(self, 'seek'):
|
||||
self.seek(0)
|
||||
# Assume the pointer is at zero...
|
||||
counter = self.size
|
||||
|
||||
while counter > 0:
|
||||
yield self.read(chunk_size)
|
||||
counter -= chunk_size
|
||||
while True:
|
||||
data = self.read(chunk_size)
|
||||
if not data:
|
||||
break
|
||||
yield data
|
||||
|
||||
def multiple_chunks(self, chunk_size=None):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user