Browse Source

More fixes

Yentl Van Tendeloo 8 years ago
parent
commit
46eda2e157

+ 10 - 21
kernel/mvk_server/classes/executor.xml

@@ -64,8 +64,7 @@
                         <parameter name="params"/>
                         <parameter name="request_id"/>
                         <script>
-                            print 'got execute event'
-                            self.request_queue.append(("/" + returnpath, username, operation, params, request_id))
+                            self.request_queue.append((("/" + returnpath) if returnpath is not None else None, username, operation, params, request_id))
                         </script>
                     </transition>
                 </state>
@@ -73,21 +72,19 @@
 
             <state id="execute" initial="idle">
                 <state id="idle">
-                    <onentry>
-                        <script>
-                            print 'in idle'
-                        </script>
-                    </onentry>
                     <transition cond="self.request_queue" target="../execution"/>
                 </state>
 
                 <state id="execution">
                     <onentry>
                         <script>
-                            _, username, operation, params, _ = self.request_queue[0]
+                            self.mvk.returnvalue = None
+                            self.mvk.success = True
+                            self.first = True
+
+                            self.returnpath, username, operation, params, self.request_id = self.request_queue.pop(0)
                             reply = None
                             commands = []
-                            print("Execute operation: " + operation)
                             while 1:
                                 commands = self.mvk.execute_yields(username, operation, params, reply)
                                 if commands is None:
@@ -96,22 +93,14 @@
                         </script>
                     </onentry>
 
-                    <transition target="../idle">
-                        <script>
-                            returnpath, _, _, _, request_id = self.request_queue.pop(0)
-                        </script>
-                        <raise event="executed" scope="narrow" target="'parent' + returnpath">
+                    <transition cond="self.returnpath is not None" target="../idle">
+                        <raise event="executed" scope="narrow" target="'parent' + self.returnpath">
                             <parameter expr="self.mvk.returnvalue"/>
                             <parameter expr="self.mvk.success"/>
-                            <parameter expr="request_id"/>
+                            <parameter expr="self.request_id"/>
                         </raise>
-                        <script>
-                            print("Executed action --> " + str(self.mvk.returnvalue))
-                            self.mvk.returnvalue = None
-                            self.mvk.success = True
-                            self.first = True
-                        </script>
                     </transition>
+                    <transition cond="self.returnpath is None" target="../idle"/>
                 </state>
             </state>
         </parallel>

+ 0 - 77
kernel/mvk_server/classes/local_mvs.xml

@@ -1,77 +0,0 @@
-<class name="LocalMvS">
-    <relationships>
-        <association name="parent" class="MvKController" min="1" max="1"/>
-    </relationships>
-    <constructor>
-        <parameter name="params"/>
-        <body>
-            <![CDATA[
-            self.queue = []
-            self.destinations = []
-            import sys
-            sys.path.append("../../state")
-            from modelverse_state.main import ModelverseState
-            self.mvs = ModelverseState("../../bootstrap/bootstrap.m.gz")
-            self.mvs_operations = {
-               "CN": self.mvs.create_node,
-               "CE": self.mvs.create_edge,
-               "CNV": self.mvs.create_nodevalue,
-               "CD": self.mvs.create_dict,
-
-               "RV": self.mvs.read_value,
-               "RO": self.mvs.read_outgoing,
-               "RI": self.mvs.read_incoming,
-               "RE": self.mvs.read_edge,
-               "RD": self.mvs.read_dict,
-               "RDN": self.mvs.read_dict_node,
-               "RDNE": self.mvs.read_dict_node_edge,
-               "RDE": self.mvs.read_dict_edge,
-               "RRD": self.mvs.read_reverse_dict,
-               "RR": self.mvs.read_root,
-               "RDK": self.mvs.read_dict_keys,
-
-               "DE": self.mvs.delete_edge,
-               "DN": self.mvs.delete_node,
-
-               "DUMP": self.mvs.dump_modelverse,
-            }
-            ]]>
-        </body>
-    </constructor>
-
-    <method name="process_message">
-        <parameter name="operation_name"/>
-        <parameter name="parameters"/>
-        <body>
-            <![CDATA[
-            op = self.mvs_operations[operation_name]
-            return op(*parameters)
-            ]]>
-        </body>
-    </method>
-
-    <scxml initial="init">
-        <state id="init">
-            <transition target="../running">
-                <raise event="http_client_ready" scope="narrow" target="'parent'"/>
-            </transition>
-        </state>
-
-        <state id="running">
-            <transition event="HTTP_input" target=".">
-                <parameter name="data"/>
-                <parameter name="destination"/>
-                <script>
-                    decoded_data = json.loads(data.split("=",1)[1])
-                    result = []
-                    for command, params in decoded_data:
-                        result.append(self.process_message(command, params))
-                    data = {"data": json.dumps(result)}
-                </script>
-                <raise event="HTTP_output" scope="narrow" target="destination">
-                    <parameter expr="data"/>
-                </raise>
-            </transition>
-        </state>
-    </scxml>
-</class>

