Skip to content

Commit

Permalink
Enable debugger on kernel change (#2903)
Browse files Browse the repository at this point in the history
  • Loading branch information
karlaspuldaro authored and akchinSTC committed Sep 1, 2022
1 parent 09468d0 commit f0de9a8
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 25 deletions.
19 changes: 9 additions & 10 deletions packages/script-debugger/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,8 @@ const scriptEditorDebuggerExtension: JupyterFrontEndPlugin<void> = {
activeSessions[sessionModel.id] = sessionConnection;
}
if (sessionModel.kernel?.name !== kernelSelection) {
// New kernel selection detected, restart session connection for new kernel
await shutdownSession(sessionConnection);

sessionConnection = await startSession(kernelSelection, path);
// New kernel selection detected, update session connection
await changeKernel(sessionConnection, kernelSelection);
sessionModel = await sessions.findByPath(path);
if (sessionConnection && sessionModel) {
activeSessions[sessionModel.id] = sessionConnection;
Expand Down Expand Up @@ -177,15 +175,16 @@ const scriptEditorDebuggerExtension: JupyterFrontEndPlugin<void> = {
return sessionConnection;
};

const shutdownSession = async (
sessionConnection: Session.ISessionConnection
const changeKernel = async (
sessionConnection: Session.ISessionConnection,
kernelSelection: string
): Promise<void> => {
try {
const kernelName = sessionConnection.kernel?.name;
await sessionConnection.shutdown();
console.log(`${kernelName} kernel shut down.`);
const prev = sessionConnection.kernel?.name;
await sessionConnection.changeKernel({ name: kernelSelection });
console.log(`Kernel change from ${prev} to ${kernelSelection}`);
} catch (error) {
console.warn('Exception: shutdown = ' + JSON.stringify(error));
console.warn('Exception: change kernel = ' + JSON.stringify(error));
}
};
}
Expand Down
13 changes: 9 additions & 4 deletions packages/script-editor/src/ScriptEditorController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,18 @@ export class ScriptEditorController {
return kernelSpecs.default;
}

return this.getFirstKernelName(language);
};

getFirstKernelName = async (language: string): Promise<string> => {
const specsByLang = await this.getKernelSpecsByLanguage(language);
const first = (k: any): any => k[Object.keys(k)[0]];
let kernelName = '';

const empty = '';
if (specsByLang && Object.keys(specsByLang.kernelspecs).length !== 0) {
kernelName = first(specsByLang.kernelspecs.name);
const [key, value]: any = Object.entries(specsByLang.kernelspecs)[0];
return value.name ?? key;
}
return kernelName;
return empty;
};

/**
Expand Down
1 change: 1 addition & 0 deletions packages/script-editor/src/ScriptRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ export class ScriptRunner {
kernel &&
(await KernelAPI.interruptKernel(kernel.id, kernel.serverSettings));
console.log(kernel?.name + ' kernel interrupted.');
this.disableButton(false);
} catch (e) {
console.log('Exception: kernel interrupt = ' + JSON.stringify(e));
}
Expand Down
33 changes: 22 additions & 11 deletions packages/script-editor/src/test/script-editor.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { JupyterServer } from '@jupyterlab/testutils';

import { ScriptEditorController } from '../ScriptEditorController';
import { ScriptRunner } from '../ScriptRunner';

jest.setTimeout(3 * 60 * 1000);

const server = new JupyterServer();
Expand All @@ -33,16 +34,28 @@ afterAll(async () => {

describe('@elyra/script-editor', () => {
describe('ScriptEditorController', () => {
describe('#getKernelSpecs', () => {
let controller: ScriptEditorController;

beforeEach(async () => {
controller = new ScriptEditorController();
});

describe('#kernelSpecs', () => {
it('should get Python kernel specs', async () => {
const controller = new ScriptEditorController();
const kernelSpecs = await controller.getKernelSpecsByLanguage(language);
for (const [key, value] of Object.entries(
kernelSpecs?.kernelspecs ?? []
)) {
expect(key).toContain(language);
expect(value?.language).toContain(language);
}
Object.entries(kernelSpecs?.kernelspecs ?? []).forEach(([, value]) =>
expect(value?.language).toContain(language)
);
});
});

describe('#debuggerAvailable', () => {
it('should return true for kernels that have support for debugging', async () => {
let available = await controller.debuggerAvailable('python3');
expect(available).toBe(true);

available = await controller.debuggerAvailable('test');
expect(available).toBe(false);
});
});
});
Expand All @@ -56,9 +69,7 @@ describe('@elyra/script-editor', () => {
beforeEach(async () => {
runner = new ScriptRunner((x: boolean): void => console.log(x));
const controller = new ScriptEditorController();
const kernelSpecs = await controller.getKernelSpecsByLanguage(language);
kernelName =
Object.values(kernelSpecs?.kernelspecs ?? [])[0]?.name || '';
kernelName = await controller.getDefaultKernel(language);
});

it('should start a kernel session', async () => {
Expand Down

0 comments on commit f0de9a8

Please sign in to comment.