selectkernel.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. 'use strict';
  4. import {
  5. IKernelSpecIds
  6. } from 'jupyter-js-services';
  7. import {
  8. showDialog
  9. } from 'jupyter-js-ui/lib/dialog';
  10. /**
  11. * Present a dialog asking the user to select a kernel.
  12. */
  13. export
  14. function selectKernel(host: HTMLElement, kernelName: string, specs: IKernelSpecIds): Promise<string> {
  15. let selector = document.createElement('select');
  16. let options: HTMLOptionElement[] = [];
  17. for (let name in specs.kernelspecs) {
  18. let option = document.createElement('option');
  19. option.value = name;
  20. option.text = specs.kernelspecs[name].spec.display_name;
  21. options.push(option);
  22. }
  23. options.sort((a, b) => { return a.text.localeCompare(b.text); });
  24. for (let option of options) {
  25. selector.appendChild(option);
  26. }
  27. if (kernelName !== 'unknown') {
  28. selector.value = kernelName;
  29. } else {
  30. selector.value = specs.kernelspecs[specs.default].spec.display_name;
  31. }
  32. return showDialog({
  33. title: 'Select Kernel',
  34. host,
  35. body: selector
  36. }).then(result => {
  37. if (result.text === 'OK') {
  38. return selector.value;
  39. }
  40. return null;
  41. });
  42. }
  43. /**
  44. * Get the appropriate kernel name given a notebook model.
  45. */
  46. export
  47. function findKernel(kernelName: string, language: string, specs: IKernelSpecIds): string {
  48. if (kernelName === 'unknown') {
  49. return specs.default;
  50. }
  51. // Look for an exact match.
  52. for (let specName in specs.kernelspecs) {
  53. if (specName === kernelName) {
  54. return kernelName;
  55. }
  56. }
  57. // Next try to match the language name.
  58. if (language === 'unknown') {
  59. return specs.default;
  60. }
  61. for (let specName in specs.kernelspecs) {
  62. let kernelLanguage = specs.kernelspecs[name].spec.language;
  63. if (language === kernelLanguage) {
  64. console.log('No exact match found for ' + name +
  65. ', using kernel ' + specName + ' that matches ' +
  66. 'language=' + language);
  67. return specName;
  68. }
  69. }
  70. // Finally, use the default kernel.
  71. console.log(`No matching kernel found for ${kernelName}, ` +
  72. `using default kernel ${specs.default}`);
  73. return specs.default;
  74. }