+ 5 - 6
kernel/mvk_server/classes/mvkcontroller.xml

@@ -85,8 +85,11 @@
                                         value = [json.loads(data["value"])]
                                     else:
                                         value = json.loads(data["data"])
-                                    args = value
-                                self.input_queue.append((source, data["op"], args, data["username"]))
+                                    for v in value[:-1]:
+                                        self.input_queue.append((None, data["op"], [v], data["username"]))
+                                    self.input_queue.append((source, data["op"], [value[-1]], data["username"]))
+                                else:
+                                    self.input_queue.append((source, data["op"], args, data["username"]))
                             except ValueError:
                                 print("Error when deserializing request: " + str(data))
                                 raise
@@ -145,8 +148,6 @@
                     <transition event="raw_exec_reply" target="../retrieve_users">
                         <parameter name="data"/>
                         <script>
-                            print("Root: " + str(self.root))
-                            print("Users: " + str(data))
                             self.users = data[0][0]
                         </script>
                     </transition>
@@ -167,7 +168,6 @@
                         <parameter name="data"/>
                         <script>
                             self.users = [v[0] for v in data if v[0] not in self.user_statecharts]
-                            print("EXPANDED Users: " + str(data))
                         </script>
                     </transition>
                 </state>
@@ -193,7 +193,6 @@
                             <parameter expr="instancename"/>
                         </raise>
                         <script>
-                            print self.users[0]
                             self.user_statecharts[self.users[0]] = instancename
                             # Repush all this user's messages in the input queue
                             self.input_queue.extend(self.user_queue.pop(self.users[0], []))

+ 2 - 1
kernel/mvk_server/classes/socket.xml

@@ -81,7 +81,8 @@
                         <parameter name="data"/>
                         <script>
                             #post_data = "&amp;".join(["%s=%s" % (urllib.quote(k), urllib.quote(v)) for k, v in data.iteritems()])
-                            post_data = "&amp;".join(["%s=%s" % (k, v) for k, v in data.iteritems()])
+                            #post_data = "&amp;".join(["%s=%s" % (k, v) for k, v in data.iteritems()])
+                            post_data = data
                             self.send_data += "HTTP/1.0 200 OK\r\n"
                             self.send_data += "Content-Length: %s\r\n" % len(post_data)
                             self.send_data += "Content-Type: %s; charset=UTF-8\r\n" % "text/plain"

+ 5 - 7
kernel/mvk_server/classes/user_statechart.xml

