From 312245a1dce5fc98836bf69d4d09da3053794376 Mon Sep 17 00:00:00 2001 From: Maciej Tronowski Date: Wed, 8 Apr 2015 12:51:23 +0200 Subject: [PATCH 1/1] use temporary location for uploaded file (*.part), rename after successful finish --- filex/ftp.py | 5 +++++ filex/uploadhandler.py | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/filex/ftp.py b/filex/ftp.py index 2d5be20..705c05e 100644 --- a/filex/ftp.py +++ b/filex/ftp.py @@ -96,3 +96,8 @@ class FTPOperation: def put(self, url): self.cli.put(url, self._done, None, self.op_attr) self.cli.register_write(self._buffer, 0, 0, False, self._write, None) + + def move(self, src, dst): + self.cli.move(src, dst, self._done, None, self.op_attr) + + self.wait() diff --git a/filex/uploadhandler.py b/filex/uploadhandler.py index 0f5bfb3..75a6cd7 100644 --- a/filex/uploadhandler.py +++ b/filex/uploadhandler.py @@ -9,6 +9,8 @@ from filex.ftp import FTPOperation class FtpUploadHandler(FileUploadHandler): ftp = None + url = None + tmp_url = None def new_file(self, file_name, *args, **kwargs): super(FtpUploadHandler, self).new_file(file_name, *args, **kwargs) @@ -24,7 +26,10 @@ class FtpUploadHandler(FileUploadHandler): if self.ftp is None: self.ftp = FTPOperation(self.request.session['proxy'], self.chunk_size) - self.ftp.put('gsiftp://' + host + path + self.file_name) + self.url = 'gsiftp://' + host + path + self.file_name + self.tmp_url = 'gsiftp://' + host + path + self.file_name + '.part' + + self.ftp.put(self.tmp_url) StopFutureHandlers() @@ -36,6 +41,8 @@ class FtpUploadHandler(FileUploadHandler): self.ftp.stream.put(None) self.ftp.wait() + self.ftp.move(self.tmp_url, self.url) + return UploadedFile(name=self.file_name, size=file_size, charset=self.charset, content_type=self.content_type, content_type_extra=self.content_type_extra) -- 1.7.9.5