data['name'] = os.path.basename(urlparse(url).path.rstrip('/')) or u'/'
return data
+
+ def delete(self, url):
+ self.cli.delete(url, self._done, None, self.op_attr)
+
+ self.wait()
+
+ def rmdir(self, url):
+ self.cli.rmdir(url, self._done, None, self.op_attr)
+
+ self.wait()
url(r'^download/$', views.download, name='download'),
url(r'^upload/$', views.upload, name='upload'),
url(r'^info/$', views.info, name='info'),
+ url(r'^delete/$', views.delete, name='delete'),
)
from django.http import JsonResponse, StreamingHttpResponse
from django.template.defaultfilters import filesizeformat
from django.utils.formats import date_format
+from django.views.decorators.http import require_POST
from filex.ftp import FTPOperation, FTPException
from filex.uploadhandler import with_ftp_upload_handler
status = 403
return JsonResponse({'msg': e.message}, status=status)
+
+
+@require_POST
+def delete(request):
+ check_auth(request)
+
+ # TODO data validation
+ host = request.POST.get('host')
+ path = request.POST.get('path')
+ dirs = request.POST.getlist('dirs')
+ files = request.POST.getlist('files')
+ if not host or not path or not (files or dirs):
+ raise SuspiciousOperation("No path or host or files given!")
+
+ url = 'gsiftp://' + host + path + '/'
+ ftp = FTPOperation(request.session['proxy'])
+
+ done, fail = [], {}
+
+ for name in dirs:
+ try:
+ ftp.rmdir(url + name)
+ except FTPException as e:
+ fail[name] = e.message
+ else:
+ done.append(name)
+
+ for name in files:
+ try:
+ ftp.delete(url + name)
+ except FTPException as e:
+ fail[name] = e.message
+ else:
+ done.append(name)
+
+ return JsonResponse({'done': done, 'fail': fail})