X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=filex%2Fuploadhandler.py;h=7e57a369b4923324199e39274f17a1dac9ab8706;hb=f870a6fc9f69fb1e55f6bc8e468263c5b6dc4ec5;hp=0f5bfb3e38dfa095e00479ddfa9bce4446bca642;hpb=a0070644fd09063d4222ca3142f3e920924c0bea;p=qcg-portal.git diff --git a/filex/uploadhandler.py b/filex/uploadhandler.py index 0f5bfb3..7e57a36 100644 --- a/filex/uploadhandler.py +++ b/filex/uploadhandler.py @@ -1,30 +1,33 @@ -from functools import wraps +import os from django.core.files.uploadedfile import UploadedFile from django.core.files.uploadhandler import FileUploadHandler, StopUpload, StopFutureHandlers -from django.views.decorators.csrf import csrf_exempt, csrf_protect +from filex.forms import HostPathForm 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) - # TODO limit to selected request.path - # TODO validate host and path - host = self.request.GET.get('host') - path = self.request.GET.get('path') + form = HostPathForm(self.request.GET) - if self.request.user.is_anonymous() or not host or not path: + if self.request.user.is_anonymous() or not form.is_valid(): raise StopUpload(connection_reset=True) 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://{}/{}'.format(form.cleaned_data['host'], + os.path.join(form.cleaned_data['path'], self.file_name)) + self.tmp_url = self.url + '.part' + + self.ftp.put(self.tmp_url) StopFutureHandlers() @@ -36,15 +39,7 @@ 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) - - -def with_ftp_upload_handler(view_func): - @wraps(view_func) - def wrapped_view(request, *args, **kwargs): - request.upload_handlers = [FtpUploadHandler(request)] - - return csrf_protect(view_func)(request, *args, **kwargs) - - return csrf_exempt(wrapped_view)