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