Machine Learning Services Extension - External Languages (#9043)

* Added external language list, edit and delete UIs to Machine Learning extension
This commit is contained in:
Leila Lali
2020-02-10 08:58:46 -08:00
committed by GitHub
parent 8c61538a27
commit ac6a27b9c2
31 changed files with 1956 additions and 3 deletions

View File

@@ -36,6 +36,7 @@ export const ObjectExplorerService = 'objectexplorer';
export const CmsService = 'cmsService';
export const DacFxService = 'dacfxService';
export const SchemaCompareService = 'schemaCompareService';
export const LanguageExtensionService = 'languageExtensionService';
export const objectExplorerPrefix: string = 'objectexplorer://';
export const ViewType = 'view';

View File

@@ -536,6 +536,40 @@ export namespace RemoveServerGroupRequest {
}
// ------------------------------- <CMS> ----------------------------------------
// ------------------------------- <Language Extensibility> -----------------------------
export interface LanguageExtensionRequestParam {
ownerUri: string;
}
export interface ExternalLanguageRequestParam extends LanguageExtensionRequestParam {
languageName: string;
}
export interface ExternalLanguageUpdateRequestParam extends LanguageExtensionRequestParam {
language: mssql.ExternalLanguage;
}
export interface LanguageExtensionListResponseParam {
languages: mssql.ExternalLanguage[];
}
export interface ExternalLanguageResponseParam {
}
export namespace LanguageExtensibilityListRequest {
export const type = new RequestType<LanguageExtensionRequestParam, LanguageExtensionListResponseParam, void, void>('languageExtension/list');
}
export namespace LanguageExtensibilityDeleteRequest {
export const type = new RequestType<ExternalLanguageRequestParam, ExternalLanguageResponseParam, void, void>('languageExtension/delete');
}
export namespace LanguageExtensibilityUpdateRequest {
export const type = new RequestType<ExternalLanguageUpdateRequestParam, ExternalLanguageResponseParam, void, void>('languageExtension/update');
}
// ------------------------------- <Schema Compare> -----------------------------
export interface SchemaCompareParams {
operationId: string;

View File

@@ -0,0 +1,71 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { AppContext } from '../appContext';
import { SqlOpsDataClient, ISqlOpsFeature } from 'dataprotocol-client';
import * as constants from '../constants';
import * as mssql from '../mssql';
import * as Utils from '../utils';
import { ClientCapabilities } from 'vscode-languageclient';
import * as contracts from '../contracts';
export class LanguageExtensionService implements mssql.ILanguageExtensionService {
public static asFeature(context: AppContext): ISqlOpsFeature {
return class extends LanguageExtensionService {
constructor(client: SqlOpsDataClient) {
super(context, client);
}
fillClientCapabilities(capabilities: ClientCapabilities): void {
Utils.ensure(capabilities, 'languageExtension')!.languageExtension = true;
}
initialize(): void {
}
};
}
private constructor(context: AppContext, protected readonly client: SqlOpsDataClient) {
context.registerService(constants.LanguageExtensionService, this);
}
public listLanguages(ownerUri: string): Thenable<mssql.ExternalLanguage[]> {
const params: contracts.LanguageExtensionRequestParam = { ownerUri: ownerUri };
return this.client.sendRequest(contracts.LanguageExtensibilityListRequest.type, params).then(
r => {
return r.languages;
},
e => {
this.client.logFailedRequest(contracts.LanguageExtensibilityListRequest.type, e);
return Promise.reject(e);
}
);
}
public updateLanguage(ownerUri: string, language: mssql.ExternalLanguage): Thenable<void> {
const params: contracts.ExternalLanguageUpdateRequestParam = { ownerUri: ownerUri, language: language };
return this.client.sendRequest(contracts.LanguageExtensibilityUpdateRequest.type, params).then(
() => {
},
e => {
this.client.logFailedRequest(contracts.LanguageExtensibilityUpdateRequest.type, e);
return Promise.reject(e);
}
);
}
public deleteLanguage(ownerUri: string, languageName: string): Thenable<void> {
const params: contracts.ExternalLanguageRequestParam = { ownerUri: ownerUri, languageName: languageName };
return this.client.sendRequest(contracts.LanguageExtensibilityDeleteRequest.type, params).then(
() => {
},
e => {
this.client.logFailedRequest(contracts.LanguageExtensibilityDeleteRequest.type, e);
return Promise.reject(e);
}
);
}
}

View File

@@ -38,6 +38,8 @@ export interface IExtension {
readonly schemaCompare: ISchemaCompareService;
readonly languageExtension: ILanguageExtensionService;
readonly dacFx: IDacFxService;
}
@@ -379,6 +381,30 @@ export interface GenerateDeployPlan {
//#endregion
//#region --- Language Extensibility
export interface ExternalLanguageContent {
pathToExtension: string;
extensionFileName: string;
platform?: string;
parameters?: string;
environmentVariables?: string;
isLocalFile: boolean;
}
export interface ExternalLanguage {
name: string;
owner?: string;
contents: ExternalLanguageContent[];
createdDate?: string;
}
export interface ILanguageExtensionService {
listLanguages(ownerUri: string): Thenable<ExternalLanguage[]>;
deleteLanguage(ownerUri: string, languageName: string): Thenable<void>;
updateLanguage(ownerUri: string, language: ExternalLanguage): Thenable<void>;
}
//#endregion
//#region --- cms
/**
*

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { AppContext } from './appContext';
import { IExtension, ICmsService, IDacFxService, ISchemaCompareService, MssqlObjectExplorerBrowser } from './mssql';
import { IExtension, ICmsService, IDacFxService, ISchemaCompareService, MssqlObjectExplorerBrowser, ILanguageExtensionService } from './mssql';
import * as constants from './constants';
import { MssqlObjectExplorerNodeProvider } from './objectExplorerNodeProvider/objectExplorerNodeProvider';
import * as azdata from 'azdata';
@@ -20,6 +20,9 @@ export function createMssqlApi(context: AppContext): IExtension {
get schemaCompare() {
return context.getService<ISchemaCompareService>(constants.SchemaCompareService);
},
get languageExtension() {
return context.getService<ILanguageExtensionService>(constants.LanguageExtensionService);
},
getMssqlObjectExplorerBrowser(): MssqlObjectExplorerBrowser {
return {
getNode: (explorerContext: azdata.ObjectExplorerContext) => {

View File

@@ -21,6 +21,7 @@ import { CmsService } from './cms/cmsService';
import { CompletionExtensionParams, CompletionExtLoadRequest } from './contracts';
import { promises as fs } from 'fs';
import * as nls from 'vscode-nls';
import { LanguageExtensionService } from './languageExtension/languageExtensionService';
const localize = nls.loadMessageBundle();
const outputChannel = vscode.window.createOutputChannel(Constants.serviceName);
@@ -152,6 +153,7 @@ function getClientOptions(context: AppContext): ClientOptions {
AgentServicesFeature,
SerializationFeature,
SchemaCompareService.asFeature(context),
LanguageExtensionService.asFeature(context),
DacFxService.asFeature(context),
CmsService.asFeature(context)
],