Forráskód Böngészése

Handle attribute assignment that is unknown

Yentl Van Tendeloo 7 éve
szülő
commit
6df7e60271
2 módosított fájl, 40 hozzáadás és 4 törlés
  1. 20 2
      classes/canvas/canvas_element.xml
  2. 20 2
      frontend.py

+ 20 - 2
classes/canvas/canvas_element.xml

@@ -253,7 +253,16 @@
                 <transition event="mv_response" target="../translate_AL">
                     <parameter name="result"/>
                     <script>
-                        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.prev_results = {}
+                        for k, v in result.items():
+                            if not isinstance(v, dict):
+                                if v is not None:
+                                    try:
+                                        self.prev_results[k] = json.dumps(v)
+                                    except:
+                                        self.prev_results[k] = "!! ERROR -- cannot decode attribute !!"
+                                else:
+                                    self.prev_results[k] = ""
                         self.al = {k: v for k, v in result.items() if isinstance(v, dict)}
                         self.al_keys = self.al.keys()
                     </script>
@@ -355,7 +364,16 @@
                             params = [current_model, self.as_element, k, v]
                         else:
                             op = "attr_assign"
-                            params = [current_model, self.as_element, k, json.loads(v) if v != '' else 'null']
+                            if v != "":
+                                try:
+                                    v = json.loads(v)
+                                except:
+                                    print("WARNING: Could not decode attr value as JSON: " + v)
+                                    print("Attempting to send as string!")
+                                    v = str(v)
+                            else:
+                                v = "null"
+                            params = [current_model, self.as_element, k, v]
                     </script>
                     <raise event="mv_request" scope="broad">
                         <parameter expr="op"/>

+ 20 - 2
frontend.py

@@ -14787,7 +14787,16 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
     
     def _update_attrs_query_1_exec(self, parameters):
         result = parameters[0]
-        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.prev_results = {}
+        for k, v in result.items():
+            if not isinstance(v, dict):
+                if v is not None:
+                    try:
+                        self.prev_results[k] = json.dumps(v)
+                    except:
+                        self.prev_results[k] = "!! ERROR -- cannot decode attribute !!"
+                else:
+                    self.prev_results[k] = ""
         self.al = {k: v for k, v in result.items() if isinstance(v, dict)}
         self.al_keys = self.al.keys()
     
@@ -14845,7 +14854,16 @@ class CanvasElement(RuntimeClassBase, SCCDWidget):
             params = [current_model, self.as_element, k, v]
         else:
             op = "attr_assign"
-            params = [current_model, self.as_element, k, json.loads(v) if v != '' else 'null']
+            if v != "":
+                try:
+                    v = json.loads(v)
+                except:
+                    print("WARNING: Could not decode attr value as JSON: " + v)
+                    print("Attempting to send as string!")
+                    v = str(v)
+            else:
+                v = "null"
+            params = [current_model, self.as_element, k, v]
         self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("mv_request", None, [op, params])]))
     
     def _update_attrs_process_results_0_guard(self, parameters):