|
@@ -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":
|