ソースを参照

Find the correct kernel to launch for a notebook

Steven Silvester 9 年 前
コミット
71689dd441
3 ファイル変更22 行追加33 行削除
  1. 3 21
      examples/lab/webpack.conf.js
  2. 2 2
      package.json
  3. 17 10
      src/notebook/plugin.ts

+ 3 - 21
examples/lab/webpack.conf.js

@@ -1,6 +1,4 @@
 
-var ContextReplacementPlugin = require("webpack/lib/ContextReplacementPlugin");
-
 module.exports = {
   entry: './index.js',
   output: {
@@ -17,25 +15,9 @@ module.exports = {
     loaders: [
       { test: /\.css$/, loader: 'style-loader!css-loader' },
       { test: /\.json$/, loader: 'json-loader' },
+      { test: /\.html$/, loader: 'file' },
       // jquery-ui loads some images
-      { test: /\.(jpg|png|gif)$/, loader: "file" },
-      // required to load font-awesome
-      { test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&minetype=application/font-woff" },
-      { test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&minetype=application/font-woff" },
-      { test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&minetype=application/octet-stream" },
-      { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: "file" },
-      { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&minetype=image/svg+xml" }
+      { test: /\.(jpg|png|gif)$/, loader: "file" }
     ]
-  },
-  externals: {
-      "base/js/namespace": "base/js/namespace",
-      "notebook/js/outputarea": "notebook/js/outputarea",
-      "services/kernels/comm": "services/kernels/comm"
-  },
-  plugins: [
-    new ContextReplacementPlugin(
-      /codemirror\/mode.*$/,
-      /codemirror\/mode.*\.js$/
-    )
-  ]
+  }
 }

+ 2 - 2
package.json

@@ -9,9 +9,9 @@
     "codemirror": "^5.12.0",
     "jquery": "^2.2.0",
     "jquery-ui": "^1.10.5",
-    "jupyter-js-notebook": "^0.15.1",
+    "jupyter-js-notebook": "^0.15.5",
     "jupyter-js-services": "^0.6.5",
-    "jupyter-js-ui": "^0.3.0",
+    "jupyter-js-ui": "^0.5.1",
     "jupyter-js-utils": "^0.3.0",
     "jupyter-js-widgets": "0.0.17",
     "phosphide": "^0.9.3",

+ 17 - 10
src/notebook/plugin.ts

@@ -4,12 +4,13 @@
 
 import {
   NotebookWidget, NotebookModel, serialize, INotebookModel, deserialize,
-  NotebookManager, NotebookToolbar, selectKernel
+  NotebookManager, NotebookToolbar, selectKernel, INotebookContent,
+  findKernel
 } from 'jupyter-js-notebook';
 
 import {
   IContentsModel, IContentsManager, IContentsOpts,
-  INotebookSessionManager, INotebookSession,
+  INotebookSessionManager, INotebookSession, IKernelSpecIds,
   IKernelMessage, IComm, KernelStatus, getKernelSpecs
 } from 'jupyter-js-services';
 
@@ -449,7 +450,8 @@ class NotebookFileHandler extends AbstractFileHandler<NotebookPane> {
 
   constructor(contents: IContentsManager, session: INotebookSessionManager) {
     super(contents);
-    this.session = session;
+    this._session = session;
+    this._kernelSpecs = getKernelSpecs({});
   }
 
   /**
@@ -554,11 +556,6 @@ class NotebookFileHandler extends AbstractFileHandler<NotebookPane> {
     let panel = new NotebookPane(this.manager);
     panel.model.stateChanged.connect(this._onModelChanged, this);
     panel.title.text = contents.name;
-
-    this.session.startNew({notebookPath: contents.path}).then(s => {
-      panel.setSession(s);
-    });
-
     return panel;
   }
 
@@ -567,7 +564,16 @@ class NotebookFileHandler extends AbstractFileHandler<NotebookPane> {
    */
   protected populateWidget(widget: NotebookPane, model: IContentsModel): Promise<IContentsModel> {
     deserialize(model.content, widget.model);
-    return Promise.resolve(model);
+    return this._kernelSpecs.then(specs => {
+      let name = findKernel(widget.model, specs);
+      return this._session.startNew({ 
+        kernelName: name, 
+        notebookPath: model.path
+      });
+    }).then(session => {
+      widget.setSession(session);
+      return model;
+    });
   }
 
   /**
@@ -590,5 +596,6 @@ class NotebookFileHandler extends AbstractFileHandler<NotebookPane> {
     }
   }
 
-  session: INotebookSessionManager;
+  private _session: INotebookSessionManager = null;
+  private _kernelSpecs: Promise<IKernelSpecIds> = null;
 }