Browse Source

Handle some exceptions

Yentl Van Tendeloo 7 years ago
parent
commit
ff0b3d223e
2 changed files with 149 additions and 12 deletions
  1. 65 1
      classes/canvas/canvas_element.xml
  2. 84 11
      frontend.py

+ 65 - 1
classes/canvas/canvas_element.xml

@@ -102,6 +102,11 @@
                     </onentry>
 
                     <transition event="mv_response" target="../y"/>
+                    <transition event="mv_exception" target="../../../main">
+                        <script>
+                            print("Could not update X attribute")
+                        </script>
+                    </transition>
                 </state>
 
                 <state id="y">
@@ -113,6 +118,11 @@
                     </onentry>
 
                     <transition event="mv_response" target="../../../main"/>
+                    <transition event="mv_exception" target="../../../main">
+                        <script>
+                            print("Could not update Y attribute")
+                        </script>
+                    </transition>
                 </state>
             </state>
         </state>
@@ -189,7 +199,13 @@
                 </script>
             </onentry>
 
-            <transition event="mv_response" target="../main">
+            <transition event="mv_response" target="../main"/>
+            <transition event="mv_exception" target="../main">
+                <parameter name="exception_name"/>
+                <parameter name="description"/>
+                <script>
+                    print("Could not remove element!")
+                </script>
             </transition>
         </state>
 
@@ -226,6 +242,14 @@
                     </raise>
                 </onentry>
 
+                <transition event="mv_exception" target="../../main">
+                    <parameter name="exception_name"/>
+                    <parameter name="description"/>
+                    <script>
+                        print("Could not read attributes of element!")
+                    </script>
+                </transition>
+
                 <transition event="mv_response" target="../translate_AL">
                     <parameter name="result"/>
                     <script>
@@ -251,6 +275,14 @@
                 </state>
 
                 <state id="process">
+                    <transition event="mv_exception" target="../../../main">
+                        <parameter name="exception_name"/>
+                        <parameter name="description"/>
+                        <script>
+                            print("Could not read AL text of element!")
+                        </script>
+                    </transition>
+
                     <transition event="mv_response" target="../check">
                         <parameter name="result"/>
                         <script>
@@ -333,6 +365,16 @@
 
                 <transition cond="self.remaining_responses == 0" target="../mark_dirty"/>
 
+                <transition event="mv_exception" target=".">
+                    <parameter name="exception_name"/>
+                    <parameter name="description"/>
+                    <script>
+                        print("Got exception: " + str(exception_name))
+                        print("Description: " + str(description))
+                        self.remaining_responses -= 1
+                    </script>
+                </transition>
+
                 <transition event="mv_response" target=".">
                     <script>
                         self.remaining_responses -= 1
@@ -358,6 +400,14 @@
                     <transition event="mv_response" target="../../../main">
                         <raise event="minimal_rerender_model" scope="narrow" target="'parent/parent'"/>
                     </transition>
+                    <transition event="mv_exception" target="../../../main">
+                        <parameter name="exception_name"/>
+                        <parameter name="description"/>
+                        <script>
+                            print("Could not read assign attribute!")
+                        </script>
+                    </transition>
+
                 </state>
             </state>
         </state>
@@ -385,6 +435,13 @@
                 </onentry>
 
                 <transition event="mv_response" target="../y"/>
+                <transition event="mv_exception" target="../../main">
+                    <parameter name="exception_name"/>
+                    <parameter name="description"/>
+                    <script>
+                        print("Could not update X attribute!")
+                    </script>
+                </transition>
             </state>
 
             <state id="y">
@@ -396,6 +453,13 @@
                 </onentry>
 
                 <transition event="mv_response" target="../../main"/>
+                <transition event="mv_exception" target="../../main">
+                    <parameter name="exception_name"/>
+                    <parameter name="description"/>
+                    <script>
+                        print("Could not update Y attribute!")
+                    </script>
+                </transition>
             </state>
         </state>
     </scxml>

+ 84 - 11
frontend.py

@@ -14454,11 +14454,19 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         _init_update_mv_x_0 = Transition(self, self.states["/init/update_mv/x"], [self.states["/init/update_mv/y"]])
         _init_update_mv_x_0.setTrigger(Event("mv_response", None))
         self.states["/init/update_mv/x"].addTransition(_init_update_mv_x_0)
+        _init_update_mv_x_1 = Transition(self, self.states["/init/update_mv/x"], [self.states["/main"]])
+        _init_update_mv_x_1.setAction(self._init_update_mv_x_1_exec)
+        _init_update_mv_x_1.setTrigger(Event("mv_exception", None))
+        self.states["/init/update_mv/x"].addTransition(_init_update_mv_x_1)
         
         # transition /init/update_mv/y
         _init_update_mv_y_0 = Transition(self, self.states["/init/update_mv/y"], [self.states["/main"]])
         _init_update_mv_y_0.setTrigger(Event("mv_response", None))
         self.states["/init/update_mv/y"].addTransition(_init_update_mv_y_0)
+        _init_update_mv_y_1 = Transition(self, self.states["/init/update_mv/y"], [self.states["/main"]])
+        _init_update_mv_y_1.setAction(self._init_update_mv_y_1_exec)
+        _init_update_mv_y_1.setTrigger(Event("mv_exception", None))
+        self.states["/init/update_mv/y"].addTransition(_init_update_mv_y_1)
         
         # transition /main
         _main_0 = Transition(self, self.states["/main"], [self.states["/main"]])
@@ -14493,6 +14501,10 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         _remove_element_0 = Transition(self, self.states["/remove_element"], [self.states["/main"]])
         _remove_element_0.setTrigger(Event("mv_response", None))
         self.states["/remove_element"].addTransition(_remove_element_0)
+        _remove_element_1 = Transition(self, self.states["/remove_element"], [self.states["/main"]])
+        _remove_element_1.setAction(self._remove_element_1_exec)
+        _remove_element_1.setTrigger(Event("mv_exception", None))
+        self.states["/remove_element"].addTransition(_remove_element_1)
         
         # transition /dragging
         _dragging_0 = Transition(self, self.states["/dragging"], [self.states["/dragging"]])
@@ -14507,10 +14519,14 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         self.states["/dragging"].addTransition(_dragging_1)
         
         # transition /update_attrs/query
-        _update_attrs_query_0 = Transition(self, self.states["/update_attrs/query"], [self.states["/update_attrs/translate_AL"]])
+        _update_attrs_query_0 = Transition(self, self.states["/update_attrs/query"], [self.states["/main"]])
         _update_attrs_query_0.setAction(self._update_attrs_query_0_exec)
-        _update_attrs_query_0.setTrigger(Event("mv_response", None))
+        _update_attrs_query_0.setTrigger(Event("mv_exception", None))
         self.states["/update_attrs/query"].addTransition(_update_attrs_query_0)
+        _update_attrs_query_1 = Transition(self, self.states["/update_attrs/query"], [self.states["/update_attrs/translate_AL"]])
+        _update_attrs_query_1.setAction(self._update_attrs_query_1_exec)
+        _update_attrs_query_1.setTrigger(Event("mv_response", None))
+        self.states["/update_attrs/query"].addTransition(_update_attrs_query_1)
         
         # transition /update_attrs/translate_AL/check
         _update_attrs_translate_AL_check_0 = Transition(self, self.states["/update_attrs/translate_AL/check"], [self.states["/update_attrs/prompt"]])
@@ -14524,10 +14540,14 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         self.states["/update_attrs/translate_AL/check"].addTransition(_update_attrs_translate_AL_check_1)
         
         # transition /update_attrs/translate_AL/process
-        _update_attrs_translate_AL_process_0 = Transition(self, self.states["/update_attrs/translate_AL/process"], [self.states["/update_attrs/translate_AL/check"]])
+        _update_attrs_translate_AL_process_0 = Transition(self, self.states["/update_attrs/translate_AL/process"], [self.states["/main"]])
         _update_attrs_translate_AL_process_0.setAction(self._update_attrs_translate_AL_process_0_exec)
-        _update_attrs_translate_AL_process_0.setTrigger(Event("mv_response", None))
+        _update_attrs_translate_AL_process_0.setTrigger(Event("mv_exception", None))
         self.states["/update_attrs/translate_AL/process"].addTransition(_update_attrs_translate_AL_process_0)
+        _update_attrs_translate_AL_process_1 = Transition(self, self.states["/update_attrs/translate_AL/process"], [self.states["/update_attrs/translate_AL/check"]])
+        _update_attrs_translate_AL_process_1.setAction(self._update_attrs_translate_AL_process_1_exec)
+        _update_attrs_translate_AL_process_1.setTrigger(Event("mv_response", None))
+        self.states["/update_attrs/translate_AL/process"].addTransition(_update_attrs_translate_AL_process_1)
         
         # transition /update_attrs/prompt
         _update_attrs_prompt_0 = Transition(self, self.states["/update_attrs/prompt"], [self.states["/update_attrs/wait_for_results"]])
@@ -14563,8 +14583,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         self.states["/update_attrs/process_results"].addTransition(_update_attrs_process_results_1)
         _update_attrs_process_results_2 = Transition(self, self.states["/update_attrs/process_results"], [self.states["/update_attrs/process_results"]])
         _update_attrs_process_results_2.setAction(self._update_attrs_process_results_2_exec)
-        _update_attrs_process_results_2.setTrigger(Event("mv_response", None))
+        _update_attrs_process_results_2.setTrigger(Event("mv_exception", None))
         self.states["/update_attrs/process_results"].addTransition(_update_attrs_process_results_2)
+        _update_attrs_process_results_3 = Transition(self, self.states["/update_attrs/process_results"], [self.states["/update_attrs/process_results"]])
+        _update_attrs_process_results_3.setAction(self._update_attrs_process_results_3_exec)
+        _update_attrs_process_results_3.setTrigger(Event("mv_response", None))
+        self.states["/update_attrs/process_results"].addTransition(_update_attrs_process_results_3)
         
         # transition /update_attrs/mark_dirty/check
         _update_attrs_mark_dirty_check_0 = Transition(self, self.states["/update_attrs/mark_dirty/check"], [self.states["/update_attrs/mark_dirty/do"]])
@@ -14582,6 +14606,10 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         _update_attrs_mark_dirty_do_0.setAction(self._update_attrs_mark_dirty_do_0_exec)
         _update_attrs_mark_dirty_do_0.setTrigger(Event("mv_response", None))
         self.states["/update_attrs/mark_dirty/do"].addTransition(_update_attrs_mark_dirty_do_0)
+        _update_attrs_mark_dirty_do_1 = Transition(self, self.states["/update_attrs/mark_dirty/do"], [self.states["/main"]])
+        _update_attrs_mark_dirty_do_1.setAction(self._update_attrs_mark_dirty_do_1_exec)
+        _update_attrs_mark_dirty_do_1.setTrigger(Event("mv_exception", None))
+        self.states["/update_attrs/mark_dirty/do"].addTransition(_update_attrs_mark_dirty_do_1)
         
         # transition /update_mv/check
         _update_mv_check_0 = Transition(self, self.states["/update_mv/check"], [self.states["/update_mv/x"]])
@@ -14598,11 +14626,19 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         _update_mv_x_0 = Transition(self, self.states["/update_mv/x"], [self.states["/update_mv/y"]])
         _update_mv_x_0.setTrigger(Event("mv_response", None))
         self.states["/update_mv/x"].addTransition(_update_mv_x_0)
+        _update_mv_x_1 = Transition(self, self.states["/update_mv/x"], [self.states["/main"]])
+        _update_mv_x_1.setAction(self._update_mv_x_1_exec)
+        _update_mv_x_1.setTrigger(Event("mv_exception", None))
+        self.states["/update_mv/x"].addTransition(_update_mv_x_1)
         
         # transition /update_mv/y
         _update_mv_y_0 = Transition(self, self.states["/update_mv/y"], [self.states["/main"]])
         _update_mv_y_0.setTrigger(Event("mv_response", None))
         self.states["/update_mv/y"].addTransition(_update_mv_y_0)
+        _update_mv_y_1 = Transition(self, self.states["/update_mv/y"], [self.states["/main"]])
+        _update_mv_y_1.setAction(self._update_mv_y_1_exec)
+        _update_mv_y_1.setTrigger(Event("mv_exception", None))
+        self.states["/update_mv/y"].addTransition(_update_mv_y_1)
     
     def _init_exit(self):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("canvas_element_ready", None, [])]))
@@ -14661,6 +14697,12 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _init_update_mv_check_1_guard(self, parameters):
         return not current_rendered_model
     
