1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-15 16:10:06 +00:00

feat(edit-context): add the ability to edit a given context

This commit is contained in:
Krishna Acondy
2020-09-10 09:14:02 +01:00
parent 3ec6ee2db9
commit 9b0e02f5b7
3 changed files with 87 additions and 2 deletions

View File

@@ -8,7 +8,14 @@ import {
} from './utils' } from './utils'
import * as NodeFormData from 'form-data' import * as NodeFormData from 'form-data'
import * as path from 'path' import * as path from 'path'
import { Job, Session, Context, Folder, CsrfToken } from './types' import {
Job,
Session,
Context,
Folder,
CsrfToken,
EditContextInput
} from './types'
import { JobDefinition } from './types/JobDefinition' import { JobDefinition } from './types/JobDefinition'
import { formatDataForRequest } from './utils/formatDataForRequest' import { formatDataForRequest } from './utils/formatDataForRequest'
import { SessionManager } from './SessionManager' import { SessionManager } from './SessionManager'
@@ -267,6 +274,53 @@ export class SASViyaApiClient {
return context return context
} }
/**
* Updates a compute context on the given server.
* @param contextId - the ID of the context to be deleted.
* @param editedContext - an object with the properties to be updated.
* @param accessToken - an access token for an authorized user.
*/
public async editContext(
contextId: string,
updatedContext: EditContextInput,
accessToken?: string
) {
if (!contextId) {
throw new Error('Invalid context ID.')
}
const headers: any = {
'Content-Type': 'application/json'
}
if (accessToken) {
headers.Authorization = `Bearer ${accessToken}`
}
const { result: context, etag } = await this.request<Context>(
`${this.serverUrl}/compute/contexts/${contextId}`,
{
headers
}
)
// An If-Match header with the value of the last ETag for the context
// is required to be able to update it
// https://developer.sas.com/apis/rest/Compute/#update-a-context-definition
headers['If-Match'] = etag
const updateContextRequest: RequestInit = {
method: 'PUT',
headers,
body: JSON.stringify({ ...context, ...updatedContext })
}
return await this.request<Context>(
`${this.serverUrl}/compute/contexts/${contextId}`,
updateContextRequest
)
}
/** /**
* Deletes a compute context on the given server. * Deletes a compute context on the given server.
* @param contextId - the ID of the context to be deleted. * @param contextId - the ID of the context to be deleted.

View File

@@ -29,7 +29,8 @@ import {
SASjsWaitingRequest, SASjsWaitingRequest,
ServerType, ServerType,
CsrfToken, CsrfToken,
UploadFile UploadFile,
EditContextInput
} from './types' } from './types'
import { SASViyaApiClient } from './SASViyaApiClient' import { SASViyaApiClient } from './SASViyaApiClient'
import { SAS9ApiClient } from './SAS9ApiClient' import { SAS9ApiClient } from './SAS9ApiClient'
@@ -137,6 +138,27 @@ export default class SASjs {
) )
} }
/**
* Updates a compute context on the given server.
* @param contextId - the ID of the context to be deleted.
* @param editedContext - an object with the properties to be updated.
* @param accessToken - an access token for an authorized user.
*/
public async editContext(
contextId: string,
editedContext: EditContextInput,
accessToken?: string
) {
if (this.sasjsConfig.serverType !== ServerType.SASViya) {
throw new Error('This operation is only supported on SAS Viya servers.')
}
return await this.sasViyaApiClient!.editContext(
contextId,
editedContext,
accessToken
)
}
/** /**
* Deletes a compute context on the given server. * Deletes a compute context on the given server.
* @param contextId - the ID of the context to be deleted. * @param contextId - the ID of the context to be deleted.

View File

@@ -4,3 +4,12 @@ export interface Context {
createdBy: string createdBy: string
version: number version: number
} }
export interface EditContextInput {
name?: string
description?: string
launchContext?: { name: string }
environment?: { options?: string[]; autoExecLines?: string[] }
authorizedUsers?: string[]
authorizeAllAuthenticatedUsers?: boolean
}