Преглед изворни кода

HUE-4954 [editor] Refresh schedule parameters on save

Romain Rigaux пре 9 година
родитељ
комит
28e3c0e

+ 11 - 13
apps/oozie/src/oozie/models2.py

@@ -388,16 +388,18 @@ class Workflow(Job):
       for param in find_json_parameters(self.sla):
         params.add(param)
 
-    parameters = dict([(param, '') for param in list(params)]) 
+    parameters = dict([(param, '') for param in list(params)])
 
     for node in self.nodes:
-      print '===='
       if 'document' in node.data['type']:
-        parameters.update(node.data['type'])
-        params.update(node.find_parameters())
-      return 
-      print node.find_parameters()
-      
+        for param in node.data['properties']['parameters']:
+          name, val = param['value'].split('=')
+          parameters[name] = val
+      else:
+        extra = node.find_parameters()
+        if extra:
+          parameters.update(dict([(param, '') for param in list(extra)]))
+
     return parameters
 
   def get_json(self):
@@ -3223,8 +3225,6 @@ class Coordinator(Job):
       wf_doc = Document2.objects.get_by_uuid(user=self.document.owner, uuid=self.data['properties']['workflow'])
       return Workflow(document=wf_doc)
 
-    #return Workflow(document=wf_doc)
-
   def get_absolute_url(self):
     return reverse('oozie:edit_coordinator') + '?coordinator=%s' % self.id
 
@@ -3613,9 +3613,8 @@ class WorkflowBuilder():
   def get_hive_snippet_node(self, snippet, user):
     node = self._get_hive_node(snippet['id'], user)
 
-    node['properties']['parameters'] = []
+    node['properties']['parameters'] = [{'value': '%(name)s=%(value)s' % v} for v in snippet['variables']]
     node['properties']['statements'] = 'USE %s;\n\n%s' % (snippet['database'], snippet['statement_raw'])
-    node['properties']['parameters'] = []
 
     return node
 
@@ -3623,8 +3622,7 @@ class WorkflowBuilder():
     node = self._get_hive_node(document.uuid, user, is_document_node=True)
 
     notebook = Notebook(document=document)
-    parameters = find_dollar_braced_variables(notebook.get_str()) # TODO just pick them from snippet 1
-    node['parameters'] = [{u'value': u'%s=${%s}' % (p, p)} for p in parameters] #Todo check if need properties
+    node['properties']['parameters'] = [{'value': '%(name)s=%(value)s' % v} for v in notebook.get_data()['snippets'][0]['variables']]
     node['properties']['uuid'] = document.uuid
 
     return node

+ 2 - 3
apps/oozie/src/oozie/urls.py

