Fixing dependency system for javascriptresponses. In particular, adding a location for node-only packages (that are never sent to the client) in lms/lib/node_modules and adding lms/static/js, lms/static/coffee/* to the NODE_PATH, along with the course's data directory.

This commit is contained in:
Arjun Singh
2012-08-07 03:28:35 -04:00
parent 88d672e862
commit fb6dbb120e
31 changed files with 7461 additions and 9 deletions

View File

@@ -1,3 +1,4 @@
require('coffee-script');
var importAll = function (modulePath) {
module = require(modulePath);
for(key in module){
@@ -9,8 +10,9 @@ importAll("mersenne-twister-min");
importAll("xproblem");
generatorModulePath = process.argv[2];
seed = process.argv[3];
params = JSON.parse(process.argv[4]);
dependencies = JSON.parse(process.argv[3]);
seed = process.argv[4];
params = JSON.parse(process.argv[5]);
if(seed==null){
seed = 4;
@@ -18,6 +20,10 @@ if(seed==null){
seed = parseInt(seed);
}
for(var i = 0; i < dependencies.length; i++){
importAll(dependencies[i]);
}
generatorModule = require(generatorModulePath);
generatorClass = generatorModule.generatorClass;
generator = new generatorClass(seed, params);

View File

@@ -1,3 +1,4 @@
require('coffee-script');
var importAll = function (modulePath) {
module = require(modulePath);
for(key in module){
@@ -6,12 +7,16 @@ var importAll = function (modulePath) {
}
importAll("xproblem");
importAll("minimax.js");
graderModulePath = process.argv[2];
submission = JSON.parse(process.argv[3]);
problemState = JSON.parse(process.argv[4]);
params = JSON.parse(process.argv[5]);
dependencies = JSON.parse(process.argv[3]);
submission = JSON.parse(process.argv[4]);
problemState = JSON.parse(process.argv[5]);
params = JSON.parse(process.argv[6]);
for(var i = 0; i < dependencies.length; i++){
importAll(dependencies[i]);
}
graderModule = require(graderModulePath);
graderClass = graderModule.graderClass;

View File

@@ -352,12 +352,18 @@ class JavascriptResponse(LoncapaResponse):
if self.generator_xml.get("dependencies"):
self.generator_dependencies = self.generator_xml.get("dependencies").split()
else:
self.generator_dependencies = []
if self.grader_xml.get("dependencies"):
self.grader_dependencies = self.grader_xml.get("dependencies").split()
else:
self.grader_dependencies = []
if self.display_xml.get("dependencies"):
self.display_dependencies = self.display_xml.get("dependencies").split()
else:
self.display_dependencies = []
self.display_class = self.display_xml.get("class")
@@ -366,7 +372,12 @@ class JavascriptResponse(LoncapaResponse):
js_dir = os.path.join(self.system.filestore.root_path, 'js')
node_path = os.path.normpath(js_dir)
generator_file = os.path.dirname(os.path.normpath(__file__)) + '/javascript_problem_generator.js'
command = "NODE_PATH=%s node %s %s '%s' '%s'" % (node_path, generator_file, self.generator, json.dumps(self.system.seed), json.dumps(self.params))
command = "NODE_PATH=$NODE_PATH:%s node %s %s '%s' '%s' '%s'" % (node_path,
generator_file,
self.generator,
json.dumps(self.generator_dependencies),
json.dumps(self.system.seed),
json.dumps(self.params))
node_process = os.popen(command)
output = node_process.readline().strip()
node_process.close()
@@ -415,12 +426,14 @@ class JavascriptResponse(LoncapaResponse):
js_dir = os.path.join(self.system.filestore.root_path, 'js')
node_path = os.path.normpath(js_dir)
grader_file = os.path.dirname(os.path.normpath(__file__)) + '/javascript_problem_grader.js'
command = "NODE_PATH=%s node %s %s '%s' '%s' '%s'" % (node_path,
command = "NODE_PATH=$NODE_PATH:%s node %s '%s' '%s' '%s' '%s' '%s'" % (node_path,
grader_file,
self.grader,
json.dumps(self.grader_dependencies),
submission,
json.dumps(self.problem_state),
json.dumps(self.params))
print command
node_process = os.popen(command)
all_correct = json.loads(node_process.readline().strip())
evaluation = node_process.readline().strip()