From b2ed8e40172bf1230a8e5d8555016b1315da8a1a Mon Sep 17 00:00:00 2001 From: Maciej Tronowski Date: Thu, 9 Apr 2015 18:14:59 +0200 Subject: [PATCH] delete view --- filex/ftp.py | 10 ++++++++++ filex/urls.py | 1 + filex/views.py | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/filex/ftp.py b/filex/ftp.py index a08732d..4997176 100644 --- a/filex/ftp.py +++ b/filex/ftp.py @@ -135,3 +135,13 @@ class FTPOperation: 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() diff --git a/filex/urls.py b/filex/urls.py index ad9f403..f1c2ba2 100644 --- a/filex/urls.py +++ b/filex/urls.py @@ -7,4 +7,5 @@ urlpatterns = patterns('', 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'), ) diff --git a/filex/views.py b/filex/views.py index 9aeb505..b37a6ce 100644 --- a/filex/views.py +++ b/filex/views.py @@ -4,6 +4,7 @@ from django.core.exceptions import PermissionDenied, SuspiciousOperation 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 @@ -94,3 +95,39 @@ def info(request): 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}) -- 1.7.9.5