Explorar o código

HUE-1656 [oozie] Make data fully integrated in the API part 2

Romain Rigaux %!s(int64=12) %!d(string=hai) anos
pai
achega
6f672a2

+ 14 - 15
apps/oozie/src/oozie/models.py

@@ -124,7 +124,7 @@ class Job(models.Model):
   is_trashed = models.BooleanField(default=False, db_index=True, verbose_name=_t('Is trashed'), blank=True,# Deprecated
                                    help_text=_t('If this job is trashed.'))
   doc = generic.GenericRelation(Document, related_name='oozie_doc')
-  data = models.TextField(blank=True, default=json.dumps({}))
+  data = models.TextField(blank=True, default=json.dumps({}))  # e.g. data=json.dump({'sla': [python data], 'global': [python data], 'credentials': [python data]})
 
   objects = JobManager()
   unique_together = ('owner', 'name')
@@ -220,26 +220,25 @@ class Job(models.Model):
     return user.is_superuser or self.owner == user
 
   @property
-  def data_dict(self):
-    return json.loads(self.data)
-
-  @property
-  def sla(self):
-    if not self.data: # backward compatible
-      self.data = json.dumps({})
-    return json.loads(self.data).get('sla', copy.deepcopy(DEFAULT_SLA))
+  def data_dict(self): 
+    data_python = json.loads(self.data)
+    if 'sla' not in data_python: # backward compatibility
+      data_python['sla'] = copy.deepcopy(DEFAULT_SLA)
+    return data_python 
 
   @property
   def data_js_escaped(self):
     return json.dumps(self.data_dict, cls=JSONEncoderForHTML)
 
+  @property
+  def sla(self):
+    return self.data_dict['sla']
+
   @sla.setter
-  def sla(self, sla):
-    if not self.data: # backward compatible
-      self.data = json.dumps({})    
-    data_json = json.loads(self.data)
-    data_json['sla'] = sla
-    self.data = json.dumps(data_json) #data=json.dump({'sla': [python data], 'global': [python data], 'credentials': [python data]})
+  def sla(self, sla): 
+    data_ = self.data_dict
+    data_['sla'] = sla
+    self.data = json.dumps(data_)
 
   @property
   def sla_enabled(self):

+ 6 - 6
apps/oozie/src/oozie/views/api.py

@@ -205,8 +205,8 @@ def _update_workflow_nodes_json(workflow, json_nodes, id_map, user):
     id_map[str(json_node['id'])] = node.id
 
     for key in json_node:
-      if key == 'sla':
-        node.sla = json_node[key]
+      if key == 'data':
+        node.data = json.dumps(json_node[key])
       elif key not in ('node_ptr', 'child_nodes', 'workflow', 'id', 'sub_workflow'):
         setattr(node, key, format_field_value(key, json_node[key]))
 
@@ -228,11 +228,11 @@ def _update_workflow_nodes_json(workflow, json_nodes, id_map, user):
 
 def _update_workflow_json(json_workflow):
   workflow = Workflow.objects.get(id=json_workflow['id'])
-
+  print json_workflow
   for key in json_workflow:
-    if key == 'sla':
-      workflow.sla = json_workflow['sla']
-    elif key not in ('nodes', 'start', 'end', 'job_ptr', 'owner', 'data'):
+    if key == 'data':
+      workflow.data = json.dumps(json_workflow['data'])
+    elif key not in ('nodes', 'start', 'end', 'job_ptr', 'owner'):
       setattr(workflow, key, json_workflow[key])
 
   workflow.save()

+ 2 - 1
apps/oozie/static/js/workflow.js

@@ -540,6 +540,7 @@ var WorkflowModule = function($, NodeModelChooser, Node, ForkNode, DecisionNode,
                 } catch (error){
                   data = value;
                 }
+                alert(JSON.stringify(data));
                 updateData(self[key], data);
               break;
 
@@ -599,7 +600,7 @@ var WorkflowModule = function($, NodeModelChooser, Node, ForkNode, DecisionNode,
         // Create object with members from the actual model to address JSON.stringify bug
         // JSON.stringify does not pick up members specified in prototype prior to object creation.
         var model = {};
-        for (var key in node.model) {
+        for (var key in node.model) {  //if (key =='data') {alert(node.model[key])};
           model[key] = node.model[key];
         }
         nodes.push(model);