1
0
mirror of https://github.com/sasjs/adapter.git synced 2025-12-11 01:14:36 +00:00

Merge branch 'master' into issue77

This commit is contained in:
Krishna Acondy
2020-09-11 07:59:52 +01:00
committed by GitHub
33 changed files with 3858 additions and 46 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -8,7 +8,14 @@ import {
} from './utils'
import * as NodeFormData from 'form-data'
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 { formatDataForRequest } from './utils/formatDataForRequest'
import { SessionManager } from './SessionManager'
@@ -267,6 +274,68 @@ export class SASViyaApiClient {
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
}
).catch((e) => {
console.error(e)
if (e && e.status === 404) {
throw new Error(
`The context with ID ${contextId} was not found on this server.`
)
}
throw new Error(
`An error occurred when fetching the context with ID ${contextId}`
)
})
// 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,
attributes: { ...context.attributes, ...updatedContext.attributes }
})
}
return await this.request<Context>(
`${this.serverUrl}/compute/contexts/${contextId}`,
updateContextRequest
)
}
/**
* Deletes a compute context on the given server.
* @param contextId - the ID of the context to be deleted.

View File

@@ -29,7 +29,8 @@ import {
SASjsWaitingRequest,
ServerType,
CsrfToken,
UploadFile
UploadFile,
EditContextInput
} from './types'
import { SASViyaApiClient } from './SASViyaApiClient'
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.
* @param contextId - the ID of the context to be deleted.

View File

@@ -24,6 +24,7 @@ export class SessionManager {
(new Date().getTime() - new Date(session!.creationTimeStamp).getTime()) /
1000
if (
!session!.attributes ||
secondsSinceSessionCreation >= session!.attributes.sessionInactiveTimeout
) {
await this.createSessions(accessToken)

View File

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