@@ -81,10 +81,9 @@ urlpatterns += patterns(
   url(r'^editor/workflow/add_node/$', 'add_node', name='add_node'),
   url(r'^editor/workflow/parameters/$', 'workflow_parameters', name='workflow_parameters'),
   url(r'^editor/workflow/action/parameters/$', 'action_parameters', name='action_parameters'),
-  url(r'^editor/workflow/refresh_document_parameters/$', 'refresh_document_parameters', name='refresh_document_parameters'),
   url(r'^editor/workflow/gen_xml/$', 'gen_xml_workflow', name='gen_xml_workflow'),
   url(r'^editor/workflow/open_v1/$', 'open_old_workflow', name='open_old_workflow'),
-  
+
   url(r'^editor/coordinator/list/$', 'list_editor_coordinators', name='list_editor_coordinators'),
   url(r'^editor/coordinator/edit/$', 'edit_coordinator', name='edit_coordinator'),
   url(r'^editor/coordinator/new/$', 'new_coordinator', name='new_coordinator'),
@@ -95,7 +94,7 @@ urlpatterns += patterns(
   url(r'^editor/coordinator/gen_xml/$', 'gen_xml_coordinator', name='gen_xml_coordinator'),
   url(r'^editor/coordinator/open_v1/$', 'open_old_coordinator', name='open_old_coordinator'),
   url(r'^editor/coordinator/parameters/$', 'coordinator_parameters', name='coordinator_parameters'),
-  
+
   url(r'^editor/bundle/list/$', 'list_editor_bundles', name='list_editor_bundles'),
   url(r'^editor/bundle/edit/$', 'edit_bundle', name='edit_bundle'),
   url(r'^editor/bundle/new/$', 'new_bundle', name='new_bundle'),

+ 1 - 69
apps/oozie/src/oozie/views/editor2.py

@@ -328,7 +328,6 @@ def workflow_parameters(request):
   response = {'status': -1}
 
   try:
-    #workflow_doc = Document2.objects.get(type='oozie-workflow2', uuid=request.GET.get('uuid'))
     workflow_doc = Document2.objects.get(uuid=request.GET.get('uuid') or request.GET.get('document'))
 
     if workflow_doc.type == 'oozie-workflow2':
@@ -336,7 +335,6 @@ def workflow_parameters(request):
     else:
       wf_doc = WorkflowBuilder().create_workflow(document=workflow_doc, user=request.user, managed=True)
       workflow = Workflow(data=wf_doc.data)
-      print wf_doc.data
       wf_doc.delete()
 
     response['status'] = 0
@@ -347,44 +345,6 @@ def workflow_parameters(request):
   return JsonResponse(response)
 
 
-@check_editor_access_permission
-@check_document_access_permission()
-def refresh_document_parameters(request):
-  response = {'status': -1}
-
-  try:
-    notebook_uuid = request.POST.get('uuid')
-    current_parameters = json.loads(request.POST.get('parameters')) # hive_node['properties']['parameters']
-    
-    #workflow_doc = Document2.objects.get(type='oozie-workflow2', owner=request.user, is_managed=True, dependents__uuid__in=[coord_uuid])
-
-    # Refresh the action parameters of a document action in case the document changed
-#     workflow = Workflow(document=workflow_doc, user=request.user)
-
-#     _data = workflow.get_data()
-#     hive_node = _data['workflow']['nodes'][3]
-#     query_document = Document2.objects.get_by_uuid(user=request.user, uuid=hive_node['properties']['uuid'])
-    query_document = Document2.objects.get_by_uuid(user=request.user, uuid=notebook_uuid)
-    parameters = WorkflowBuilder().get_document_parameters(query_document)
-
-    changed = set([p['value'] for p in parameters]) != set([p['value'] for p in current_parameters])
-
-#     if changed:
-#       hive_node['properties']['parameters'] = parameters
-#       workflow.data = json.dumps(_data)
-
-#       workflow_doc.update_data({'workflow': _data['workflow']})
-#       workflow_doc.save()
-
-    response['status'] = 0
-    response['parameters'] = parameters
-    response['changed'] = changed
-  except Exception, e:
-    response['message'] = str(e)
-
-  return JsonResponse(response)
-
-
 @check_editor_access_permission
 def gen_xml_workflow(request):
   response = {'status': -1}
@@ -498,7 +458,6 @@ def list_editor_coordinators(request):
 @check_document_access_permission()
 def edit_coordinator(request):
   coordinator_id = request.GET.get('coordinator', request.GET.get('uuid'))
-  #scheduled_doc_uuid = request.GET.get('document')
   doc = None
   workflow_uuid = None
 
@@ -531,7 +490,7 @@ def edit_coordinator(request):
   if USE_NEW_EDITOR.get():
     scheduled_uuid = coordinator.data['properties']['workflow'] or coordinator.data['properties']['document']
     if scheduled_uuid:
-      document = Document2.objects.get(uuid=scheduled_uuid) #  or scheduled_doc_uuid
+      document = Document2.objects.get(uuid=scheduled_uuid)
       if not document.can_read(request.user):
         raise PopupException(_('You don\'t have access to the workflow or document of this coordinator.'))
   else:
@@ -621,29 +580,11 @@ def save_coordinator(request):
     coordinator_doc = Document2.objects.create(name=coordinator_data['name'], uuid=coordinator_data['uuid'], type='oozie-coordinator2', owner=request.user, is_managed=coordinator_data.get('isManaged'))
     Document.objects.link(coordinator_doc, owner=coordinator_doc.owner, name=coordinator_doc.name, description=coordinator_doc.description, extra='coordinator2')
 
-# Automatically create the workflow of a scheduled document
-#   document_uuid = request.GET.get('document')
-#   if document_uuid:
-#     # Has already a workflow managing the query for this user?
-#     workflows = Document2.objects.filter(type='oozie-workflow2', owner=request.user, is_managed=True, dependencies__uuid__in=[document_uuid])
-#     if workflows.exists():
-#       workflow_doc = workflows.get()
-#     else:
-#       document = Document2.objects.get_by_uuid(user=request.user, uuid=document_uuid)
-#       workflow_doc = WorkflowBuilder().create_workflow(document=document, user=request.user, managed=True)
-#       if doc:
-#         doc.dependencies.add(workflow_doc)
-#     workflow_uuid = workflow_doc.uuid
-#     coordinator.data['name'] = _('Schedule of %s') % workflow_doc.name
-
   scheduled_id = coordinator_data['properties']['workflow'] or coordinator_data['properties']['document']
   if scheduled_id:
     scheduled_doc = Document2.objects.get(uuid=scheduled_id)
     scheduled_doc.can_read_or_exception(request.user)
     coordinator_doc.dependencies = [scheduled_doc]
-#     scheduled_doc = workflow_doc.dependencies.filter(type__startswith='query-', owner=request.user, is_managed=False)
-#     for action in scheduled_doc.all():
-#       coordinator_doc.dependencies.add(action)
 
   coordinator_doc1 = coordinator_doc.doc.get()
   coordinator_doc.update_data(coordinator_data)
@@ -732,16 +673,7 @@ def submit_coordinator(request, doc_id):
 
 def _submit_coordinator(request, coordinator, mapping):
   try:
-#     if coordinator.data['properties']['workflow']:
-#       wf_doc = Document2.objects.get_by_uuid(user=request.user, uuid=coordinator.data['properties']['workflow'])
-#       wf = Workflow(document=wf_doc)
-#     else:
-#       print 111
-#       document = Document2.objects.get_by_uuid(user=request.user, uuid=coordinator.data['properties']['document'])
-#       wf_doc = WorkflowBuilder().create_workflow(document=document, user=request.user, managed=True)
     wf = coordinator.workflow
-      
-      #wf_doc.delete() or set to History
     wf_dir = Submission(request.user, wf, request.fs, request.jt, mapping, local_tz=coordinator.data['properties']['timezone']).deploy()
 
     properties = {'wf_application_path': request.fs.get_hdfs_path(wf_dir)}

+ 5 - 23
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -1617,7 +1617,6 @@
 
             if (self.coordinatorUuid()) {
              self.saveScheduler();
-             //self.refreshSchedulerParameters();        if (notebook.schedulerViewModel != null) {
              self.schedulerViewModel.coordinator.refreshParameters();
             }
 
@@ -1812,9 +1811,9 @@
         }, function (data) {
           if ($("#schedulerEditor").length > 0) {
             $("#schedulerEditor").html(data.layout);
-            
+
             self.schedulerViewModel = new vm.CoordinatorEditorViewModel(data.coordinator, data.credentials, data.workflows, data.can_edit);
-            
+
             ko.cleanNode($("#schedulerEditor")[0]);
             ko.applyBindings(self.schedulerViewModel, $("#schedulerEditor")[0]);
 
@@ -1826,8 +1825,8 @@
 
             if (_action == 'new') {
               self.coordinatorUuid(UUID());
-              self.schedulerViewModel.coordinator.uuid(self.coordinatorUuid());             
-      		  self.schedulerViewModel.coordinator.properties.document(self.uuid());
+              self.schedulerViewModel.coordinator.uuid(self.coordinatorUuid());
+              self.schedulerViewModel.coordinator.properties.document(self.uuid());
             }
           }
         }).fail(function (xhr) {
@@ -1836,26 +1835,10 @@
       }
     };
 
