1
0
mirror of https://github.com/sasjs/server.git synced 2026-01-13 00:50:06 +00:00

feat: implement the logic for running python stored programs

This commit is contained in:
2022-08-16 15:51:37 +05:00
parent f736e67517
commit b06993ab9e
12 changed files with 235 additions and 20 deletions

View File

@@ -197,9 +197,41 @@ export class JSSessionController extends SessionController {
}
}
export class PythonSessionController extends SessionController {
protected async createSession(): Promise<Session> {
const sessionId = generateUniqueFileName(generateTimestamp())
const sessionFolder = path.join(getSessionsFolder(), sessionId)
const creationTimeStamp = sessionId.split('-').pop() as string
// death time of session is 15 mins from creation
const deathTimeStamp = (
parseInt(creationTimeStamp) +
15 * 60 * 1000 -
1000
).toString()
const session: Session = {
id: sessionId,
ready: true,
inUse: true,
consumed: false,
completed: false,
creationTimeStamp,
deathTimeStamp,
path: sessionFolder
}
const headersPath = path.join(session.path, 'stpsrv_header.txt')
await createFile(headersPath, 'Content-type: application/json')
this.sessions.push(session)
return session
}
}
export const getSessionController = (
runTime: RunTimeType
): SASSessionController | JSSessionController => {
): SASSessionController | JSSessionController | PythonSessionController => {
if (runTime === RunTimeType.SAS) {
return getSASSessionController()
}
@@ -208,6 +240,10 @@ export const getSessionController = (
return getJSSessionController()
}
if (runTime === RunTimeType.PY) {
return getPythonSessionController()
}
throw new Error('No Runtime is configured')
}
@@ -227,6 +263,14 @@ const getJSSessionController = (): JSSessionController => {
return process.jsSessionController
}
const getPythonSessionController = (): PythonSessionController => {
if (process.pythonSessionController) return process.pythonSessionController
process.pythonSessionController = new PythonSessionController()
return process.pythonSessionController
}
const autoExecContent = `
data _null_;
/* remove the dummy SYSIN */