@@ -7,7 +7,6 @@
         <body>
             <![CDATA[
             self.username = username
-            print("INIT " + self.username)
 
             self.output_queue = []
             self.source_execution = None
@@ -41,7 +40,6 @@
                             <parameter expr="self.request_id"/>
                         </raise>
                         <script>
-                            print("Raise execute event!")
                             self.outstanding_execution = self.request_id
                             self.request_id += 1
                         </script>
@@ -77,9 +75,9 @@
                             <parameter expr="self.request_id"/>
                         </raise>
                         <script>
-                            print 'set_input in userstatechart'
-                            self.outstanding_input[self.request_id] = source
-                            self.request_id += 1
+                            if source is not None:
+                                self.outstanding_input[self.request_id] = source
+                                self.request_id += 1
                         </script>
                     </transition>
                     <transition event="executed" cond="request_id in self.outstanding_input" target=".">
@@ -90,7 +88,7 @@
                             source = self.outstanding_input.pop(request_id)
                         </script>
                         <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + source">
-                            <parameter expr="returnvalue"/>
+                            <parameter expr="json.dumps(returnvalue)"/>
                         </raise>
                         <raise event="set_input_done"/>
                     </transition>
@@ -129,7 +127,7 @@
                         <parameter name="success"/>
                         <parameter name="request_id"/>
                         <raise event="HTTP_input" scope="narrow" target="'parent/to_mvi/' + self.output_queue.pop(0)">
-                            <parameter expr="returnvalue"/>
+                            <parameter expr="json.dumps(returnvalue)"/>
                         </raise>
                         <script>
                             self.outstanding_output = None

+ 31 - 29
kernel/mvk_server/server.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Thu Feb  9 12:19:07 2017
+Date:   Thu Feb  9 12:46:19 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
@@ -272,8 +272,11 @@ class MvKController(RuntimeClassBase):
                     value = [json.loads(data["value"])]
                 else:
                     value = json.loads(data["data"])
-                args = value
-            self.input_queue.append((source, data["op"], args, data["username"]))
+                for v in value[:-1]:
+                    self.input_queue.append((None, data["op"], [v], data["username"]))
+                self.input_queue.append((source, data["op"], [value[-1]], data["username"]))
+            else:
+                self.input_queue.append((source, data["op"], args, data["username"]))
         except ValueError:
             print("Error when deserializing request: " + str(data))
             raise
@@ -304,8 +307,6 @@ class MvKController(RuntimeClassBase):
     
     def _running_find_users_get_all_links_0_exec(self, parameters):
         data = parameters[0]
-        print("Root: " + str(self.root))
-        print("Users: " + str(data))
         self.users = data[0][0]
     
     def _running_find_users_retrieve_users_0_exec(self, parameters):
@@ -320,7 +321,6 @@ class MvKController(RuntimeClassBase):
     def _running_find_users_got_usernames_0_exec(self, parameters):
         data = parameters[0]
         self.users = [v[0] for v in data if v[0] not in self.user_statecharts]
-        print("EXPANDED Users: " + str(data))
     
     def _running_find_users_process_users_0_guard(self, parameters):
         return not self.users
@@ -335,7 +335,6 @@ class MvKController(RuntimeClassBase):
         instancename = parameters[0]
         self.big_step.outputEventOM(Event("start_instance", None, [self, instancename]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, instancename, Event("set_returnpath", None, [instancename])]))
-        print self.users[0]
         self.user_statecharts[self.users[0]] = instancename
         # Repush all this user's messages in the input queue
         self.input_queue.extend(self.user_queue.pop(self.users[0], []))
@@ -762,7 +761,8 @@ class Socket(RuntimeClassBase):
     def _connected_queueing_queueing_0_exec(self, parameters):
         data = parameters[0]
         #post_data = "&".join(["%s=%s" % (urllib.quote(k), urllib.quote(v)) for k, v in data.iteritems()])
-        post_data = "&".join(["%s=%s" % (k, v) for k, v in data.iteritems()])
+        #post_data = "&".join(["%s=%s" % (k, v) for k, v in data.iteritems()])
+        post_data = data
         self.send_data += "HTTP/1.0 200 OK\r\n"
         self.send_data += "Content-Length: %s\r\n" % len(post_data)
         self.send_data += "Content-Type: %s; charset=UTF-8\r\n" % "text/plain"
@@ -1084,7 +1084,6 @@ class UserStatechart(RuntimeClassBase):
     
     def user_defined_constructor(self, username):
         self.username = username
-        print("INIT " + self.username)
         
         self.output_queue = []
         self.source_execution = None
@@ -1230,7 +1229,6 @@ class UserStatechart(RuntimeClassBase):
     
     def _running_execution_init_enter(self):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/executor', Event("execute", None, [self.returnpath, self.username, 'execute_rule', [], self.request_id])]))
-        print("Raise execute event!")
         self.outstanding_execution = self.request_id
         self.request_id += 1
     
@@ -1266,16 +1264,16 @@ class UserStatechart(RuntimeClassBase):
         source = parameters[0]
         args = parameters[1]
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/executor', Event("execute", None, [self.returnpath, self.username, 'set_input', args, self.request_id])]))
-        print 'set_input in userstatechart'
-        self.outstanding_input[self.request_id] = source
-        self.request_id += 1
+        if source is not None:
+            self.outstanding_input[self.request_id] = source
+            self.request_id += 1
     
     def _running_set_input_fetch_1_exec(self, parameters):
         returnvalue = parameters[0]
         success = parameters[1]
         request_id = parameters[2]
         source = self.outstanding_input.pop(request_id)
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/to_mvi/' + source, Event("HTTP_input", None, [returnvalue])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/to_mvi/' + source, Event("HTTP_input", None, [json.dumps(returnvalue)])]))
         self.raiseInternalEvent(Event("set_input_done", None, []))
     
     def _running_set_input_fetch_1_guard(self, parameters):
