UNPKG

@jupyterlab/services

Version:

Client APIs for the Jupyter services REST APIs

140 lines 4.5 kB
"use strict"; // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.KernelSpecManager = void 0; const coreutils_1 = require("@lumino/coreutils"); const polling_1 = require("@lumino/polling"); const signaling_1 = require("@lumino/signaling"); const restapi = __importStar(require("./restapi")); const basemanager_1 = require("../basemanager"); /** * An implementation of a kernel spec manager. */ class KernelSpecManager extends basemanager_1.BaseManager { /** * Construct a new kernel spec manager. * * @param options - The default options for kernel. */ constructor(options = {}) { var _a; super(options); this._isReady = false; this._connectionFailure = new signaling_1.Signal(this); this._specs = null; this._specsChanged = new signaling_1.Signal(this); // Initialize internal data. this._ready = Promise.all([this.requestSpecs()]) .then(_ => undefined) .catch(_ => undefined) .then(() => { if (this.isDisposed) { return; } this._isReady = true; }); this._pollSpecs = new polling_1.Poll({ auto: false, factory: () => this.requestSpecs(), frequency: { interval: 61 * 1000, backoff: true, max: 300 * 1000 }, name: `@jupyterlab/services:KernelSpecManager#specs`, standby: (_a = options.standby) !== null && _a !== void 0 ? _a : 'when-hidden' }); void this.ready.then(() => { void this._pollSpecs.start(); }); } /** * Test whether the manager is ready. */ get isReady() { return this._isReady; } /** * A promise that fulfills when the manager is ready. */ get ready() { return this._ready; } /** * Get the most recently fetched kernel specs. */ get specs() { return this._specs; } /** * A signal emitted when the specs change. */ get specsChanged() { return this._specsChanged; } /** * A signal emitted when there is a connection failure. */ get connectionFailure() { return this._connectionFailure; } /** * Dispose of the resources used by the manager. */ dispose() { this._pollSpecs.dispose(); super.dispose(); } /** * Force a refresh of the specs from the server. * * @returns A promise that resolves when the specs are fetched. * * #### Notes * This is intended to be called only in response to a user action, * since the manager maintains its internal state. */ async refreshSpecs() { await this._pollSpecs.refresh(); await this._pollSpecs.tick; } /** * Execute a request to the server to poll specs and update state. */ async requestSpecs() { const specs = await restapi.getSpecs(this.serverSettings); if (this.isDisposed) { return; } if (!coreutils_1.JSONExt.deepEqual(specs, this._specs)) { this._specs = specs; this._specsChanged.emit(specs); } } } exports.KernelSpecManager = KernelSpecManager; //# sourceMappingURL=manager.js.map