delete view
authorMaciej Tronowski <mtro@man.poznan.pl>
Thu, 9 Apr 2015 16:14:59 +0000 (18:14 +0200)
committerMaciej Tronowski <mtro@man.poznan.pl>
Thu, 9 Apr 2015 16:14:59 +0000 (18:14 +0200)
filex/ftp.py
filex/urls.py
filex/views.py

index a08732d..4997176 100644 (file)
@@ -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()
index ad9f403..f1c2ba2 100644 (file)
@@ -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'),
 )
index 9aeb505..b37a6ce 100644 (file)
@@ -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})