use temporary location for uploaded file (*.part), rename after successful finish
authorMaciej Tronowski <mtro@man.poznan.pl>
Wed, 8 Apr 2015 10:51:23 +0000 (12:51 +0200)
committerMaciej Tronowski <mtro@man.poznan.pl>
Wed, 8 Apr 2015 10:51:23 +0000 (12:51 +0200)
filex/ftp.py
filex/uploadhandler.py

index 2d5be20..705c05e 100644 (file)
@@ -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()
index 0f5bfb3..75a6cd7 100644 (file)
@@ -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)