1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-08 13:00:05 +00:00

feat(context): added getComputeContextById method

This commit is contained in:
Yury Shkoda
2020-09-24 15:53:07 +03:00
parent d60c0850c2
commit 057460467c
36 changed files with 8264 additions and 15 deletions

View File

@@ -12,6 +12,7 @@ import {
Job,
Session,
Context,
ContextAllAttributes,
Folder,
CsrfToken,
EditContextInput,
@@ -224,16 +225,16 @@ export class SASViyaApiClient {
* @param launchContextName - the name of the launcher context used by the compute service.
* @param sharedAccountId - the ID of the account to run the servers for this context.
* @param autoExecLines - the lines of code to execute during session initialization.
* @param authorizedUsers - an optional list of authorized user IDs.
* @param accessToken - an access token for an authorized user.
* @param authorizedUsers - an optional list of authorized user IDs.
*/
public async createContext(
contextName: string,
launchContextName: string,
sharedAccountId: string,
autoExecLines: string[],
authorizedUsers: string[],
accessToken?: string
accessToken?: string,
authorizedUsers?: string[]
) {
if (!contextName) {
throw new Error('Context name is required.')
@@ -313,10 +314,22 @@ export class SASViyaApiClient {
headers.Authorization = `Bearer ${accessToken}`
}
const originalContext = await this.getComputeContextByName(
let originalContext
originalContext = await this.getComputeContextByName(
contextName,
accessToken
)
).catch((_) => {})
// Try to find context by id, when context name has been changed.
if (!originalContext) {
originalContext = await this.getComputeContextById(
editedContext.id!,
accessToken
).catch((err) => {
throw err
})
}
const { result: context, etag } = await this.request<Context>(
`${this.serverUrl}/compute/contexts/${originalContext.id}`,
@@ -1408,9 +1421,7 @@ export class SASViyaApiClient {
const { result: contexts } = await this.request<{ items: Context[] }>(
`${this.serverUrl}/compute/contexts?filter=eq(name, "${contextName}")`,
{ headers }
).catch((err) => {
throw err
})
)
if (!contexts || !(contexts.items && contexts.items.length)) {
throw new Error(
@@ -1421,6 +1432,33 @@ export class SASViyaApiClient {
return contexts.items[0]
}
/**
* Returns a JSON representation of a compute context.
* @param contextId - an id of the context to return.
* @param accessToken - an access token for an authorized user.
*/
public async getComputeContextById(
contextId: string,
accessToken?: string
): Promise<ContextAllAttributes> {
const headers: any = {
'Content-Type': 'application/json'
}
if (accessToken) {
headers.Authorization = `Bearer ${accessToken}`
}
const { result: context } = await this.request<ContextAllAttributes>(
`${this.serverUrl}/compute/contexts/${contextId}`,
{ headers }
).catch((err) => {
throw err
})
return context
}
/**
* Moves a Viya folder to a new location. The folder may be renamed at the same time.
* @param sourceFolder - the full path (eg `/Public/example/myFolder`) or URI of the source folder to be moved. Providing URI instead of path will save one extra request.

View File

@@ -113,16 +113,16 @@ export default class SASjs {
* @param launchContextName - the name of the launcher context used by the compute service.
* @param sharedAccountId - the ID of the account to run the servers for this context as.
* @param autoExecLines - the lines of code to execute during session initialization.
* @param authorizedUsers - an optional list of authorized user IDs.
* @param accessToken - an access token for an authorized user.
* @param authorizedUsers - an optional list of authorized user IDs.
*/
public async createContext(
contextName: string,
launchContextName: string,
sharedAccountId: string,
autoExecLines: string[],
authorizedUsers: string[],
accessToken: string
accessToken: string,
authorizedUsers?: string[]
) {
this.isMethodSupported('createContext', ServerType.SASViya)
@@ -131,8 +131,8 @@ export default class SASjs {
launchContextName,
sharedAccountId,
autoExecLines,
authorizedUsers,
accessToken
accessToken,
authorizedUsers
)
}
@@ -185,6 +185,15 @@ export default class SASjs {
)
}
public async getComputeContextById(contextId: string, accessToken?: string) {
this.isMethodSupported('getComputeContextById', ServerType.SASViya)
return await this.sasViyaApiClient!.getComputeContextById(
contextId,
accessToken
)
}
public async createSession(contextName: string, accessToken: string) {
this.isMethodSupported('createSession', ServerType.SASViya)

View File

@@ -14,4 +14,23 @@ export interface EditContextInput {
attributes?: any
authorizedUsers?: string[]
authorizeAllAuthenticatedUsers?: boolean
id?: string
}
export interface ContextAllAttributes {
attributes: {
reuseServerProcesses: boolean
runServerAs: string
}
modifiedTimeStamp: string
createdBy: string
creationTimeStamp: string
launchType: string
launchContext: {
contextName: string
}
modifiedBy: string
id: string
version: number
name: string
}