UNPKG

@maap-jupyterlab/dps-jupyter-extension

Version:

A JupyterLab extension for submitting and viewing jobs.

131 lines (130 loc) 5.49 kB
import { ILayoutRestorer } from '@jupyterlab/application'; import { ICommandPalette, MainAreaWidget, WidgetTracker } from '@jupyterlab/apputils'; import { JUPYTER_EXT } from './constants'; import { ViewJobsReactAppWidget, SubmitJobsReactAppWidget } from './classes/App'; import { reactIcon } from '@jupyterlab/ui-components'; import { ILauncher } from '@jupyterlab/launcher'; import { getUsernameToken } from './utils/utils'; import { IStateDB } from '@jupyterlab/statedb'; import { IMainMenu } from '@jupyterlab/mainmenu'; import { Menu } from '@lumino/widgets'; /** * The command IDs used by the react-widget plugin. */ var CommandIDs; (function (CommandIDs) { CommandIDs.create = 'create-react-widget'; })(CommandIDs || (CommandIDs = {})); const profileId = 'maapsec-extension:IMaapProfile'; // Add 'View Jobs' and 'Submit Jobs' plugins to the jupyter lab 'Jobs' menu const jobs_menu_plugin = { id: 'jobs-menu', autoStart: true, requires: [IMainMenu], activate: (app, mainMenu) => { const { commands } = app; let jobsMenu = new Menu({ commands }); jobsMenu.id = 'jobs-menu'; jobsMenu.title.label = 'Jobs'; [ JUPYTER_EXT.VIEW_JOBS_OPEN_COMMAND, JUPYTER_EXT.SUBMIT_JOBS_OPEN_COMMAND ].forEach(command => { jobsMenu.addItem({ command }); }); mainMenu.addMenu(jobsMenu); } }; // View Jobs plugin const jobs_view_plugin = { id: JUPYTER_EXT.VIEW_JOBS_PLUGIN_ID, autoStart: true, optional: [ILauncher, ICommandPalette, IStateDB, ILayoutRestorer], activate: (app, launcher, palette, state, restorer) => { const { commands } = app; let viewJobsWidget = null; const viewJobsTracker = new WidgetTracker({ namespace: 'view-jobs-tracker' }); if (restorer) { restorer.restore(viewJobsTracker, { command: JUPYTER_EXT.VIEW_JOBS_OPEN_COMMAND, name: () => 'view-jobs-tracker' }); } const command = JUPYTER_EXT.VIEW_JOBS_OPEN_COMMAND; commands.addCommand(command, { caption: JUPYTER_EXT.VIEW_JOBS_NAME, label: JUPYTER_EXT.VIEW_JOBS_NAME, icon: (args) => (args['isPalette'] ? null : reactIcon), execute: () => { getUsernameToken(state, profileId, function (uname, ticket) { console.log("Got username: ", uname); const content = new ViewJobsReactAppWidget(uname, app); viewJobsWidget = new MainAreaWidget({ content }); viewJobsWidget.title.label = JUPYTER_EXT.VIEW_JOBS_NAME; viewJobsWidget.title.icon = reactIcon; app.shell.add(viewJobsWidget, 'main'); // Add widget to the tracker so it will persist on browser refresh viewJobsTracker.save(viewJobsWidget); viewJobsTracker.add(viewJobsWidget); }); }, }); palette.addItem({ command: JUPYTER_EXT.VIEW_JOBS_OPEN_COMMAND, category: 'MAAP Extensions' }); if (launcher) { launcher.add({ command, category: "MAAP Extensions" }); } console.log('JupyterLab View Jobs plugin is activated!'); }, }; // Submit Jobs plugin const jobs_submit_plugin = { id: JUPYTER_EXT.SUBMIT_JOBS_PLUGIN_ID, autoStart: true, optional: [ILauncher, ICommandPalette, IStateDB, ILayoutRestorer], activate: (app, launcher, palette, state, restorer) => { const { commands } = app; let submitJobsWidget = null; const submitJobsTracker = new WidgetTracker({ namespace: 'submit-jobs-tracker' }); if (restorer) { restorer.restore(submitJobsTracker, { command: JUPYTER_EXT.SUBMIT_JOBS_OPEN_COMMAND, name: () => 'submit-jobs-tracker' }); } const command = JUPYTER_EXT.SUBMIT_JOBS_OPEN_COMMAND; commands.addCommand(command, { caption: JUPYTER_EXT.SUBMIT_JOBS_NAME, label: JUPYTER_EXT.SUBMIT_JOBS_NAME, icon: (args) => (args['isPalette'] ? null : reactIcon), execute: () => { getUsernameToken(state, profileId, function (uname, ticket) { console.log("Got username: ", uname); const content = new SubmitJobsReactAppWidget("", uname); submitJobsWidget = new MainAreaWidget({ content }); submitJobsWidget.title.label = JUPYTER_EXT.SUBMIT_JOBS_NAME; submitJobsWidget.title.icon = reactIcon; app.shell.add(submitJobsWidget, 'main'); // Add widget to the tracker so it will persist on browser refresh submitJobsTracker.save(submitJobsWidget); submitJobsTracker.add(submitJobsWidget); }).catch((error) => console.log(error)); }, }); palette.addItem({ command: JUPYTER_EXT.SUBMIT_JOBS_OPEN_COMMAND, category: 'MAAP Extensions' }); if (launcher) { launcher.add({ command, category: "MAAP Extensions" }); } console.log('JupyterLab Submit Jobs plugin is activated!'); } }; export default [jobs_view_plugin, jobs_menu_plugin, jobs_submit_plugin];