summaryrefslogtreecommitdiff
path: root/django/core/files/uploadhandler.py
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2008-07-07 23:16:00 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2008-07-07 23:16:00 +0000
commita28b75b0ba9650ae3bd46e38d12d95d48f5c5664 (patch)
tree60084232ace3608e32c9f15987263795f0592265 /django/core/files/uploadhandler.py
parent9dabd1f8ff7760f28bd1dcfa8b83ae6b1c0b79aa (diff)
downloaddjango-a28b75b0ba9650ae3bd46e38d12d95d48f5c5664.tar.gz
Fixed #7614: the quickening has come, and there now is only one UploadedFile. On top of that, UploadedFile's interface has been improved:
* The API now more closely matches a proper file API. This unfortunately means a few backwards-incompatible renamings; see BackwardsIncompatibleChanges. This refs #7593. * While we were at it, renamed chunk() to chunks() to clarify that it's an iterator. * Temporary uploaded files now property use the tempfile library behind the scenes which should ensure better cleanup of tempfiles (refs #7593 again). Thanks to Mike Axiak for the bulk of this patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7859 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/core/files/uploadhandler.py')
-rw-r--r--django/core/files/uploadhandler.py43
1 files changed, 6 insertions, 37 deletions
diff --git a/django/core/files/uploadhandler.py b/django/core/files/uploadhandler.py
index ab587769f7..008a05a148 100644
--- a/django/core/files/uploadhandler.py
+++ b/django/core/files/uploadhandler.py
@@ -132,21 +132,15 @@ class TemporaryFileUploadHandler(FileUploadHandler):
Create the file object to append to as data is coming in.
"""
super(TemporaryFileUploadHandler, self).new_file(file_name, *args, **kwargs)
- self.file = TemporaryFile(settings.FILE_UPLOAD_TEMP_DIR)
- self.write = self.file.write
+ self.file = TemporaryUploadedFile(self.file_name, self.content_type, 0, self.charset)
def receive_data_chunk(self, raw_data, start):
- self.write(raw_data)
+ self.file.write(raw_data)
def file_complete(self, file_size):
self.file.seek(0)
- return TemporaryUploadedFile(
- file = self.file,
- file_name = self.file_name,
- content_type = self.content_type,
- file_size = file_size,
- charset = self.charset
- )
+ self.file.size = file_size
+ return self.file
class MemoryFileUploadHandler(FileUploadHandler):
"""
@@ -189,37 +183,12 @@ class MemoryFileUploadHandler(FileUploadHandler):
return InMemoryUploadedFile(
file = self.file,
field_name = self.field_name,
- file_name = self.file_name,
+ name = self.file_name,
content_type = self.content_type,
- file_size = file_size,
+ size = file_size,
charset = self.charset
)
-class TemporaryFile(object):
- """
- A temporary file that tries to delete itself when garbage collected.
- """
- def __init__(self, dir):
- if not dir:
- dir = tempfile.gettempdir()
- try:
- (fd, name) = tempfile.mkstemp(suffix='.upload', dir=dir)
- self.file = os.fdopen(fd, 'w+b')
- except (OSError, IOError):
- raise OSError("Could not create temporary file for uploading, have you set settings.FILE_UPLOAD_TEMP_DIR correctly?")
- self.name = name
-
- def __getattr__(self, name):
- a = getattr(self.__dict__['file'], name)
- if type(a) != type(0):
- setattr(self, name, a)
- return a
-
- def __del__(self):
- try:
- os.unlink(self.name)
- except OSError:
- pass
def load_handler(path, *args, **kwargs):
"""