Show More
@@ -26,7 +26,7 define([ | |||
|
26 | 26 | IPython.kernelselector = this; |
|
27 | 27 | this._finish_load = null; |
|
28 | 28 | this._loaded = false; |
|
29 |
this.loaded = new Promise(function(resolve |
|
|
29 | this.loaded = new Promise(function(resolve) { | |
|
30 | 30 | that._finish_load = resolve; |
|
31 | 31 | }); |
|
32 | 32 | |
@@ -38,16 +38,12 define([ | |||
|
38 | 38 | utils.promising_ajax(url).then($.proxy(this._got_kernelspecs, this)); |
|
39 | 39 | }; |
|
40 | 40 | |
|
41 | KernelSelector.prototype._got_kernelspecs = function(data) { | |
|
42 | var that = this; | |
|
43 | this.kernelspecs = data.kernelspecs; | |
|
44 | var change_kernel_submenu = $("#menu-change-kernel-submenu"); | |
|
45 | var new_notebook_submenu = $("#menu-new-notebook-submenu"); | |
|
46 | ||
|
47 | var keys = Object.keys(data.kernelspecs).sort(function (a, b) { | |
|
41 | var _sorted_names = function(kernelspecs) { | |
|
42 | // sort kernel names | |
|
43 | return Object.keys(kernelspecs).sort(function (a, b) { | |
|
48 | 44 | // sort by display_name |
|
49 |
var da = |
|
|
50 |
var db = |
|
|
45 | var da = kernelspecs[a].spec.display_name; | |
|
46 | var db = kernelspecs[b].spec.display_name; | |
|
51 | 47 | if (da === db) { |
|
52 | 48 | return 0; |
|
53 | 49 | } else if (da > db) { |
@@ -56,6 +52,14 define([ | |||
|
56 | 52 | return -1; |
|
57 | 53 | } |
|
58 | 54 | }); |
|
55 | }; | |
|
56 | ||
|
57 | KernelSelector.prototype._got_kernelspecs = function(data) { | |
|
58 | var that = this; | |
|
59 | this.kernelspecs = data.kernelspecs; | |
|
60 | var change_kernel_submenu = $("#menu-change-kernel-submenu"); | |
|
61 | var new_notebook_submenu = $("#menu-new-notebook-submenu"); | |
|
62 | var keys = _sorted_names(data.kernelspecs); | |
|
59 | 63 | |
|
60 | 64 | keys.map(function (key) { |
|
61 | 65 | // Create the Kernel > Change kernel submenu |
@@ -160,7 +164,7 define([ | |||
|
160 | 164 | /** set the kernel by name, ensuring kernelspecs have been loaded, first |
|
161 | 165 | |
|
162 | 166 | kernel can be just a kernel name, or a notebook kernelspec metadata |
|
163 |
(name, |
|
|
167 | (name, language_name, display_name). | |
|
164 | 168 | */ |
|
165 | 169 | var that = this; |
|
166 | 170 | if (typeof selected === 'string') { |
@@ -183,18 +187,28 define([ | |||
|
183 | 187 | // only trigger event if value changed |
|
184 | 188 | return; |
|
185 | 189 | } |
|
186 |
var ks = this.kernelspecs |
|
|
190 | var kernelspecs = this.kernelspecs; | |
|
191 | var ks = kernelspecs[selected.name]; | |
|
187 | 192 | if (ks === undefined) { |
|
188 | if (selected.project_name && selected.project_name.length > 0) { | |
|
189 | $.map(this.kernelspecs, function (k) { | |
|
190 |
|
|
|
191 | ks = k; | |
|
193 | var available = _sorted_names(kernelspecs); | |
|
194 | var matches = []; | |
|
195 | if (selected.language_name && selected.language_name.length > 0) { | |
|
196 | $.map(available, function (name) { | |
|
197 | if (kernelspecs[name].spec.language_name.toLowerCase() === selected.language_name.toLowerCase()) { | |
|
198 | matches.push(name); | |
|
192 | 199 | } |
|
193 | 200 | }); |
|
194 | 201 | } |
|
202 | if (matches.length === 1) { | |
|
203 | ks = kernelspecs[matches[0]]; | |
|
204 | } | |
|
195 | 205 | // if still undefined, trigger failure event |
|
196 | 206 | if (ks === undefined) { |
|
197 |
this.events.trigger("spec_not_found.Kernel", |
|
|
207 | this.events.trigger("spec_not_found.Kernel", { | |
|
208 | selected: selected, | |
|
209 | matches: matches, | |
|
210 | available: available, | |
|
211 | }); | |
|
198 | 212 | return; |
|
199 | 213 | } |
|
200 | 214 | } |
@@ -210,15 +224,22 define([ | |||
|
210 | 224 | var that = this; |
|
211 | 225 | var select = $("<select>").addClass('form-control'); |
|
212 | 226 | console.warn("Kernelspec not found:", data); |
|
213 | $.map(this.kernelspecs, function (ks) { | |
|
227 | var names; | |
|
228 | if (data.matches.length > 1) { | |
|
229 | names = data.matches; | |
|
230 | } else { | |
|
231 | names = data.available; | |
|
232 | } | |
|
233 | $.map(names, function (name) { | |
|
234 | var ks = that.kernelspecs[name]; | |
|
214 | 235 | select.append( |
|
215 | $('<option/>').attr('value', ks.name).text(ks.spec.display_name) | |
|
236 | $('<option/>').attr('value', ks.name).text(ks.spec.display_name || ks.name) | |
|
216 | 237 | ); |
|
217 | 238 | }); |
|
218 | 239 | |
|
219 | 240 | var body = $("<form>").addClass("form-inline").append( |
|
220 | 241 | $("<span>").text( |
|
221 | "I couldn't find a kernel matching " + (data.display_name || data.name) + "." + | |
|
242 | "I couldn't find a kernel matching " + (data.selected.display_name || data.name) + "." + | |
|
222 | 243 | " Please select a kernel:" |
|
223 | 244 | ) |
|
224 | 245 | ).append(select); |
@@ -249,7 +249,7 define([ | |||
|
249 | 249 | that.metadata.kernelspec = { |
|
250 | 250 | name: data.name, |
|
251 | 251 | display_name: data.spec.display_name, |
|
252 |
|
|
|
252 | language_name: data.spec.language_name, | |
|
253 | 253 | }; |
|
254 | 254 | // start session if the current session isn't already correct |
|
255 | 255 | if (!(this.session && this.session.kernel && this.session.kernel.name === data.name)) { |
@@ -36,7 +36,7 def _pythonfirst(s): | |||
|
36 | 36 | class KernelSpec(HasTraits): |
|
37 | 37 | argv = List() |
|
38 | 38 | display_name = Unicode() |
|
39 |
|
|
|
39 | language_name = Unicode() | |
|
40 | 40 | env = Dict() |
|
41 | 41 | resource_dir = Unicode() |
|
42 | 42 | |
@@ -55,7 +55,7 class KernelSpec(HasTraits): | |||
|
55 | 55 | d = dict(argv=self.argv, |
|
56 | 56 | env=self.env, |
|
57 | 57 | display_name=self.display_name, |
|
58 |
|
|
|
58 | language_name=self.language_name, | |
|
59 | 59 | ) |
|
60 | 60 | |
|
61 | 61 | return d |
@@ -114,7 +114,7 class KernelSpecManager(HasTraits): | |||
|
114 | 114 | return { |
|
115 | 115 | 'argv': make_ipkernel_cmd(), |
|
116 | 116 | 'display_name': 'Python %i' % (3 if PY3 else 2), |
|
117 |
' |
|
|
117 | 'language_name': 'python', | |
|
118 | 118 | } |
|
119 | 119 | |
|
120 | 120 | @property |
General Comments 0
You need to be logged in to leave comments.
Login now