@nteract/fs-kernels
Version:
A manager for the filesystem aspects of Juyter kernels
54 lines (53 loc) • 1.85 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const child_process_1 = require("child_process");
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const util_1 = require("util");
const readdir = util_1.promisify(fs_1.default.readdir);
async function mapToKernelResources(kernelSpecs) {
const resources = {};
for (const name of Object.keys(kernelSpecs)) {
const kernelSpec = kernelSpecs[name];
const files = await readdir(kernelSpec.resource_dir);
resources[name] = {
name,
files: files.map(file => path_1.default.join(kernelSpec.resource_dir, file)),
resource_dir: kernelSpec.resource_dir,
spec: kernelSpec.spec
};
}
return resources;
}
/**
* find a kernel by name
* @param kernelName the kernel to locate
* @return kernelResource object
*/
async function find(kernelName) {
return (await findAll())[kernelName];
}
exports.find = find;
/**
* Get an array of kernelResources objects for the host environment
* This matches the Jupyter notebook API for kernelspecs exactly
* @return Promise for an array of kernelResources objects
*/
async function findAll() {
return new Promise((resolve, reject) => {
child_process_1.exec("python3 -m jupyter kernelspec list --json", async (err, stdout) => {
if (err) {
reject(err);
}
else {
const kernelSpecs = JSON.parse(stdout).kernelspecs;
const resources = await mapToKernelResources(kernelSpecs);
resolve(resources);
}
});
});
}
exports.findAll = findAll;