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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user