@@ -1301,7 +1299,7 @@ class UserStatechart(RuntimeClassBase):
         returnvalue = parameters[0]
         success = parameters[1]
         request_id = parameters[2]
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/to_mvi/' + self.output_queue.pop(0), Event("HTTP_input", None, [returnvalue])]))
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent/to_mvi/' + self.output_queue.pop(0), Event("HTTP_input", None, [json.dumps(returnvalue)])]))
         self.outstanding_output = None
     
     def _running_get_output_try_execute_1_guard(self, parameters):
@@ -1403,7 +1401,6 @@ class Executor(RuntimeClassBase):
         
         # state /init/execute/idle
         self.states["/init/execute/idle"] = State(7, self)
-        self.states["/init/execute/idle"].setEnter(self._init_execute_idle_enter)
         
         # state /init/execute/execution
         self.states["/init/execute/execution"] = State(8, self)
@@ -1446,16 +1443,21 @@ class Executor(RuntimeClassBase):
         _init_execute_execution_0 = Transition(self, self.states["/init/execute/execution"], [self.states["/init/execute/idle"]])
         _init_execute_execution_0.setAction(self._init_execute_execution_0_exec)
         _init_execute_execution_0.setTrigger(None)
+        _init_execute_execution_0.setGuard(self._init_execute_execution_0_guard)
         self.states["/init/execute/execution"].addTransition(_init_execute_execution_0)
-    
-    def _init_execute_idle_enter(self):
-        print 'in idle'
+        _init_execute_execution_1 = Transition(self, self.states["/init/execute/execution"], [self.states["/init/execute/idle"]])
+        _init_execute_execution_1.setTrigger(None)
+        _init_execute_execution_1.setGuard(self._init_execute_execution_1_guard)
+        self.states["/init/execute/execution"].addTransition(_init_execute_execution_1)
     
     def _init_execute_execution_enter(self):
-        _, username, operation, params, _ = self.request_queue[0]
+        self.mvk.returnvalue = None
+        self.mvk.success = True
+        self.first = True
+        
+        self.returnpath, username, operation, params, self.request_id = self.request_queue.pop(0)
         reply = None
         commands = []
-        print("Execute operation: " + operation)
         while 1:
             commands = self.mvk.execute_yields(username, operation, params, reply)
             if commands is None:
@@ -1474,19 +1476,19 @@ class Executor(RuntimeClassBase):
         operation = parameters[2]
         params = parameters[3]
         request_id = parameters[4]
-        print 'got execute event'
-        self.request_queue.append(("/" + returnpath, username, operation, params, request_id))
+        self.request_queue.append((("/" + returnpath) if returnpath is not None else None, username, operation, params, request_id))
     
     def _init_execute_idle_0_guard(self, parameters):
         return self.request_queue
     
     def _init_execute_execution_0_exec(self, parameters):
-        returnpath, _, _, _, request_id = self.request_queue.pop(0)
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent' + returnpath, Event("executed", None, [self.mvk.returnvalue, self.mvk.success, request_id])]))
-        print("Executed action --> " + str(self.mvk.returnvalue))
-        self.mvk.returnvalue = None
-        self.mvk.success = True
-        self.first = True
+        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent' + self.returnpath, Event("executed", None, [self.mvk.returnvalue, self.mvk.success, self.request_id])]))
+    
+    def _init_execute_execution_0_guard(self, parameters):
+        return self.returnpath is not None
+    
+    def _init_execute_execution_1_guard(self, parameters):
+        return self.returnpath is None
     
     def initializeStatechart(self):
         # enter default state