move parsing mlst data to FTPOperation class
authorMaciej Tronowski <mtro@man.poznan.pl>
Wed, 8 Apr 2015 11:37:35 +0000 (13:37 +0200)
committerMaciej Tronowski <mtro@man.poznan.pl>
Wed, 8 Apr 2015 11:37:35 +0000 (13:37 +0200)
filex/ftp.py
filex/views.py

index 705c05e..c0b3e25 100644 (file)
@@ -1,7 +1,9 @@
+from datetime import datetime
 from Queue import Queue, Empty
 import re
 from threading import Event
 
+from django.utils.timezone import localtime, UTC
 from gridftp import FTPClient, Buffer, HandleAttr, OperationAttr
 
 
@@ -78,7 +80,29 @@ class FTPOperation:
         while not self.stream.empty():
             result += self.stream.get()
 
-        return result
+        return self._parse_mlst(result)
+
+    @staticmethod
+    def _parse_mlst(listing):
+        data = []
+
+        for item in listing.strip().splitlines():
+            # we may receive empty string when there are multiple consecutive newlines in listing
+            if item:
+                attrs, name = item.split(' ', 1)
+
+                attrs = dict((attr.split('=') for attr in attrs.split(';') if attr))
+
+                date = localtime(datetime.strptime(attrs['Modify'], "%Y%m%d%H%M%S").replace(tzinfo=UTC()))
+
+                data.append({
+                    'name': name,
+                    'type': 'file' if attrs['Type'] == 'file' else 'directory',
+                    'size': int(attrs['Size']),
+                    'date': date,
+                })
+
+        return data
 
     def get(self, url):
         self.cli.get(url, self._done, None, self.op_attr)
index 57932d7..6dd2d9f 100644 (file)
@@ -1,11 +1,9 @@
-from datetime import datetime
 import mimetypes
 
 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.utils.timezone import UTC, localtime
 
 from filex.ftp import FTPOperation, FTPException
 from filex.uploadhandler import with_ftp_upload_handler
@@ -34,26 +32,11 @@ def list_content(request):
     except FTPException as e:
         return JsonResponse({'msg': e.message}, status=400)
 
-    data = []
+    for item in listing:
+        item['size'] = filesizeformat(item['size'])
+        item['date'] = date_format(item['date'], 'DATETIME_FORMAT')
 
-    # ignore first two: '.' and '..'
-    for item in listing.strip().splitlines()[2:]:
-        # we may receive empty string when there are multiple consecutive newlines in listing
-        if item:
-            attrs, name = item.split(' ', 1)
-
-            attrs = dict((attr.split('=') for attr in attrs.split(';') if attr))
-
-            date = localtime(datetime.strptime(attrs['Modify'], "%Y%m%d%H%M%S").replace(tzinfo=UTC()))
-
-            data.append({
-                'name': name,
-                'type': 'file' if attrs['Type'] == 'file' else 'directory',
-                'size': filesizeformat(attrs['Size']),
-                'date': date_format(date, 'DATETIME_FORMAT'),
-            })
-
-    return JsonResponse(data, safe=False)
+    return JsonResponse(listing, safe=False)
 
 
 def download(request):