Browse Source

Fixed callbacks on empty signature

Yentl Van Tendeloo 7 years ago
parent
commit
e86049414b
4 changed files with 52 additions and 32 deletions
  1. 28 7
      unit/test_all.py
  2. 3 6
      wrappers/classes/modelverse.xml
  3. 18 15
      wrappers/modelverse.py
  4. 3 4
      wrappers/modelverse_SCCD.py

+ 28 - 7
unit/test_all.py

@@ -148,6 +148,12 @@ class TestModelverse(unittest.TestCase):
         # Try model list of a model itself
         assert model_list("formalisms/SimpleClassDiagrams") == set([])
 
+        model_add("users/user/test/a", "formalisms/SimpleClassDiagrams")
+        model_add("users/user/test/b", "formalisms/SimpleClassDiagrams")
+        model_add("users/user/test/c", "formalisms/SimpleClassDiagrams")
+        assert model_list("users/user/test") == set(["a", "b", "c"])
+        assert model_list("users/user/test/") == set(["a", "b", "c"])
+
     def test_op_model_list_full(self):
         assert model_list_full("") == set([("formalisms/", "admin", "admin", "221"),
                                            ("models/", "admin", "admin", "221"),
@@ -3805,15 +3811,31 @@ class TestModelverse(unittest.TestCase):
             }
             """)
 
-        print("Finish model add")
-
         # Add a transformation with normal signature
         transformation_add_MANUAL({"MODEL_A": "users/user/test/A"}, {"MODEL_B": "users/user/test/B"}, "users/user/test/c")
-        print("Added manual 1")
+
+        # Add a transformation with normal signature and merged metamodel changes
+        def operation(model):
+            # Check if both are present
+            lst = element_list_nice(model)
+            print(lst)
+
+            # Do minor merge operation
+            instantiate(model, "Association", edge=("MODEL_A/A", "MODEL_B/B"))
+
+        transformation_add_MANUAL({"MODEL_A": "users/user/test/A"}, {"MODEL_B": "users/user/test/B"}, "users/user/test/d", operation)
 
         # Add a transformation with empty signature
-        transformation_add_MANUAL({}, {}, "users/user/test/d")
-        print("Added manual 2")
+        transformation_add_MANUAL({}, {}, "users/user/test/g")
+
+        # Add a transformation with empty signature and a callback
+        try:
+            def operation(model):
+                pass
+            transformation_add_MANUAL({}, {}, "users/user/test/h", operation)
+            self.fail()
+        except CallbackOnEmptySignature:
+            assert "h" not in model_list("users/user/test")
 
         def operation(model):
             # Check if model correctly loaded with names rewritten
@@ -3837,6 +3859,7 @@ class TestModelverse(unittest.TestCase):
             assert {"__id": "MODEL_A/def", "__type": "MODEL_A/A", "name": "2"} in lst
             assert {"__id": "test_value", "__type": "MODEL_B/B", "name": "5"} in lst
 
+        # Do operation with a callback
         transformation_execute_MANUAL("users/user/test/c", {"MODEL_A": "users/user/test/a"}, {"MODEL_B": "users/user/test/a_2"}, operation)
 
         # Check that users/user/test/a was NOT modified, as it was not part of the output signature
@@ -3857,8 +3880,6 @@ class TestModelverse(unittest.TestCase):
         assert len(lst) == 1
         assert {"__id": "test_value", "__type": "B", "name": "5"} in lst
 
-        # Do transformation
-
     """
     def test_op_model_render(self):
     def test_op_transformation_add_MT(self):

+ 3 - 6
wrappers/classes/modelverse.xml

@@ -141,7 +141,7 @@
                             <parameter expr='None'/>
                         </raise>
                         <script>
-                            print("Request: " + str(value))
+                            #print("Request: " + str(value))
                         </script>
                     </transition>
 
@@ -152,14 +152,14 @@
                             <parameter expr='None'/>
                         </raise>
                         <script>
-                            print("Request: " + str(value))
+                            #print("Request: " + str(value))
                         </script>
                     </transition>
 
                     <transition event="HTTP_output" cond="not self.finish_output_thread" target=".">
                         <parameter name="data"/>
                         <script>
-                            print("Got input (%s): %s" % (self.taskname, data))
+                            #print("Got input (%s): %s" % (self.taskname, data))
                             if self.taskname == "task_manager":
                                 self.controller.taskname = self.taskname = json.loads(data)
                             else:
@@ -689,9 +689,6 @@
                             </state>
 
                             <transition cond="self.expect_response('Success')" target="../../../wait_for_action/megamodelling">
-                                <script>
-                                    print("SUCCESS")
-                                </script>
                                 <raise event="result">
                                     <parameter expr="None"/>
                                 </raise>

+ 18 - 15
wrappers/modelverse.py

@@ -317,51 +317,54 @@ def transformation_between(sources, targets):
     return OUTPUT()
 
 def transformation_add_MT(source_metamodels, target_metamodels, operation_name, code, callback=None):
-    INPUT("transformation_add_MT", [source_metamodels, target_metamodels, operation_name, code, True])
 
     if len(source_metamodels) + len(target_metamodels) == 0:
         if callback is not None:
             raise CallbackOnEmptySignature()
-        return OUTPUT()
-    else:
-        model = OUTPUT()
 
+    INPUT("transformation_add_MT", [source_metamodels, target_metamodels, operation_name, code, True])
+    model = OUTPUT()
+
+    if model is None:
+        return None
+    else:
         if callback is not None:
             __invoke(callback, model)
         controller.addInput(Event("data_input", "action_in", [None]))
-
         return OUTPUT()
 
 def transformation_add_AL(source_metamodels, target_metamodels, operation_name, code, callback=None):
-    INPUT("transformation_add_AL", [source_metamodels, target_metamodels, operation_name, code, True])
 
     if len(source_metamodels) + len(target_metamodels) == 0:
         if callback is not None:
             raise CallbackOnEmptySignature()
-        return OUTPUT()
-    else:
-        model = OUTPUT()
 
+    INPUT("transformation_add_AL", [source_metamodels, target_metamodels, operation_name, code, True])
+    model = OUTPUT()
+
+    if model is None:
+        return None
+    else:
         if callback is not None:
             __invoke(callback, model)
         controller.addInput(Event("data_input", "action_in", [None]))
-
         return OUTPUT()
 
 def transformation_add_MANUAL(source_metamodels, target_metamodels, operation_name, callback=None):
-    INPUT("transformation_add_MANUAL", [source_metamodels, target_metamodels, operation_name, True])
 
     if len(source_metamodels) + len(target_metamodels) == 0:
         if callback is not None:
             raise CallbackOnEmptySignature()
-        return OUTPUT()
-    else:
-        model = OUTPUT()
 
+    INPUT("transformation_add_MANUAL", [source_metamodels, target_metamodels, operation_name, True])
+    model = OUTPUT()
+
+    if model is None:
+        return None
+    else:
         if callback is not None:
             __invoke(callback, model)
         controller.addInput(Event("data_input", "action_in", [None]))
-
         return OUTPUT()
 
 def __transformation_execute(operation_name, input_models_dict, output_models_dict, statechart, tracability_model, fetch_output):

+ 3 - 4
wrappers/modelverse_SCCD.py

@@ -2461,7 +2461,6 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response_partial('', pop=False)
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_0_exec(self, parameters):
-        print("SUCCESS")
         self.raiseInternalEvent(Event("result", None, [None]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_0_guard(self, parameters):
@@ -2648,7 +2647,7 @@ class Modelverse(RuntimeClassBase):
     def _initialized_http_mapper_init_0_exec(self, parameters):
         value = parameters[0]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[0], Event("HTTP_input", None, [urlencode({"op": "set_input", "data": json.dumps(value), "taskname": self.taskname}), None])]))
-        print("Request: " + str(value))
+        #print("Request: " + str(value))
     
     def _initialized_http_mapper_init_0_guard(self, parameters):
         value = parameters[0]
@@ -2657,7 +2656,7 @@ class Modelverse(RuntimeClassBase):
     def _initialized_http_mapper_init_1_exec(self, parameters):
         value = parameters[0]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[0], Event("HTTP_input", None, [urlencode({"op": "set_input", "value": json.dumps(value), "taskname": self.taskname}), None])]))
-        print("Request: " + str(value))
+        #print("Request: " + str(value))
     
     def _initialized_http_mapper_init_1_guard(self, parameters):
         value = parameters[0]
@@ -2665,7 +2664,7 @@ class Modelverse(RuntimeClassBase):
     
     def _initialized_http_mapper_init_2_exec(self, parameters):
         data = parameters[0]
-        print("Got input (%s): %s" % (self.taskname, data))
+        #print("Got input (%s): %s" % (self.taskname, data))
         if self.taskname == "task_manager":
             self.controller.taskname = self.taskname = json.loads(data)
         else: