ソースを参照

Updated browser with exception handling

Yentl Van Tendeloo 7 年 前
コミット
67aebd9bc1
2 ファイル変更63 行追加19 行削除
  1. 24 7
      classes/window/browser.xml
  2. 39 12
      frontend.py

+ 24 - 7
classes/window/browser.xml

@@ -196,9 +196,6 @@
                 <state id="create_labels" initial="query">
                     <state id="query">
                         <onentry>
-                            <script>
-                                print("QUERY MV")
-                            </script>
                             <raise event="mv_request" scope="broad">
                                 <parameter expr="'model_list'"/>
                                 <parameter expr="[self.current_location if self.current_location == '' else self.current_location[:-1]]"/>
@@ -216,8 +213,20 @@
                                 self.all_results = sorted(result)
                             </script>
                         </transition>
+
+                        <transition event="mv_exception" target=".">
+                            <parameter name="ID"/>
+                            <parameter name="exception_name"/>
+                            <parameter name="description"/>
+                            <raise event="errorlog_log" scope="broad">
+                                <parameter expr="'Could not fetch model list: %s -- %s' % (exception_name, description)"/>
+                            </raise>
+                            <raise event="close_self"/>
+                        </transition>
                     </state>
 
+                    <state id="error"/>
+
                     <state id="add_labels" initial="check_type">
                         <state id="check_type">
                             <onentry>
@@ -251,7 +260,19 @@
                             <transition event="mv_response" cond="len(set([i[0] for i in result]).intersection(set(self.filter_metamodels))) > 0" target="../add_label">
                                 <parameter name="result"/>
                             </transition>
+
+                            <transition event="mv_exception" target="../error">
+                                <parameter name="ID"/>
+                                <parameter name="exception_name"/>
+                                <parameter name="description"/>
+                                <raise event="errorlog_log" scope="broad">
+                                    <parameter expr="'Could not query model types: %s -- %s' % (exception_name, description)"/>
+                                </raise>
+                                <raise event="close_self"/>
+                            </transition>
                         </state>
+
+                        <state id="error"/>
                         
                         <state id="add_label">
                             <onentry>
@@ -307,7 +328,6 @@
 
                 <script>
                     self.to_close = self.labels.values() + [self.button_ok, self.button_back, self.progressbar]
-                    print("Raise result")
                 </script>
             </transition>
 
@@ -339,9 +359,6 @@
         <state id="close">
             <onentry>
                 <raise event="close_window" scope="narrow" target="'parent'"/>
-                <script>
-                    print("CLOSE BROWSER")
-                </script>
             </onentry>
         </state>
     </scxml>

+ 39 - 12
frontend.py

@@ -7171,36 +7171,42 @@ class Browser(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/root/draw_labels/create_labels/query"] = State(16, "/root/draw_labels/create_labels/query", self)
         self.states["/root/draw_labels/create_labels/query"].setEnter(self._root_draw_labels_create_labels_query_enter)
         
+        # state /root/draw_labels/create_labels/error
+        self.states["/root/draw_labels/create_labels/error"] = State(17, "/root/draw_labels/create_labels/error", self)
+        
         # state /root/draw_labels/create_labels/add_labels
-        self.states["/root/draw_labels/create_labels/add_labels"] = State(17, "/root/draw_labels/create_labels/add_labels", self)
+        self.states["/root/draw_labels/create_labels/add_labels"] = State(18, "/root/draw_labels/create_labels/add_labels", self)
         
         # state /root/draw_labels/create_labels/add_labels/check_type
-        self.states["/root/draw_labels/create_labels/add_labels/check_type"] = State(18, "/root/draw_labels/create_labels/add_labels/check_type", self)
+        self.states["/root/draw_labels/create_labels/add_labels/check_type"] = State(19, "/root/draw_labels/create_labels/add_labels/check_type", self)
         self.states["/root/draw_labels/create_labels/add_labels/check_type"].setEnter(self._root_draw_labels_create_labels_add_labels_check_type_enter)
         
         # state /root/draw_labels/create_labels/add_labels/check_types
-        self.states["/root/draw_labels/create_labels/add_labels/check_types"] = State(19, "/root/draw_labels/create_labels/add_labels/check_types", self)
+        self.states["/root/draw_labels/create_labels/add_labels/check_types"] = State(20, "/root/draw_labels/create_labels/add_labels/check_types", self)
         self.states["/root/draw_labels/create_labels/add_labels/check_types"].setEnter(self._root_draw_labels_create_labels_add_labels_check_types_enter)
         
+        # state /root/draw_labels/create_labels/add_labels/error
+        self.states["/root/draw_labels/create_labels/add_labels/error"] = State(21, "/root/draw_labels/create_labels/add_labels/error", self)
+        
         # state /root/draw_labels/create_labels/add_labels/add_label
-        self.states["/root/draw_labels/create_labels/add_labels/add_label"] = State(20, "/root/draw_labels/create_labels/add_labels/add_label", self)
+        self.states["/root/draw_labels/create_labels/add_labels/add_label"] = State(22, "/root/draw_labels/create_labels/add_labels/add_label", self)
         self.states["/root/draw_labels/create_labels/add_labels/add_label"].setEnter(self._root_draw_labels_create_labels_add_labels_add_label_enter)
         
         # state /root/draw_labels/create_labels/add_labels/pack_label
-        self.states["/root/draw_labels/create_labels/add_labels/pack_label"] = State(21, "/root/draw_labels/create_labels/add_labels/pack_label", self)
+        self.states["/root/draw_labels/create_labels/add_labels/pack_label"] = State(23, "/root/draw_labels/create_labels/add_labels/pack_label", self)
         
         # state /root/draw_labels/waiting
-        self.states["/root/draw_labels/waiting"] = State(22, "/root/draw_labels/waiting", self)
+        self.states["/root/draw_labels/waiting"] = State(24, "/root/draw_labels/waiting", self)
         
         # state /root/draw_labels/delete_labels
-        self.states["/root/draw_labels/delete_labels"] = State(23, "/root/draw_labels/delete_labels", self)
+        self.states["/root/draw_labels/delete_labels"] = State(25, "/root/draw_labels/delete_labels", self)
         
         # state /closing
-        self.states["/closing"] = State(24, "/closing", self)
+        self.states["/closing"] = State(26, "/closing", self)
         self.states["/closing"].setEnter(self._closing_enter)
         
         # state /close
-        self.states["/close"] = State(25, "/close", self)
+        self.states["/close"] = State(27, "/close", self)
         self.states["/close"].setEnter(self._close_enter)
         
         # add children
@@ -7224,9 +7230,11 @@ class Browser(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.states["/root/draw_labels"].addChild(self.states["/root/draw_labels/waiting"])
         self.states["/root/draw_labels"].addChild(self.states["/root/draw_labels/delete_labels"])
         self.states["/root/draw_labels/create_labels"].addChild(self.states["/root/draw_labels/create_labels/query"])
+        self.states["/root/draw_labels/create_labels"].addChild(self.states["/root/draw_labels/create_labels/error"])
         self.states["/root/draw_labels/create_labels"].addChild(self.states["/root/draw_labels/create_labels/add_labels"])
         self.states["/root/draw_labels/create_labels/add_labels"].addChild(self.states["/root/draw_labels/create_labels/add_labels/check_type"])
         self.states["/root/draw_labels/create_labels/add_labels"].addChild(self.states["/root/draw_labels/create_labels/add_labels/check_types"])
+        self.states["/root/draw_labels/create_labels/add_labels"].addChild(self.states["/root/draw_labels/create_labels/add_labels/error"])
         self.states["/root/draw_labels/create_labels/add_labels"].addChild(self.states["/root/draw_labels/create_labels/add_labels/add_label"])
         self.states["/root/draw_labels/create_labels/add_labels"].addChild(self.states["/root/draw_labels/create_labels/add_labels/pack_label"])
         self.states[""].fixTree()
@@ -7308,6 +7316,10 @@ class Browser(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _root_draw_labels_create_labels_query_0.setAction(self._root_draw_labels_create_labels_query_0_exec)
         _root_draw_labels_create_labels_query_0.setTrigger(Event("mv_response", None))
         self.states["/root/draw_labels/create_labels/query"].addTransition(_root_draw_labels_create_labels_query_0)
+        _root_draw_labels_create_labels_query_1 = Transition(self, self.states["/root/draw_labels/create_labels/query"], [self.states["/root/draw_labels/create_labels/query"]])
+        _root_draw_labels_create_labels_query_1.setAction(self._root_draw_labels_create_labels_query_1_exec)
+        _root_draw_labels_create_labels_query_1.setTrigger(Event("mv_exception", None))
+        self.states["/root/draw_labels/create_labels/query"].addTransition(_root_draw_labels_create_labels_query_1)
         
         # transition /root/draw_labels/create_labels/add_labels/check_type
         _root_draw_labels_create_labels_add_labels_check_type_0 = Transition(self, self.states["/root/draw_labels/create_labels/add_labels/check_type"], [self.states["/root/draw_labels/waiting"]])
@@ -7337,6 +7349,10 @@ class Browser(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         _root_draw_labels_create_labels_add_labels_check_types_1.setTrigger(Event("mv_response", None))
         _root_draw_labels_create_labels_add_labels_check_types_1.setGuard(self._root_draw_labels_create_labels_add_labels_check_types_1_guard)
         self.states["/root/draw_labels/create_labels/add_labels/check_types"].addTransition(_root_draw_labels_create_labels_add_labels_check_types_1)
+        _root_draw_labels_create_labels_add_labels_check_types_2 = Transition(self, self.states["/root/draw_labels/create_labels/add_labels/check_types"], [self.states["/root/draw_labels/create_labels/add_labels/error"]])
+        _root_draw_labels_create_labels_add_labels_check_types_2.setAction(self._root_draw_labels_create_labels_add_labels_check_types_2_exec)
+        _root_draw_labels_create_labels_add_labels_check_types_2.setTrigger(Event("mv_exception", None))
+        self.states["/root/draw_labels/create_labels/add_labels/check_types"].addTransition(_root_draw_labels_create_labels_add_labels_check_types_2)
         
         # transition /root/draw_labels/create_labels/add_labels/add_label
         _root_draw_labels_create_labels_add_labels_add_label_0 = Transition(self, self.states["/root/draw_labels/create_labels/add_labels/add_label"], [self.states["/root/draw_labels/create_labels/add_labels/pack_label"]])
@@ -7402,7 +7418,6 @@ class Browser(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'progressbar', 'ProgressBar', {'parent': self.button_frame}]))
     
     def _root_draw_labels_create_labels_query_enter(self):
-        print("QUERY MV")
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, ['model_list', [self.current_location if self.current_location == '' else self.current_location[:-1]]])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.progressbar, Event("update_status", None, [0, 'Querying list of models...'])]))
     
@@ -7420,13 +7435,11 @@ class Browser(RuntimeClassBase, tk.Toplevel, SCCDWidget):
     
     def _close_enter(self):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("close_window", None, [])]))
-        print("CLOSE BROWSER")
     
     def _root_0_exec(self, parameters):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("browse_result", None, [self.current_location])]))
         self.raiseInternalEvent(Event("close_self", None, []))
         self.to_close = self.labels.values() + [self.button_ok, self.button_back, self.progressbar]
-        print("Raise result")
     
     def _root_0_guard(self, parameters):
         return len(self.current_location) > 0 and self.current_location[-1] != '/'
@@ -7527,6 +7540,13 @@ class Browser(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         self.labels_to_add = sorted(result)
         self.all_results = sorted(result)
     
+    def _root_draw_labels_create_labels_query_1_exec(self, parameters):
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("errorlog_log", None, ['Could not fetch model list: %s -- %s' % (exception_name, description)])]))
+        self.raiseInternalEvent(Event("close_self", None, []))
+    
     def _root_draw_labels_create_labels_add_labels_check_type_0_guard(self, parameters):
         return len(self.labels_to_add) == 0
     
@@ -7551,6 +7571,13 @@ class Browser(RuntimeClassBase, tk.Toplevel, SCCDWidget):
         result = parameters[0]
         return len(set([i[0] for i in result]).intersection(set(self.filter_metamodels))) > 0
     
+    def _root_draw_labels_create_labels_add_labels_check_types_2_exec(self, parameters):
+        ID = parameters[0]
+        exception_name = parameters[1]
+        description = parameters[2]
+        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("errorlog_log", None, ['Could not query model types: %s -- %s' % (exception_name, description)])]))
+        self.raiseInternalEvent(Event("close_self", None, []))
+    
     def _root_draw_labels_create_labels_add_labels_add_label_0_exec(self, parameters):
         association_name = parameters[0]
         self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))