@maap-jupyterlab/dps-jupyter-extension
Version:
A JupyterLab extension for submitting and viewing jobs.
131 lines (130 loc) • 5.49 kB
JavaScript
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];