You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
"use strict";
|
|
|
|
let { PythonShell } = require("python-shell");
|
|
|
|
/**
|
|
* Read the documentation (https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html#core-controllers)
|
|
* to customize this controller
|
|
*/
|
|
|
|
module.exports = {
|
|
async findOne(ctx) {
|
|
const { name } = ctx.params;
|
|
|
|
const entity = await strapi.services.function.findOne({ name });
|
|
|
|
if (entity) {
|
|
let args = [];
|
|
|
|
entity.input.forEach((input) => {
|
|
args.push(ctx.request.query[input.name] || input.defaultValue || "");
|
|
});
|
|
|
|
let script = () => {
|
|
return new Promise((resolve, reject) => {
|
|
PythonShell.run(
|
|
`./public${entity.script.url}`,
|
|
{ args: [...args] },
|
|
function (err, results) {
|
|
if (err) throw err;
|
|
resolve(results);
|
|
}
|
|
);
|
|
});
|
|
};
|
|
|
|
let result = await script();
|
|
let message = {};
|
|
entity.output.forEach((out, index) => {
|
|
message[out.name] = result[index];
|
|
});
|
|
|
|
return message;
|
|
}
|
|
|
|
return entity;
|
|
},
|
|
};
|