mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 18:46:40 -05:00
Machine Learning Services Settings (#8968)
* Added two config to Machine Learning Services extension to enable and disable python and r
This commit is contained in:
@@ -30,6 +30,16 @@
|
||||
"type": "object",
|
||||
"title": "%mls.configuration.title%",
|
||||
"properties": {
|
||||
"machineLearningServices.enablePython": {
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "%mls.enablePython.description%"
|
||||
},
|
||||
"machineLearningServices.enableR": {
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "%mls.enableR.description%"
|
||||
},
|
||||
"machineLearningServices.pythonPath": {
|
||||
"type": "string",
|
||||
"default": "python",
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
"mls.command.odbcdriver": "Install ODBC Driver for SQL Server",
|
||||
"mls.command.mlsdocs": "Machine Learning Services Documentation",
|
||||
"mls.configuration.title": "Machine Learning Services configurations",
|
||||
"mls.pythonPath.description": "Local path to a preexisting python installation used by Machine Learning Services.",
|
||||
"mls.rPath.description": "Local path to a preexisting python installation used by Machine Learning Services.",
|
||||
"mls.pythonPath.description": "Local path to a preexisting Python installation used by Machine Learning Services.",
|
||||
"mls.enablePython.description": "Enable Python package management.",
|
||||
"mls.enableR.description": "Enable R package management.",
|
||||
"mls.rPath.description": "Local path to a preexisting R installation used by Machine Learning Services.",
|
||||
"mls.command.dependencies": "Install Machine Learning Services Dependencies"
|
||||
}
|
||||
|
||||
@@ -30,6 +30,8 @@ export const mlsDependenciesCommand = 'mls.command.dependencies';
|
||||
//
|
||||
export const mlsConfigKey = 'machineLearningServices';
|
||||
export const pythonPathConfigKey = 'pythonPath';
|
||||
export const pythonEnabledConfigKey = 'enablePython';
|
||||
export const rEnabledConfigKey = 'enableR';
|
||||
export const rPathConfigKey = 'rPath';
|
||||
|
||||
// Localized texts
|
||||
|
||||
@@ -21,7 +21,6 @@ const defaultRExecutable = 'r';
|
||||
export class Config {
|
||||
|
||||
private _configValues: any;
|
||||
private _mlsConfig: vscode.WorkspaceConfiguration | undefined;
|
||||
|
||||
constructor(private _root: string, private _apiWrapper: ApiWrapper) {
|
||||
}
|
||||
@@ -30,7 +29,7 @@ export class Config {
|
||||
* Loads the config values
|
||||
*/
|
||||
public async load(): Promise<void> {
|
||||
const rawConfig = await fs.readFile(path.join(this._root, 'out', 'configurations', configFileName));
|
||||
const rawConfig = await fs.readFile(path.join(this._root, configFileName));
|
||||
this._configValues = JSON.parse(rawConfig.toString());
|
||||
}
|
||||
|
||||
@@ -62,6 +61,20 @@ export class Config {
|
||||
return this.config.get(constants.pythonPathConfigKey) || defaultPythonExecutable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if python package management is enabled
|
||||
*/
|
||||
public get pythonEnabled(): boolean {
|
||||
return this.config.get(constants.pythonEnabledConfigKey) || false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if r package management is enabled
|
||||
*/
|
||||
public get rEnabled(): boolean {
|
||||
return this.config.get(constants.rEnabledConfigKey) || false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns r path from user settings
|
||||
*/
|
||||
@@ -70,9 +83,6 @@ export class Config {
|
||||
}
|
||||
|
||||
private get config(): vscode.WorkspaceConfiguration {
|
||||
if (!this._mlsConfig) {
|
||||
this._mlsConfig = this._apiWrapper.getConfiguration(constants.mlsConfigKey);
|
||||
}
|
||||
return this._mlsConfig;
|
||||
return this._apiWrapper.getConfiguration(constants.mlsConfigKey);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,6 +132,9 @@ export class PackageManager {
|
||||
}
|
||||
|
||||
private async installRequiredRPackages(startBackgroundOperation: azdata.BackgroundOperation): Promise<void> {
|
||||
if (!this._config.rEnabled) {
|
||||
return;
|
||||
}
|
||||
if (!this._rExecutable) {
|
||||
throw new Error(constants.rConfigError);
|
||||
}
|
||||
@@ -143,6 +146,9 @@ export class PackageManager {
|
||||
* Installs required python packages
|
||||
*/
|
||||
private async installRequiredPythonPackages(): Promise<void> {
|
||||
if (!this._config.pythonEnabled) {
|
||||
return;
|
||||
}
|
||||
if (!this._pythonExecutable) {
|
||||
throw new Error(constants.pythonConfigError);
|
||||
}
|
||||
|
||||
@@ -93,6 +93,9 @@ export class SqlPythonPackageManageProvider extends SqlPackageManageProviderBase
|
||||
* Returns true if the provider can be used
|
||||
*/
|
||||
async canUseProvider(): Promise<boolean> {
|
||||
if (!this._config.pythonEnabled) {
|
||||
return false;
|
||||
}
|
||||
let connection = await this.getCurrentConnection();
|
||||
if (connection && await this._queryRunner.isPythonInstalled(connection)) {
|
||||
return true;
|
||||
|
||||
@@ -92,6 +92,9 @@ export class SqlRPackageManageProvider extends SqlPackageManageProviderBase impl
|
||||
* Returns true if the provider can be used
|
||||
*/
|
||||
async canUseProvider(): Promise<boolean> {
|
||||
if (!this._config.rEnabled) {
|
||||
return false;
|
||||
}
|
||||
let connection = await this.getCurrentConnection();
|
||||
if (connection && await this._queryRunner.isRInstalled(connection)) {
|
||||
return true;
|
||||
|
||||
@@ -192,6 +192,8 @@ describe('Package Manager', () => {
|
||||
testContext.httpClient.setup(x => x.download(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny())).returns(() => Promise.resolve());
|
||||
testContext.config.setup(x => x.pythonExecutable).returns(() => 'python');
|
||||
testContext.config.setup(x => x.rExecutable).returns(() => 'r');
|
||||
testContext.config.setup(x => x.rEnabled).returns(() => true);
|
||||
testContext.config.setup(x => x.pythonEnabled).returns(() => true);
|
||||
let packageManager = new PackageManager(
|
||||
testContext.outputChannel,
|
||||
'',
|
||||
|
||||
@@ -319,6 +319,16 @@ describe('SQL Python Package Manager', () => {
|
||||
should.deepEqual(actual, true);
|
||||
});
|
||||
|
||||
it('canUseProvider Should return false if python is disabled in setting', async function (): Promise<void> {
|
||||
let testContext = createContext();
|
||||
|
||||
let provider = createProvider(testContext);
|
||||
testContext.config.setup(x => x.pythonEnabled).returns(() => false);
|
||||
let actual = await provider.canUseProvider();
|
||||
|
||||
should.deepEqual(actual, false);
|
||||
});
|
||||
|
||||
it('getPackageOverview Should return package info using python packages provider', async function (): Promise<void> {
|
||||
let testContext = createContext();
|
||||
let packagePreview = {
|
||||
@@ -376,6 +386,7 @@ describe('SQL Python Package Manager', () => {
|
||||
|
||||
function createProvider(testContext: TestContext): SqlPythonPackageManageProvider {
|
||||
testContext.config.setup(x => x.pythonExecutable).returns(() => 'python');
|
||||
testContext.config.setup(x => x.pythonEnabled).returns(() => true);
|
||||
return new SqlPythonPackageManageProvider(
|
||||
testContext.outputChannel,
|
||||
testContext.apiWrapper.object,
|
||||
|
||||
@@ -243,6 +243,16 @@ describe('SQL R Package Manager', () => {
|
||||
should.deepEqual(actual, true);
|
||||
});
|
||||
|
||||
it('canUseProvider Should return false if r is disabled in setting', async function (): Promise<void> {
|
||||
let testContext = createContext();
|
||||
|
||||
let provider = createProvider(testContext);
|
||||
testContext.config.setup(x => x.rEnabled).returns(() => false);
|
||||
let actual = await provider.canUseProvider();
|
||||
|
||||
should.deepEqual(actual, false);
|
||||
});
|
||||
|
||||
it('getPackageOverview Should return package info successfully', async function (): Promise<void> {
|
||||
let testContext = createContext();
|
||||
let packagePreview = {
|
||||
@@ -301,6 +311,7 @@ describe('SQL R Package Manager', () => {
|
||||
|
||||
function createProvider(testContext: TestContext): SqlRPackageManageProvider {
|
||||
testContext.config.setup(x => x.rExecutable).returns(() => 'r');
|
||||
testContext.config.setup(x => x.rEnabled).returns(() => true);
|
||||
testContext.config.setup(x => x.rPackagesRepository).returns(() => 'http://cran.r-project.org');
|
||||
return new SqlRPackageManageProvider(
|
||||
testContext.outputChannel,
|
||||
|
||||
Reference in New Issue
Block a user