-    self.refreshSchedulerParameters = function() { // dup of 0/oozie/editor/workflow/parameters/?uuid=uui ?
-      if (self.isBatchable()) {
-        $.post("/oozie/editor/workflow/action/refresh_document_parameters/", {
-          uuid: self.coordinatorUuid()
-        }, function(data) {
-          if (data.status == 0) {
-            if (data.changed) {
-              self.schedulerViewModel.coordinator.refreshParameters();
-            }
-          } else {
-            $(document).trigger("error", data.message);
-          }
-        });
-      }
-    }
-
     self.saveScheduler = function() {
       if (self.isBatchable() && (! self.coordinatorUuid() || self.schedulerViewModel.coordinator.isDirty())) {
         self.schedulerViewModel.coordinator.isManaged(true);
-        self.schedulerViewModel.coordinator.properties.document(self.uuid()); console.log(self.uuid());
+        self.schedulerViewModel.coordinator.properties.document(self.uuid());
         self.schedulerViewModel.save(function(data) {
           self.coordinatorUuid(data.uuid);
         });
@@ -2166,7 +2149,6 @@
         }
 
         if (notebook.isSaved()) {
-            //notebook.loadScheduler(); // load only if schedule id there
           notebook.snippets()[0].currentQueryTab('savedQueries');
           if (notebook.snippets()[0].queries().length === 0) {
             notebook.snippets()[0].fetchQueries(); // Subscribe not updating yet

+ 0 - 3
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -1111,7 +1111,6 @@ ${ hueIcons.symbols() }
         <a data-bind="click: showSubmitPopup">${ _('Start') }</a></br>
         </br>
         <div id="schedulerEditor">
-          ## <div id="schedulerEditor"></div>
         </div>
       <!-- /ko -->
 
@@ -3571,8 +3570,6 @@ ${ hueIcons.symbols() }
         if (viewModel.selectedNotebook().schedulerViewModel == null) {
           viewModel.selectedNotebook().loadScheduler();
         }
-                                                                   
-// huePubSub.publish('render.jqcron');
       });
 
       huePubSub.subscribe('render.jqcron', function(){

+ 1 - 1
desktop/libs/notebook/src/notebook/urls.py

@@ -51,7 +51,7 @@ urlpatterns += patterns('notebook.api',
   url(r'^api/create_session/?$', 'create_session', name='create_session'),
   url(r'^api/close_session/?$', 'close_session', name='close_session'),
   url(r'^api/execute/?$', 'execute', name='execute'),
-  url(r'^api/check_status/?$', 'check_status', name='check_status'),  
+  url(r'^api/check_status/?$', 'check_status', name='check_status'),
   url(r'^api/fetch_result_data/?$', 'fetch_result_data', name='fetch_result_data'),
   url(r'^api/fetch_result_metadata/?$', 'fetch_result_metadata', name='fetch_result_metadata'),
   url(r'^api/fetch_result_size/?$', 'fetch_result_size', name='fetch_result_size'),