Browse Source

Added model_list, but seems broken (not sent?)

Yentl Van Tendeloo 8 years ago
parent
commit
76dd61659a

+ 1 - 0
bootstrap/core_algorithm.alc

@@ -1374,6 +1374,7 @@ String function cmd_model_delete(model_name : String):
 
 String function cmd_model_list(location : String):
 	// List all models
+	log("Got model list!")
 	if (get_entry_id(location) != ""):
 		if (allow_read(current_user_id, get_entry_id(location))):
 			Element models

+ 1 - 1
scripts/run_local_modelverse.py

@@ -10,7 +10,7 @@ else:
 
 # Start up the HUTN compilation service already
 try:
-    hutn = subprocess.Popen([sys.executable, "scripts/HUTN_service.py", "127.0.0.1:%s" % port])
+    #hutn = subprocess.Popen([sys.executable, "scripts/HUTN_service.py", "127.0.0.1:%s" % port])
 
     os.chdir("hybrid_server")
     subprocess.check_call([sys.executable, "-m", "sccd.compiler.sccdc", "-p", "threads", "server.xml"])

+ 149 - 164
wrappers/classes/http_client.xml

@@ -1,192 +1,177 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo" name="HTTP client">
-    <description>
-        HTTP client.
-    </description>
-    <top>
-        import uuid
-    </top>
-
-    <inport name="socket_in"/>
-    <outport name="socket_out"/>
-
-    <inport name="request_in"/>
-    <outport name="request_out"/>
-
-    <class name="HTTPClient">
-        <constructor>
-            <body>
-                <![CDATA[
-                self.socket = None
-                self.received_data = ""
-                self.send_data = ""
-                self.queue = []
-                self.IDs = []
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="init">
-            <state id="init">
+<class name="HTTPClient">
+    <constructor>
+        <body>
+            <![CDATA[
+            self.socket = None
+            self.received_data = ""
+            self.send_data = ""
+            self.queue = []
+            self.IDs = []
+            ]]>
+        </body>
+    </constructor>
+
+    <scxml initial="init">
+        <state id="init">
+            <onentry>
+                <script>
+                    self.ID = str(uuid.uuid4())
+                </script>
+                <raise scope="output" event="create_socket" port="socket_out">
+                    <parameter expr="self.ID"/>
+                </raise>
+            </onentry>
+
+            <transition port="socket_in" event="created_socket" cond="self.ID == ID" target="../waiting">
+                <parameter name="socket"/>
+                <parameter name="ID"/>
+                <script>
+                    self.socket = socket
+                </script>
+            </transition>
+        </state>
+
+        <state id="waiting">
+            <onentry>
+                <raise scope="broad" event="http_client_initialized"/>
+            </onentry>
+
+            <transition event="connect" target="../connecting">
+                <parameter name="address"/>
+                <parameter name="timeout"/>
+
+                <script>
+                    self.address = address
+                    self.timeout = timeout
+                </script>
+            </transition>
+        </state>
+
+        <state id="connecting" initial="connecting">
+            <state id="connecting">
                 <onentry>
-                    <script>
-                        self.ID = str(uuid.uuid4())
-                    </script>
-                    <raise scope="output" event="create_socket" port="socket_out">
-                        <parameter expr="self.ID"/>
+                    <raise scope="output" event="connect_socket" port="socket_out">
+                        <parameter expr="self.socket"/>
+                        <parameter expr="self.address"/>
                     </raise>
                 </onentry>
 
-                <transition port="socket_in" event="created_socket" cond="self.ID == ID" target="../waiting">
+                <transition port="socket_in" event="error_socket" target="../cooldown"/>
+
+                <transition port="socket_in" event="connected_socket" cond="self.socket == socket" target="../../connected">
                     <parameter name="socket"/>
-                    <parameter name="ID"/>
-                    <script>
-                        self.socket = socket
-                    </script>
+                    <raise scope="broad" event="http_client_ready"/>
                 </transition>
             </state>
 
-            <state id="waiting">
-                <onentry>
-                    <raise scope="output" port="request_out" event="http_client_initialized"/>
-                </onentry>
-
-                <transition port="request_in" event="connect" target="../connecting">
-                    <parameter name="address"/>
-                    <parameter name="timeout"/>
-
-                    <script>
-                        self.address = address
-                        self.timeout = timeout
-                    </script>
-                </transition>
+            <state id="cooldown">
+                <transition after="0.1" target="../connecting"/>
             </state>
 
-            <state id="connecting" initial="connecting">
-                <state id="connecting">
+            <transition after="self.timeout" target="../waiting">
+                <raise scope="broad" event="http_client_timeout"/>
+            </transition>
+        </state>
+
+        <parallel id="connected">
+            <state id="listening" initial="listen">
+                <state id="listen">
                     <onentry>
-                        <raise scope="output" event="connect_socket" port="socket_out">
+                        <raise scope="output" port="socket_out" event="recv_socket">
                             <parameter expr="self.socket"/>
-                            <parameter expr="self.address"/>
                         </raise>
                     </onentry>
-
-                    <transition port="socket_in" event="error_socket" target="../cooldown"/>
-
-                    <transition port="socket_in" event="connected_socket" cond="self.socket == socket" target="../../connected">
+                    <transition event="received_socket" port="socket_in" cond="(self.socket == socket) and (len(data) > 0)" target=".">
+                        <parameter name="socket"/>
+                        <parameter name="data"/>
+                        <script>
+                            self.received_data += data
+                        </script>
+                    </transition>
+                    <transition event="received_socket" port="socket_in" cond="(self.socket == socket) and (len(data) == 0)" target="../close">
                         <parameter name="socket"/>
-                        <raise scope="output" port="request_out" event="http_client_ready"/>
+                        <parameter name="data"/>
                     </transition>
                 </state>
-
-                <state id="cooldown">
-                    <transition after="0.1" target="../connecting"/>
+                <state id="close">
                 </state>
-
-                <transition after="self.timeout" target="../waiting">
-                    <raise scope="output" port="request_out" event="http_client_timeout"/>
-                </transition>
             </state>
 
-            <parallel id="connected">
-                <state id="listening" initial="listen">
-                    <state id="listen">
-                        <onentry>
-                            <raise scope="output" port="socket_out" event="recv_socket">
-                                <parameter expr="self.socket"/>
-                            </raise>
-                        </onentry>
-                        <transition event="received_socket" port="socket_in" cond="(self.socket == socket) and (len(data) > 0)" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="data"/>
-                            <script>
-                                self.received_data += data
-                            </script>
-                        </transition>
-                        <transition event="received_socket" port="socket_in" cond="(self.socket == socket) and (len(data) == 0)" target="../close">
-                            <parameter name="socket"/>
-                            <parameter name="data"/>
-                        </transition>
-                    </state>
-                    <state id="close">
-                    </state>
+            <state id="sending" initial="waiting_for_data">
+                <state id="waiting_for_data">
+                    <transition cond="len(self.send_data) > 0" target="../transferring">
+                        <raise scope="output" port="socket_out" event="send_socket">
+                            <parameter expr="self.socket"/>
+                            <parameter expr="self.send_data"/>
+                        </raise>
+                    </transition>
                 </state>
-
-                <state id="sending" initial="waiting_for_data">
-                    <state id="waiting_for_data">
-                        <transition cond="len(self.send_data) > 0" target="../transferring">
-                            <raise scope="output" port="socket_out" event="send_socket">
-                                <parameter expr="self.socket"/>
-                                <parameter expr="self.send_data"/>
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="transferring">
-                        <transition event="sent_socket" port="socket_in" cond="self.socket == socket" target="../waiting_for_data">
-                            <parameter name="socket"/>
-                            <parameter name="sent_bytes"/>
-                            <script>
-                                self.send_data = self.send_data[sent_bytes:]
-                            </script>
-                        </transition>
-                    </state>
+                <state id="transferring">
+                    <transition event="sent_socket" port="socket_in" cond="self.socket == socket" target="../waiting_for_data">
+                        <parameter name="socket"/>
+                        <parameter name="sent_bytes"/>
+                        <script>
+                            self.send_data = self.send_data[sent_bytes:]
+                        </script>
+                    </transition>
                 </state>
+            </state>
 
+            <state id="queueing">
                 <state id="queueing">
-                    <state id="queueing">
-                        <onentry>
-                        </onentry>
-                        <transition port="request_in" event="HTTP_input" target=".">
-                            <parameter name="data"/>
-                            <parameter name="ID"/>
-                            <script>
-                                self.send_data += "POST / HTTP/1.0\r\n"
-                                self.send_data += "Content-Length: %i\r\n" % len(str(data))
-                                self.send_data += "\r\n"
-                                self.send_data += data
-                                self.IDs.append(ID)
-                            </script>
-                        </transition>
-                    </state>
+                    <onentry>
+                    </onentry>
+                    <transition event="HTTP_input" target=".">
+                        <parameter name="data"/>
+                        <parameter name="ID"/>
+                        <script>
+                            self.send_data += "POST / HTTP/1.0\r\n"
+                            self.send_data += "Content-Length: %i\r\n" % len(str(data))
+                            self.send_data += "\r\n"
+                            self.send_data += data
+                            self.IDs.append(ID)
+                        </script>
+                    </transition>
                 </state>
+            </state>
 
-                <state id="parsing" initial="wait_for_header">
-                    <state id="wait_for_header">
-                        <transition cond="'\r\n\r\n' in self.received_data" target="../wait_for_payload">
-                            <script>
-                                header, self.received_data = self.received_data.split("\r\n\r\n", 1)
-                                header = header.lower()
-                                if "content-length" in header:
-                                    _, after = header.split("content-length:", 1)
-                                    after, _ = after.split("\r\n", 1)
-                                    after = after.strip()
-                                    self.length = int(after)
-                                else:
-                                    self.length = float('inf')
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="wait_for_payload">
-                        <transition cond="len(self.received_data) >= self.length and self.IDs[0] is not None" target="../wait_for_header">
-                            <script>
-                                data = self.received_data[:self.length]
-                                self.received_data = self.received_data[self.length:]
-                            </script>
-                            <raise event="HTTP_output" scope="output" port="request_out">
-                                <parameter expr="data"/>
-                                <parameter expr="self.IDs.pop(0)"/>
-                            </raise>
-                        </transition>
+            <state id="parsing" initial="wait_for_header">
+                <state id="wait_for_header">
+                    <transition cond="'\r\n\r\n' in self.received_data" target="../wait_for_payload">
+                        <script>
+                            header, self.received_data = self.received_data.split("\r\n\r\n", 1)
+                            header = header.lower()
+                            if "content-length" in header:
+                                _, after = header.split("content-length:", 1)
+                                after, _ = after.split("\r\n", 1)
+                                after = after.strip()
+                                self.length = int(after)
+                            else:
+                                self.length = float('inf')
+                        </script>
+                    </transition>
+                </state>
+                <state id="wait_for_payload">
+                    <transition cond="len(self.received_data) >= self.length and self.IDs[0] is not None" target="../wait_for_header">
+                        <script>
+                            data = self.received_data[:self.length]
+                            self.received_data = self.received_data[self.length:]
+                        </script>
+                        <raise event="HTTP_output" scope="broad">
+                            <parameter expr="data"/>
+                            <parameter expr="self.IDs.pop(0)"/>
+                        </raise>
+                    </transition>
 
-                        <transition cond="len(self.received_data) >= self.length and self.IDs[0] is None" target="../wait_for_header">
-                            <script>
-                                # Drop data
-                                self.received_data = self.received_data[self.length:]
-                                self.IDs.pop(0)
-                            </script>
-                        </transition>
-                    </state>
+                    <transition cond="len(self.received_data) >= self.length and self.IDs[0] is None" target="../wait_for_header">
+                        <script>
+                            # Drop data
+                            self.received_data = self.received_data[self.length:]
+                            self.IDs.pop(0)
+                        </script>
+                    </transition>
                 </state>
-            </parallel>
-        </scxml>
-    </class>
-</diagram>
+            </state>
+        </parallel>
+    </scxml>
+</class>

+ 36 - 37
wrappers/classes/modelverse.xml

@@ -25,6 +25,20 @@
         </body>
     </method>
 
+    <method name="expect_response_partial">
+        <parameter name="expected"/>
+        <parameter name="pop" default="False"/>
+        <body>
+            print("Checking for partial resonse, got: " + str(self.responses))
+            if self.responses and self.responses.startswith(expected):
+                if pop:
+                    del self.responses[0]
+                return True
+            else:
+                return False
+        </body>
+    </method>
+
     <method name="expect_action">
         <parameter name="context"/>
         <parameter name="expected"/>
@@ -85,6 +99,9 @@
                             <parameter expr='urllib.urlencode({"op": "set_input", "data": json.dumps(value), "taskname": self.taskname})'/>
                             <parameter expr='None'/>
                         </raise>
+                        <script>
+                            print("Sent out value: " + str(urllib.urlencode({"op": "set_input", "data": json.dumps(value), "taskname": self.taskname})))
+                        </script>
                     </transition>
 
                     <transition event="request" cond="not isinstance(value, type([]))" target=".">
@@ -93,6 +110,9 @@
                             <parameter expr='urllib.urlencode({"op": "set_input", "value": json.dumps(value), "taskname": self.taskname})'/>
                             <parameter expr='None'/>
                         </raise>
+                        <script>
+                            print("Sent out value: " + str(urllib.urlencode({"op": "set_input", "value": json.dumps(value), "taskname": self.taskname})))
+                        </script>
                     </transition>
 
                     <transition event="request_raw" target=".">
@@ -225,43 +245,21 @@
                     </state>
                 </state>
 
-                <state id="model_add" initial="init">
-                    <state id="init">
-                        <transition cond="self.parameters[2] is not None" target="../compiled">
-                            <script>
-                                try:
-                                    self.compiled = _compile_model(model_code)
-                                    self.exception = None
-                                except Exception as e:
-                                    self.compiled = None
-                                    self.exception = e
-                            </script>
-                        </transition>
-                        <transition cond="self.parameters[2] is None" target="../compiled">
-                            <script>
-                                self.compiled = [0]
-                                self.exception = None
-                            </script>
-                        </transition>
-                    </state>
-
-                    <state id="compiled">
-                        <transition cond="self.compiled is None" target="../../wait_for_action/history">
-                            <raise event="exception">
-                                <parameter expr="self.exception"/>
-                            </raise>
-                        </transition>
-
-                        <transition cond="self.compiled is not None" target="../sent_commands">
-                            <raise event="request">
-                                <parameter expr="['model_add', self.parameters[1], self.parameters[0]]"/>
-                            </raise>
-                        </transition>
-                    </state>
+                <state id="model_list">
+                    <onentry>
+                        <raise event="request">
+                            <parameter expr="'model_list'"/>
+                        </raise>
+                        <script>
+                            print("Raised model_list!")
+                        </script>
+                    </onentry>
 
-                    <state id="sent_commands">
-                        <transition cond="self.expect_response('Waiting for model constructors')">
-                    </state>
+                    <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="result">
+                            <parameter expr="self.split_response('Success: ')"/>
+                        </raise>
+                    </transition>
                 </state>
 
                 <state id="wait_for_action" initial="disconnected">
@@ -282,10 +280,11 @@
                     </state>
 
                     <state id="megamodelling">
-                        <transition cond="self.expect_action(None, 'model_add')" target="../../model_add">
+                        <transition cond="self.expect_action(None, 'model_list')" target="../../model_list">
                             <script>
                                 self.load_action(None)
                             </script>
+                        </transition>
                     </state>
 
                     <state id="modelling" initial="manual">

+ 11 - 8
wrappers/modelverse.py

@@ -14,11 +14,6 @@ def run_controller():
         controller.stop()
 
 if __name__ == "__main__":
-    run_controller()
-
-    import sys
-    sys.exit(0)
-else:
     import threading
     thrd = threading.Thread(target=run_controller)
     thrd.daemon = True
@@ -36,12 +31,20 @@ def INPUT(action, context, parameters):
     controller.addInput(Event("action", "action_in", [action, _next_ID(), context, parameters]))
 
 def OUTPUT():
-    responses.fetch(-1)
+    return responses.fetch(-1)
 
 def init(address_param="127.0.0.1:8001", timeout=20.0):
     INPUT("init", None, [address_param, timeout])
-    OUTPUT()
+    return OUTPUT()
 
 def login(username, password):
     INPUT("login", None, [username, password])
-    OUTPUT()
+    return OUTPUT()
+
+def model_list(location):
+    INPUT("model_list", None, [location])
+    return OUTPUT()
+
+init()
+login("admin", "admin")
+model_list("")