Browse Source

HUE-824 [oozie] Support local paths in workflow path variables

Added a test
Romain Rigaux 13 years ago
parent
commit
98b6940c82

+ 1 - 0
apps/filebrowser/src/filebrowser/urls.py

@@ -27,6 +27,7 @@ urlpatterns = patterns('filebrowser.views',
   url(r'stat(?P<path>/.*)', 'stat', name='stat'),
   url(r'stat(?P<path>/.*)', 'stat', name='stat'),
   url(r'download(?P<path>/.*)', 'download', name='download'),
   url(r'download(?P<path>/.*)', 'download', name='download'),
   url(r'status', 'status', name='status'),
   url(r'status', 'status', name='status'),
+  url(r'home_relative_view(?P<path>/.*)', 'home_relative_view', name='home_relative_view'),
   # 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>/.*)', 'view', name='view'),
   url(r'view(?P<path>/.*)', 'view', name='view'),
   url(r'chooser(?P<path>/.*)', 'chooser', name='choose'),
   url(r'chooser(?P<path>/.*)', 'chooser', name='choose'),

+ 10 - 4
apps/filebrowser/src/filebrowser/views.py

@@ -34,10 +34,9 @@ try:
 except ImportError:
 except ImportError:
   import simplejson as json
   import simplejson as json
 
 
-from django import forms
 from django.contrib import messages
 from django.contrib import messages
 from django.contrib.auth.models import User, Group
 from django.contrib.auth.models import User, Group
-from django.core import urlresolvers, serializers
+from django.core import urlresolvers
 from django.template.defaultfilters import stringformat, filesizeformat
 from django.template.defaultfilters import stringformat, filesizeformat
 from django.http import Http404, HttpResponse, HttpResponseNotModified
 from django.http import Http404, HttpResponse, HttpResponseNotModified
 from django.views.decorators.http import require_http_methods
 from django.views.decorators.http import require_http_methods
@@ -56,8 +55,7 @@ from desktop.lib.exceptions import PopupException
 from filebrowser.lib.archives import archive_factory
 from filebrowser.lib.archives import archive_factory
 from filebrowser.lib.rwx import filetype, rwx
 from filebrowser.lib.rwx import filetype, rwx
 from filebrowser.lib import xxd
 from filebrowser.lib import xxd
-from filebrowser.forms import RenameForm, UploadFileForm, UploadArchiveForm, MkDirForm,\
-    RmDirForm, RmTreeForm, RemoveForm, ChmodForm, ChownForm, EditorForm, TouchForm,\
+from filebrowser.forms import RenameForm, UploadFileForm, UploadArchiveForm, MkDirForm, EditorForm, TouchForm,\
     RenameFormSet, RmTreeFormSet, ChmodFormSet,ChownFormSet
     RenameFormSet, RmTreeFormSet, ChmodFormSet,ChownFormSet
 from hadoop.fs.hadoopfs import Hdfs
 from hadoop.fs.hadoopfs import Hdfs
 from hadoop.fs.exceptions import WebHdfsException
 from hadoop.fs.exceptions import WebHdfsException
@@ -148,6 +146,14 @@ def view(request, path):
         raise PopupException(msg , detail=e)
         raise PopupException(msg , detail=e)
 
 
 
 
+def home_relative_view(request, path):
+  home_dir_path = request.user.get_home_directory()
+  if request.fs.exists(home_dir_path):
+    path = '%s%s' % (home_dir_path, path)
+
+  return view(request, path)
+
+
 def edit(request, path, form=None):
 def edit(request, path, form=None):
     """Shows an edit form for the given path. Path does not necessarily have to exist."""
     """Shows an edit form for the given path. Path does not necessarily have to exist."""
 
 

+ 6 - 2
apps/filebrowser/src/filebrowser/views_test.py

@@ -399,8 +399,7 @@ def test_listdir():
       resp = c.get(url)
       resp = c.get(url)
 
 
       # We are actually reading a directory
       # We are actually reading a directory
-      assert_equal('..', resp.context['files'][0]['name'],
-                   "'%s' should be a directory" % (path,))
+      assert_equal('..', resp.context['files'][0]['name'], "'%s' should be a directory" % (path,))
 
 
     # Delete user's home if there's already something there
     # Delete user's home if there's already something there
     if cluster.fs.isdir("/user/test"):
     if cluster.fs.isdir("/user/test"):
@@ -416,6 +415,11 @@ def test_listdir():
     response = c.get('/filebrowser/view/test-filebrowser/?default_to_home')
     response = c.get('/filebrowser/view/test-filebrowser/?default_to_home')
     assert_true(re.search('/user/test$', response['Location']))
     assert_true(re.search('/user/test$', response['Location']))
 
 
+    # Test path relative to home directory
+    cluster.fs.mkdir('/user/test/test_dir')
+    response = c.get('/filebrowser/home_relative_view/test_dir')
+    assert_equal('/user/test/test_dir', response.context['path'])
+
   finally:
   finally:
     try:
     try:
       cluster.fs.rmtree('/test-filebrowser')
       cluster.fs.rmtree('/test-filebrowser')

+ 6 - 1
apps/oozie/src/oozie/templates/utils.inc.mako

@@ -22,6 +22,7 @@
 
 
 
 
 <%!
 <%!
+  import posixpath
   import time
   import time
 
 
   from django.template.defaultfilters import date, time as dtime
   from django.template.defaultfilters import date, time as dtime
@@ -87,7 +88,11 @@
   % if url:
   % if url:
     <% path = Hdfs.urlsplit(url)[2] %>
     <% path = Hdfs.urlsplit(url)[2] %>
     % if path:
     % if path:
-      <a href="/filebrowser/view${path}">${ url }</a>
+      % if path.startswith(posixpath.sep):
+        <a href="/filebrowser/view${path}">${ url }</a>
+      % else:
+        <a href="/filebrowser/home_relative_view/${path}">${ url }</a>
+      % endif
     % else:
     % else:
       ${ url }
       ${ url }
     % endif
     % endif

+ 1 - 8
apps/oozie/src/oozie/views/dashboard.py

@@ -135,14 +135,7 @@ def list_oozie_workflow(request, job_id, coordinator_job_id=None):
   if hue_coord: Job.objects.is_accessible_or_exception(request, hue_coord.workflow.id)
   if hue_coord: Job.objects.is_accessible_or_exception(request, hue_coord.workflow.id)
   if hue_workflow: Job.objects.is_accessible_or_exception(request, hue_workflow.id)
   if hue_workflow: Job.objects.is_accessible_or_exception(request, hue_workflow.id)
 
 
-  # Add parameters from coordinator to workflow if possible
-  parameters = {}
-  if history and history.properties_dict:
-    parameters = history.properties_dict
-  elif hue_workflow is not None:
-    for param in hue_workflow.find_parameters():
-      if param in oozie_workflow.conf_dict:
-        parameters[param] = oozie_workflow.conf_dict[param]
+  parameters = oozie_workflow.conf_dict.copy()
 
 
   return render('dashboard/list_oozie_workflow.mako', request, {
   return render('dashboard/list_oozie_workflow.mako', request, {
     'history': history,
     'history': history,