diff options
author | Jacob Kaplan-Moss <jacob@jacobian.org> | 2008-07-07 23:16:00 +0000 |
---|---|---|
committer | Jacob Kaplan-Moss <jacob@jacobian.org> | 2008-07-07 23:16:00 +0000 |
commit | a28b75b0ba9650ae3bd46e38d12d95d48f5c5664 (patch) | |
tree | 60084232ace3608e32c9f15987263795f0592265 /django/core/files/uploadhandler.py | |
parent | 9dabd1f8ff7760f28bd1dcfa8b83ae6b1c0b79aa (diff) | |
download | django-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.py | 43 |
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): """ |