Browse Source

HUE-735 [fb] Open on home folder by default

Created a new view 'index' managing this new behavior
Open on home folder if path exists
Open on '/' if the user does not have a home
HDFS call on get_home_dir not happening on each view request anymore
Simplifed a bit the url patterns
Romain Rigaux 13 years ago
parent
commit
7c277af

+ 21 - 24
apps/filebrowser/src/filebrowser/urls.py

@@ -17,34 +17,31 @@
 
 
 from django.conf.urls.defaults import url, patterns
 from django.conf.urls.defaults import url, patterns
 
 
-# TODO(philip): The names below should be converted to be "qualified", i.e.,
-# should be made "filebrowser.ajax_view" instead of "ajax_view".
-
-urlpatterns = patterns('',
 
 
+urlpatterns = patterns('filebrowser.views',
   # Base view
   # Base view
-  url(r'^$', 'django.views.generic.simple.redirect_to', { "url": "/filebrowser/view/" }),
+  url(r'^$', 'index', name='index'),
 
 
-  url(r'listdir(?P<path>/.*)', 'filebrowser.views.listdir', name='listdir'),
-  url(r'display(?P<path>/.*)', 'filebrowser.views.display', name='display'),
-  url(r'stat(?P<path>/.*)', 'filebrowser.views.stat', name='stat'),
-  url(r'download(?P<path>/.*)', 'filebrowser.views.download', name='download'),
-  url(r'status', 'filebrowser.views.status', name='status'),
+  url(r'listdir(?P<path>/.*)', 'listdir', name='listdir'),
+  url(r'display(?P<path>/.*)', 'display', name='display'),
+  url(r'stat(?P<path>/.*)', 'stat', name='stat'),
+  url(r'download(?P<path>/.*)', 'download', name='download'),
+  url(r'status', 'status', name='status'),
   # Catch-all for viewing a file (display) or a directory (listdir)
   # Catch-all for viewing a file (display) or a directory (listdir)
-  url(r'view(?P<path>/.*)', 'filebrowser.views.view', name='view'),
-  url(r'chooser(?P<path>/.*)', 'filebrowser.views.chooser', name='view'),
-  url(r'edit(?P<path>/.*)', 'filebrowser.views.edit', name='edit'),
-  url(r'save', 'filebrowser.views.save_file'),
+  url(r'view(?P<path>/.*)', 'view', name='view'),
+  url(r'chooser(?P<path>/.*)', 'chooser', name='view'),
+  url(r'edit(?P<path>/.*)', 'edit', name='edit'),
+  url(r'save', 'save_file'),
 
 
   # POST operations
   # POST operations
-  url(r'upload_flash$', 'filebrowser.views.upload_flash', name='upload_flash'),
-  url(r'upload$', 'filebrowser.views.upload', name='upload'),
-  url(r'rename', 'filebrowser.views.rename', name='rename'),
-  url(r'mkdir', 'filebrowser.views.mkdir', name='mkdir'),
-  url(r'^move', 'filebrowser.views.move', name='move'),
-  url(r'remove', 'filebrowser.views.remove', name='remove'),
-  url(r'rmdir', 'filebrowser.views.rmdir', name='rmdir'),
-  url(r'rmtree', 'filebrowser.views.rmtree', name='rmtree'),
-  url(r'chmod', 'filebrowser.views.chmod', name='chmod'),
-  url(r'chown', 'filebrowser.views.chown', name='chown'),
+  url(r'upload_flash$', 'upload_flash', name='upload_flash'),
+  url(r'upload$', 'upload', name='upload'),
+  url(r'rename', 'rename', name='rename'),
+  url(r'mkdir', 'mkdir', name='mkdir'),
+  url(r'^move', 'move', name='move'),
+  url(r'remove', 'remove', name='remove'),
+  url(r'rmdir', 'rmdir', name='rmdir'),
+  url(r'rmtree', 'rmtree', name='rmtree'),
+  url(r'chmod', 'chmod', name='chmod'),
+  url(r'chown', 'chown', name='chown'),
 )
 )

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

@@ -63,6 +63,14 @@ MAX_FILEEDITOR_SIZE = 256 * 1024
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
 
 
+def index(request):
+  # Redirect to home directory by default
+  path = request.user.get_home_directory()
+  if not request.fs.isdir(path):
+    path = '/'
+  return view(request, path)
+
+
 def _file_reader(fh):
 def _file_reader(fh):
     """Generator that reads a file, chunk-by-chunk."""
     """Generator that reads a file, chunk-by-chunk."""
     while True:
     while True:
@@ -105,9 +113,10 @@ def view(request, path):
     """Dispatches viewing of a path to either index() or fileview(), depending on type."""
     """Dispatches viewing of a path to either index() or fileview(), depending on type."""
 
 
     # default_to_home is set in bootstrap.js
     # default_to_home is set in bootstrap.js
-    home_dir_path = request.user.get_home_directory()
-    if 'default_to_home' in request.GET and request.fs.isdir(home_dir_path):
-        return format_preserving_redirect(request, urlresolvers.reverse(view, kwargs=dict(path=home_dir_path)))
+    if 'default_to_home' in request.GET:
+        home_dir_path = request.user.get_home_directory()
+        if request.fs.isdir(home_dir_path):
+            return format_preserving_redirect(request, urlresolvers.reverse(view, kwargs=dict(path=home_dir_path)))
 
 
     try:
     try:
         stats = request.fs.stats(path)
         stats = request.fs.stats(path)

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

@@ -307,6 +307,28 @@ def test_view_access():
       pass      # Don't let cleanup errors mask earlier failures
       pass      # Don't let cleanup errors mask earlier failures
 
 
 
 
+@attr('requires_hadoop')
+def test_index():
+  HOME_DIR = u'/user/test'
+  NO_HOME_DIR = u'/user/no_home'
+
+  c = make_logged_in_client()
+  c_no_home = make_logged_in_client(username='no_home')
+  cluster = pseudo_hdfs4.shared_cluster()
+
+  if not cluster.fs.exists(HOME_DIR):
+    cluster.fs.create_home_dir(HOME_DIR)
+  assert_false(cluster.fs.exists(NO_HOME_DIR))
+
+  response = c.get('/filebrowser', follow=True)
+  assert_equal(HOME_DIR, response.context['path'])
+  assert_equal(HOME_DIR, response.context['home_directory'])
+
+  response = c_no_home.get('/filebrowser', follow=True)
+  assert_equal('/', response.context['path'])
+  assert_equal(None, response.context['home_directory'])
+
+
 def view_helper(cluster, encoding, content):
 def view_helper(cluster, encoding, content):
   """
   """
   Write the content in the given encoding directly into the filesystem.
   Write the content in the given encoding directly into the filesystem.