Change feature flag for SQL kernel to be user preference (#3838)

* Change feature flag for SQL kernel to be user preference

* fix test that was broken

* Tweak package.nls.json to show "(Preview)"
This commit is contained in:
Chris LaFreniere
2019-01-30 17:29:08 -08:00
committed by GitHub
parent 0dab7f02ed
commit 83a6ee0a22
6 changed files with 18 additions and 8 deletions

View File

@@ -26,6 +26,11 @@
"type": "string", "type": "string",
"default": "", "default": "",
"description": "%notebook.pythonPath.description%" "description": "%notebook.pythonPath.description%"
},
"notebook.sqlKernelEnabled": {
"type": "boolean",
"default": false,
"description": "%notebook.sqlKernelEnabled.description%"
} }
} }
}, },

View File

@@ -4,6 +4,7 @@
"notebook.configuration.title": "Notebook configuration", "notebook.configuration.title": "Notebook configuration",
"notebook.enabled.description": "Enable viewing notebook files using built-in notebook editor.", "notebook.enabled.description": "Enable viewing notebook files using built-in notebook editor.",
"notebook.pythonPath.description": "Local path to python installation used by Notebooks.", "notebook.pythonPath.description": "Local path to python installation used by Notebooks.",
"notebook.sqlKernelEnabled.description": "Enable SQL kernel in notebook editor (Preview)",
"notebook.command.new": "New Notebook", "notebook.command.new": "New Notebook",
"notebook.command.open": "Open Notebook" "notebook.command.open": "Open Notebook"
} }

View File

@@ -234,7 +234,7 @@ export class NotebookComponent extends AngularDisposable implements OnInit, OnDe
private async loadModel(): Promise<void> { private async loadModel(): Promise<void> {
await this.awaitNonDefaultProvider(); await this.awaitNonDefaultProvider();
let providerId = notebookUtils.sqlNotebooksEnabled() ? 'sql' : this._notebookParams.providers.find(provider => provider !== DEFAULT_NOTEBOOK_PROVIDER); // this is tricky; really should also depend on the connection profile let providerId = notebookUtils.sqlNotebooksEnabled(this.contextKeyService) ? 'sql' : this._notebookParams.providers.find(provider => provider !== DEFAULT_NOTEBOOK_PROVIDER); // this is tricky; really should also depend on the connection profile
this.setContextKeyServiceWithProviderId(providerId); this.setContextKeyServiceWithProviderId(providerId);
this.fillInActionsForCurrentContext(); this.fillInActionsForCurrentContext();
for (let providerId of this._notebookParams.providers) { for (let providerId of this._notebookParams.providers) {
@@ -248,7 +248,7 @@ export class NotebookComponent extends AngularDisposable implements OnInit, OnDe
notificationService: this.notificationService, notificationService: this.notificationService,
notebookManagers: this.notebookManagers, notebookManagers: this.notebookManagers,
standardKernels: this._notebookParams.input.standardKernels, standardKernels: this._notebookParams.input.standardKernels,
providerId: notebookUtils.sqlNotebooksEnabled() ? 'sql' : 'jupyter', // this is tricky; really should also depend on the connection profile providerId: notebookUtils.sqlNotebooksEnabled(this.contextKeyService) ? 'sql' : 'jupyter', // this is tricky; really should also depend on the connection profile
defaultKernel: this._notebookParams.input.defaultKernel, defaultKernel: this._notebookParams.input.defaultKernel,
capabilitiesService: this.capabilitiesService capabilitiesService: this.capabilitiesService
}, false, this.profile); }, false, this.profile);

View File