+    def _init_update_mv_x_1_exec(self, parameters):
+        print("Could not update X attribute")
+    
+    def _init_update_mv_y_1_exec(self, parameters):
+        print("Could not update Y attribute")
+    
     def _main_0_exec(self, parameters):
         element = parameters[0]
         elem_x = self.coordinates[0] + element["x"]
@@ -14712,6 +14754,11 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         ID = parameters[0]
         return id(self) == ID and control_pressed
     
+    def _remove_element_1_exec(self, parameters):
+        exception_name = parameters[0]
+        description = parameters[1]
+        print("Could not remove element!")
+    
     def _dragging_0_exec(self, parameters):
         ID = parameters[0]
         new_x = self.coordinates[0] + (self.last_x - self.original_coords[0])
@@ -14734,25 +14781,32 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         return id(self) == ID
     
     def _update_attrs_query_0_exec(self, parameters):
+        exception_name = parameters[0]
+        description = parameters[1]
+        print("Could not read attributes of element!")
+    
+    def _update_attrs_query_1_exec(self, parameters):
         result = parameters[0]
-        print("RESULT: " + str(result))
         self.prev_results = {k: (json.dumps(v) if v is not None else '') for k, v in result.items() if not isinstance(v, dict)}
         self.al = {k: v for k, v in result.items() if isinstance(v, dict)}
         self.al_keys = self.al.keys()
-        print("AL KEYS: " + str(self.al_keys))
     
     def _update_attrs_translate_AL_check_0_guard(self, parameters):
         return not self.al
     
     def _update_attrs_translate_AL_check_1_exec(self, parameters):
         self.attr_name, self.attr_dict = self.al.popitem()
-        print("Request...")
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['AL_text', [self.attr_dict['AL']]])]))
     
     def _update_attrs_translate_AL_check_1_guard(self, parameters):
         return self.al
     
     def _update_attrs_translate_AL_process_0_exec(self, parameters):
+        exception_name = parameters[0]
+        description = parameters[1]
+        print("Could not read AL text of element!")
+    
+    def _update_attrs_translate_AL_process_1_exec(self, parameters):
         result = parameters[0]
         self.prev_results[self.attr_name] = result.rstrip() + "\n"
     
@@ -14786,13 +14840,10 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     
     def _update_attrs_process_results_0_exec(self, parameters):
         k, v = self.diff_results.popitem()
-        print("KEY: " + str(k))
         if k in self.al_keys:
-            print("CODE")
             op = "attr_assign_code"
             params = [current_model, self.as_element, k, v]
         else:
-            print("VALUE")
             op = "attr_assign"
             params = [current_model, self.as_element, k, json.loads(v) if v != '' else 'null']
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, [op, params])]))
@@ -14804,6 +14855,13 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
         return self.remaining_responses == 0
     
     def _update_attrs_process_results_2_exec(self, parameters):
+        exception_name = parameters[0]
+        description = parameters[1]
+        print("Got exception: " + str(exception_name))
+        print("Description: " + str(description))
+        self.remaining_responses -= 1
+    
+    def _update_attrs_process_results_3_exec(self, parameters):
         self.remaining_responses -= 1
     
     def _update_attrs_mark_dirty_check_0_guard(self, parameters):
@@ -14818,6 +14876,11 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _update_attrs_mark_dirty_do_0_exec(self, parameters):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/parent', Event("minimal_rerender_model", None, [])]))
     
+    def _update_attrs_mark_dirty_do_1_exec(self, parameters):
+        exception_name = parameters[0]
+        description = parameters[1]
+        print("Could not read assign attribute!")
+    
     def _update_mv_check_0_guard(self, parameters):
         return current_rendered_model
     
@@ -14827,6 +14890,16 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     def _update_mv_check_1_guard(self, parameters):
         return not current_rendered_model
     
+    def _update_mv_x_1_exec(self, parameters):
+        exception_name = parameters[0]
+        description = parameters[1]
+        print("Could not update X attribute!")
+    
+    def _update_mv_y_1_exec(self, parameters):
+        exception_name = parameters[0]
+        description = parameters[1]
+        print("Could not update Y attribute!")
+    
     def initializeStatechart(self):
         # enter default state
         self.default_targets = self.states["/init"].getEffectiveTargetStates()