瀏覽代碼

Rewrite CO to use the process function

Yentl Van Tendeloo 9 年之前
父節點
當前提交
576a3d4b7c
共有 2 個文件被更改,包括 30 次插入51 次删除
  1. 28 51
      interface/HUTN/hutn_compiler/constructors_object_visitor.py
  2. 2 0
      scripts/process.py

+ 28 - 51
interface/HUTN/hutn_compiler/constructors_object_visitor.py

@@ -22,15 +22,15 @@ class ConstructorsObjectVisitor(ConstructorsVisitor):
             md5.update(f.read())
         self.hash_file = md5.hexdigest()
 
-        # Check if file is already compiled (with same hash) in Modelverse
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '"%s"' % self.username, "username": "user_manager"}))).read()
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '3', "username": self.username}))).read()
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '"is_defined"', "username": self.username}))).read()
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '"%s"' % self.obj_file, "username": self.username}))).read()
-
-        v = urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "get_output", "username": self.username}))).read()
-        v = v.split("=", 2)[2]
+        data = ['"%s"' % self.username,
+                '3',
+                '"is_defined"',
+                '"%s"' % self.obj_file,
+                1,
+               ]
+        v = send_to_mv(self.address, data)[1]
         simple_filename = self.real_file.rsplit("/")[-1]
+
         if v == "None":
             # Not defined, so recompile
             print("[COMPILE] %s" % simple_filename)
@@ -40,9 +40,11 @@ class ConstructorsObjectVisitor(ConstructorsVisitor):
                 print("[COMPILE] %s" % simple_filename)
 
                 # Remove in Modelverse and recompile
-                urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '3', "username": self.username}))).read()
-                urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '"remove_obj"', "username": self.username}))).read()
-                urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '"%s"' % self.obj_file, "username": self.username}))).read()
+                data = ['3',
+                        '"remove_obj"',
+                        '"%s"' % self.obj_file
+                       ]
+                send_to_mv(self.address, data)
             else:
                 self.visit = lambda i: i
                 self.dump = lambda: True
@@ -53,51 +55,26 @@ class ConstructorsObjectVisitor(ConstructorsVisitor):
 
         import json
         # Set up interface
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '3', "username": self.username}))).read()
-
-        # Start uploading the code
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '"upload"', "username": self.username}))).read()
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '"%s"' % self.obj_file, "username": self.username}))).read()
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '"%s"' % self.hash_file, "username": self.username}))).read()
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": 'true', "username": self.username}))).read() # Use new interface
-
-        def flush_data(data):
-            if data:
-                urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "data": json.dumps(data), "username": self.username})), timeout=timeout).read()
-            return []
-
-        var_list = {}
-        data = []
-        for p in v:
-            if isinstance(p, int):
-                if p not in var_list:
-                    data = flush_data(data)
-                    val = urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "get_output", "username": self.username})), timeout=timeout).read()
-                    val = val.split("=", 2)[1].split("&", 1)[0]
-                    var_list[p] = val
-                    continue
-                else:
-                    val = var_list[p]
-                    t = "R"
-            else:
-                val = p
-                t = "V"
-            data.append([t, val])
-        data = flush_data(data)
+        data = ['3',
+                '"upload"',
+                '"%s"' % self.obj_file,
+                '"%s"' % self.hash_file,
+                'true',
+               ] + v
 
         # Upload symbol table
-        data = []
         for e, v in self.object_symbols.iteritems():
-            data.append(["V", "true"])
-            data.append(["V", '"%s"' % e])
-            data.append(["V", "true" if v else "false"])
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "data": json.dumps(data), "username": self.username}))).read()
-
+            data.append('true')
+            data.append('"%s"' % e)
+            data.append('true' if v else 'false')
         # Finish the symbol table
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": 'false', "username": self.username}))).read()
-
+        data.append('false')
         # Wait for kernel to signal that it finished
-        urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "set_input", "element_type": "V", "value": '2', "username": self.username}))).read()
+        data.append('2')
+
+        #TODO move this actual sending elsewhere
+        send_to_mv(self.address, data)
+
         v = urllib2.urlopen(urllib2.Request(self.address, urllib.urlencode({"op": "get_output", "username": self.username}))).read()
         v = v.split("=", 2)[2]
         if v == "DONE":

+ 2 - 0
scripts/process.py

@@ -23,3 +23,5 @@ def send_to_mv(address, lst):
             variables[c] = fetch_output(address)
         else:
             data.append(c)
+
+    return variables