merged private server and console to private-cloud
This commit is contained in:
83
console/mini_poem/external/python_caller.js
vendored
Normal file
83
console/mini_poem/external/python_caller.js
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* Created by strawmanbobi
|
||||
* 2016-12-03
|
||||
*/
|
||||
|
||||
var pythonShell = require('python-shell');
|
||||
|
||||
var constants = require('../configuration/constants.js');
|
||||
var logger = require('../logging/logger4js').helper;
|
||||
|
||||
var ErrorCode = require('../configuration/error_code.js');
|
||||
|
||||
var errorCode = new ErrorCode();
|
||||
|
||||
var PythonCaller = function() {
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* Call python script from application
|
||||
*
|
||||
* input parameters : Script run-time base dir
|
||||
* Script script filename
|
||||
* User determined arguments ...
|
||||
* Call back function
|
||||
*
|
||||
* return : Error code of python caller
|
||||
*/
|
||||
PythonCaller.prototype.call = function() {
|
||||
var userArgIndex = 0;
|
||||
var numArgs = arguments.length;
|
||||
var callback = null;
|
||||
var scriptPath = null;
|
||||
var scriptName = null;
|
||||
var userArguments = [];
|
||||
if(numArgs < 3) {
|
||||
logger.error("internal error while calling python script from application : no script specified");
|
||||
// TODO: specify the error code for this type of error
|
||||
throw errorCode.PYTHON_ARGUMENTS_ERROR;
|
||||
} else {
|
||||
callback = arguments[numArgs - 1];
|
||||
if((typeof callback != 'function')) {
|
||||
logger.error('internal error while calling python script from application : no callback specified');
|
||||
throw errorCode.PYTHON_CALLBACK_NOT_SPECIFIED;
|
||||
} else {
|
||||
scriptPath = arguments[0];
|
||||
scriptName = arguments[1];
|
||||
if(null == scriptPath || 'undefined' == scriptPath || null == scriptName || 'undefined' == scriptName) {
|
||||
logger.error('internal error while calling python script from application : no script path specified');
|
||||
// TODO: specify the error code for this type of error
|
||||
throw errorCode.PYTHON_SCRIPT_PATH_NOT_SPECIFIED;
|
||||
} else {
|
||||
// parse user arguments from python caller
|
||||
var args = arguments[2];
|
||||
for(userArgIndex = 0; userArgIndex < args.length; userArgIndex++) {
|
||||
userArguments.push(args[userArgIndex]);
|
||||
}
|
||||
// logger.info("user arguments = " + userArguments);
|
||||
var options = {
|
||||
mode: 'text',
|
||||
pythonPath: PYTHON_PATH,
|
||||
pythonOptions: ['-u'],
|
||||
scriptPath: scriptPath, // the base path of python run-time
|
||||
args: userArguments
|
||||
};
|
||||
|
||||
pythonShell.run(scriptName, options, function (err, results) {
|
||||
if (err) {
|
||||
logger.error('python executing with error : ' + err);
|
||||
callback(errorCode.FAILED, null);
|
||||
} else {
|
||||
// results is an array consisting of messages collected during execution
|
||||
logger.info('python executed successfully, results = %j', results);
|
||||
callback(errorCode.SUCCESS, results);
|
||||
}
|
||||
});
|
||||
return errorCode.PYTHON_SCRIPT_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = PythonCaller;
|
||||
Reference in New Issue
Block a user