Selaa lähdekoodia

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

Added a test
Romain Rigaux 13 vuotta sitten
vanhempi
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'download(?P<path>/.*)', 'download', name='download'),
   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)
   url(r'view(?P<path>/.*)', 'view', name='view'),
   url(r'chooser(?P<path>/.*)', 'chooser', name='choose'),

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

@@ -34,10 +34,9 @@ try:
 except ImportError:
   import simplejson as json
 
-from django import forms
 from django.contrib import messages
 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.http import Http404, HttpResponse, HttpResponseNotModified
 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.rwx import filetype, rwx
 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
 from hadoop.fs.hadoopfs import Hdfs
 from hadoop.fs.exceptions import WebHdfsException
@@ -148,6 +146,14 @@ def view(request, path):
         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):
     """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)
 
       # 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
     if cluster.fs.isdir("/user/test"):
@@ -416,6 +415,11 @@ def test_listdir():
     response = c.get('/filebrowser/view/test-filebrowser/?default_to_home')
     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:
     try:
       cluster.fs.rmtree('/test-filebrowser')

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

@@ -22,6 +22,7 @@
 
 
 <%!
+  import posixpath
   import time
 
   from django.template.defaultfilters import date, time as dtime
@@ -87,7 +88,11 @@
   % if url:
     <% path = Hdfs.urlsplit(url)[2] %>
     % 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:
       ${ url }
     % 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_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, {
     'history': history,