浏览代码

HUE-6704 [fb] Handle empty page error on filebrowser filter requests

Jenny Kim 8 年之前
父节点
当前提交
1c76aa9d0f
共有 2 个文件被更改,包括 19 次插入5 次删除
  1. 12 5
      apps/filebrowser/src/filebrowser/views.py
  2. 7 0
      apps/filebrowser/src/filebrowser/views_test.py

+ 12 - 5
apps/filebrowser/src/filebrowser/views.py

@@ -33,6 +33,7 @@ from cStringIO import StringIO
 from gzip import GzipFile
 
 from django.contrib.auth.models import User, Group
+from django.core.paginator import EmptyPage
 from django.core.urlresolvers import reverse
 from django.template.defaultfilters import stringformat, filesizeformat
 from django.http import Http404, HttpResponse, HttpResponseNotModified, HttpResponseForbidden
@@ -451,8 +452,13 @@ def listdir_paged(request, path):
 
 
     # Do pagination
-    page = paginator.Paginator(all_stats, pagesize).page(pagenum)
-    shown_stats = page.object_list
+    try:
+      page = paginator.Paginator(all_stats, pagesize).page(pagenum)
+      shown_stats = page.object_list
+    except EmptyPage:
+      logger.warn("No results found for requested page.")
+      page = None
+      shown_stats = []
 
     # Include parent dir always as second option, unless at filesystem root.
     if not request.fs.isroot(path):
@@ -472,7 +478,8 @@ def listdir_paged(request, path):
     current_stat['name'] = "."
     shown_stats.insert(1, current_stat)
 
-    page.object_list = [ _massage_stats(request, s) for s in shown_stats ]
+    if page:
+      page.object_list = [ _massage_stats(request, s) for s in shown_stats ]
 
     is_trash_enabled = request.fs._get_scheme(path) == 'hdfs' and \
                        (request.fs.isdir(_home_trash_path(request.fs, request.user, path)) or
@@ -484,8 +491,8 @@ def listdir_paged(request, path):
         'breadcrumbs': breadcrumbs,
         'current_request_path': request.path,
         'is_trash_enabled': is_trash_enabled,
-        'files': page.object_list,
-        'page': _massage_page(page),
+        'files': page.object_list if page else [],
+        'page': _massage_page(page) if page else None,
         'pagesize': pagesize,
         'home_directory': request.fs.isdir(home_dir_path) and home_dir_path or None,
         'descending': descending_param,

+ 7 - 0
apps/filebrowser/src/filebrowser/views_test.py

@@ -508,6 +508,13 @@ class TestFileBrowserWithHadoop(object):
     listing = self.c.get('/filebrowser/view=' + BASE + '?filter=1&sortby=name&descending=true&pagesize=1&pagenum=2').context['files']
     assert_equal(['..', '.', '1'], [ f['name'] for f in listing ])
 
+    # Check filter with empty results
+    resp = self.c.get('/filebrowser/view=' + BASE + '?filter=empty&sortby=name&descending=true&pagesize=1&pagenum=2')
+    listing = resp.context['files']
+    assert_equal([], listing)
+    page = resp.context['page']
+    assert_equal(None, page)
+
 
   def test_view_snappy_compressed(self):
     if not snappy_installed():