@@ -12,6 +12,7 @@ import * as pfs from 'vs/base/node/pfs';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { IOutputChannel } from 'vs/workbench/parts/output/common/output'; import { IOutputChannel } from 'vs/workbench/parts/output/common/output';
import { DEFAULT_NOTEBOOK_PROVIDER, DEFAULT_NOTEBOOK_FILETYPE, INotebookService } from 'sql/workbench/services/notebook/common/notebookService'; import { DEFAULT_NOTEBOOK_PROVIDER, DEFAULT_NOTEBOOK_FILETYPE, INotebookService } from 'sql/workbench/services/notebook/common/notebookService';
import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
/** /**
@@ -73,9 +74,9 @@ export function getStandardKernelsForProvider(providerId: string, notebookServic
return <IStandardKernelWithProvider[]>(standardKernels); return <IStandardKernelWithProvider[]>(standardKernels);
} }
// Private feature flag to enable Sql Notebook experience // Feature flag to enable Sql Notebook experience
export function sqlNotebooksEnabled() { export function sqlNotebooksEnabled(contextKeyService: IContextKeyService) {
return process.env['SQLOPS_SQL_NOTEBOOK'] !== undefined; return contextKeyService.contextMatchesRules(ContextKeyExpr.equals('config.notebook.sqlKernelEnabled', true));
} }
export interface IStandardKernelWithProvider { export interface IStandardKernelWithProvider {

View File

@@ -30,6 +30,7 @@ import { Deferred } from 'sql/base/common/promise';
import { SqlSessionManager } from 'sql/workbench/services/notebook/common/sqlSessionManager'; import { SqlSessionManager } from 'sql/workbench/services/notebook/common/sqlSessionManager';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { sqlNotebooksEnabled } from 'sql/parts/notebook/notebookUtils'; import { sqlNotebooksEnabled } from 'sql/parts/notebook/notebookUtils';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
export interface NotebookProviderProperties { export interface NotebookProviderProperties {
provider: string; provider: string;
@@ -88,7 +89,8 @@ export class NotebookService extends Disposable implements INotebookService {
@IStorageService private _storageService: IStorageService, @IStorageService private _storageService: IStorageService,
@IExtensionService extensionService: IExtensionService, @IExtensionService extensionService: IExtensionService,
@IExtensionManagementService extensionManagementService: IExtensionManagementService, @IExtensionManagementService extensionManagementService: IExtensionManagementService,
@IInstantiationService private _instantiationService: IInstantiationService @IInstantiationService private _instantiationService: IInstantiationService,
@IContextKeyService private _contextKeyService: IContextKeyService
) { ) {
super(); super();
this._register(notebookRegistry.onNewRegistration(this.updateRegisteredProviders, this)); this._register(notebookRegistry.onNewRegistration(this.updateRegisteredProviders, this));
@@ -351,7 +353,7 @@ export class NotebookService extends Disposable implements INotebookService {
} }
private registerBuiltInProvider() { private registerBuiltInProvider() {
if (!sqlNotebooksEnabled()) { if (!sqlNotebooksEnabled(this._contextKeyService)) {
let defaultProvider = new BuiltinProvider(); let defaultProvider = new BuiltinProvider();
this.registerProvider(defaultProvider.providerId, defaultProvider); this.registerProvider(defaultProvider.providerId, defaultProvider);
notebookRegistry.registerNotebookProvider({ notebookRegistry.registerNotebookProvider({

View File

@@ -18,6 +18,7 @@ import { NotebookService } from 'sql/workbench/services/notebook/common/notebook
import { INotebookProvider } from 'sql/workbench/services/notebook/common/notebookService'; import { INotebookProvider } from 'sql/workbench/services/notebook/common/notebookService';
import { INotebookManagerDetails, INotebookSessionDetails, INotebookKernelDetails, INotebookFutureDetails } from 'sql/workbench/api/common/sqlExtHostTypes'; import { INotebookManagerDetails, INotebookSessionDetails, INotebookKernelDetails, INotebookFutureDetails } from 'sql/workbench/api/common/sqlExtHostTypes';
import { LocalContentManager } from 'sql/workbench/services/notebook/node/localContentManager'; import { LocalContentManager } from 'sql/workbench/services/notebook/node/localContentManager';
import { ContextKeyServiceStub } from 'sqltest/stubs/contextKeyServiceStub';
suite('MainThreadNotebook Tests', () => { suite('MainThreadNotebook Tests', () => {
@@ -31,7 +32,7 @@ suite('MainThreadNotebook Tests', () => {
let extContext = <IExtHostContext>{ let extContext = <IExtHostContext>{
getProxy: proxyType => mockProxy.object getProxy: proxyType => mockProxy.object
}; };
mockNotebookService = TypeMoq.Mock.ofType(NotebookService); mockNotebookService = TypeMoq.Mock.ofType(NotebookService, undefined, undefined, undefined, undefined, undefined, new ContextKeyServiceStub());
notebookUri = URI.parse('file:/user/default/my.ipynb'); notebookUri = URI.parse('file:/user/default/my.ipynb');
mainThreadNotebook = new MainThreadNotebook(extContext, mockNotebookService.object); mainThreadNotebook = new MainThreadNotebook(extContext, mockNotebookService.object);
}); });