provide non openid login in development configuration
[qcg-portal.git] / filex / uploadhandler.py
1 from django.core.files.uploadedfile import UploadedFile
2 from django.core.files.uploadhandler import FileUploadHandler, StopUpload, StopFutureHandlers
3
4 from filex.ftp import FTPOperation
5
6
7 class FtpUploadHandler(FileUploadHandler):
8     ftp = None
9
10     def new_file(self, file_name, *args, **kwargs):
11         super(FtpUploadHandler, self).new_file(file_name, *args, **kwargs)
12
13         # TODO limit to selected request.path
14         # TODO validate host and path
15         host = self.request.GET.get('host')
16         path = self.request.GET.get('path')
17
18         if self.request.user.is_anonymous() or not host or not path:
19             raise StopUpload(connection_reset=True)
20
21         if self.ftp is None:
22             self.ftp = FTPOperation(self.request.session['proxy'], self.chunk_size)
23
24         self.ftp.put('gsiftp://' + host + path + self.file_name)
25
26         StopFutureHandlers()
27
28     def receive_data_chunk(self, raw_data, start):
29         self.ftp.stream.put(raw_data)
30
31     def file_complete(self, file_size):
32         # signal end of data and wait for finish
33         self.ftp.stream.put(None)
34         self.ftp.wait()
35
36         return UploadedFile(name=self.file_name, size=file_size, charset=self.charset,
37                             content_type=self.content_type, content_type_extra=self.content_type_extra)