@platforma-sdk/workflow-tengo 2.8.4 → 2.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/tengo/lib/assets.lib.tengo +6 -0
  2. package/dist/tengo/lib/constants.lib.tengo +3 -0
  3. package/dist/tengo/lib/exec.R.lib.tengo +8 -0
  4. package/dist/tengo/lib/exec.internal.lib.tengo +12 -0
  5. package/dist/tengo/lib/exec.lib.tengo +67 -0
  6. package/dist/tengo/lib/exec.package.lib.tengo +9 -0
  7. package/dist/tengo/lib/exec.python.internal.lib.tengo +1 -0
  8. package/dist/tengo/lib/exec.python.lib.tengo +8 -0
  9. package/dist/tengo/lib/exec.runcmd.lib.tengo +19 -0
  10. package/dist/tengo/lib/exec.runenv.lib.tengo +4 -0
  11. package/dist/tengo/lib/exec.stream.lib.tengo +4 -0
  12. package/dist/tengo/lib/file.internal.lib.tengo +7 -0
  13. package/dist/tengo/lib/file.lib.tengo +3 -0
  14. package/dist/tengo/lib/ll.lib.tengo +24 -0
  15. package/dist/tengo/lib/maps.lib.tengo +8 -0
  16. package/dist/tengo/lib/objects.lib.tengo +2 -0
  17. package/dist/tengo/lib/oop.lib.tengo +3 -0
  18. package/dist/tengo/lib/path.lib.tengo +9 -0
  19. package/dist/tengo/lib/pframes.constants.lib.tengo +3 -0
  20. package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +5 -0
  21. package/dist/tengo/lib/pframes.lib.tengo +5 -0
  22. package/dist/tengo/lib/pframes.ll.lib.tengo +2 -0
  23. package/dist/tengo/lib/pframes.pcolumn.lib.tengo +4 -0
  24. package/dist/tengo/lib/pframes.spec.lib.tengo +26 -0
  25. package/dist/tengo/lib/pframes.util.lib.tengo +134 -0
  26. package/dist/tengo/lib/pframes.xsv.lib.tengo +12 -0
  27. package/dist/tengo/lib/render.lib.tengo +10 -0
  28. package/dist/tengo/lib/sets.lib.tengo +7 -0
  29. package/dist/tengo/lib/slices.lib.tengo +11 -0
  30. package/dist/tengo/lib/smart.lib.tengo +114 -1
  31. package/dist/tengo/lib/test.lib.tengo +32 -0
  32. package/dist/tengo/lib/tpl.lib.tengo +68 -0
  33. package/dist/tengo/lib/tpl.state-await.lib.tengo +14 -0
  34. package/dist/tengo/lib/tpl.util.lib.tengo +5 -0
  35. package/dist/tengo/lib/validation.lib.tengo +44 -0
  36. package/dist/tengo/lib/workdir.lib.tengo +22 -0
  37. package/dist/tengo/lib/workdir.proc.lib.tengo +18 -0
  38. package/dist/tengo/lib/workdir.save.lib.tengo +17 -0
  39. package/dist/tengo/lib/workflow.bobject.lib.tengo +5 -0
  40. package/dist/tengo/lib/workflow.bquery.lib.tengo +25 -0
  41. package/dist/tengo/lib/workflow.constants.lib.tengo +1 -0
  42. package/dist/tengo/lib/workflow.context.lib.tengo +5 -0
  43. package/dist/tengo/lib/workflow.lib.tengo +39 -0
  44. package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
  45. package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
  46. package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
  47. package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
  48. package/dist/tengo/tpl/pframes.aggregate.plj.gz +0 -0
  49. package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
  50. package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
  51. package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
  52. package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
  53. package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
  54. package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
  55. package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
  56. package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
  57. package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
  58. package/package.json +3 -3
@@ -1,4 +1,5 @@
1
1
 
2
+
2
3
  plapi := import("plapi")
3
4
  json := import("json")
4
5
  ll := import("@platforma-sdk/workflow-tengo:ll")
@@ -13,6 +14,7 @@ smart := import("@platforma-sdk/workflow-tengo:smart")
13
14
 
14
15
 
15
16
 
17
+
16
18
  importTemplate := func(tplName) {
17
19
  return smart.resource(plapi.getTemplateId(tplName))
18
20
  }
@@ -27,6 +29,7 @@ return smart.resource(plapi.getTemplateId(tplName))
27
29
 
28
30
 
29
31
 
32
+
30
33
  importSoftware := func(swName) {
31
34
  sw := plapi.getSoftwareInfo(swName)
32
35
  return ll.toStrict({
@@ -47,6 +50,7 @@ descriptor: ll.toStrict(json.decode(sw.descriptor)) // raw sw.json data with sof
47
50
 
48
51
 
49
52
 
53
+
50
54
  isSoftwareInfo := func(toCheck) {
51
55
  if !ll.isMap(toCheck) {
52
56
  return false
@@ -64,6 +68,7 @@ return (ll.fromStrict(toCheck)._type) == "softwareDescriptor"
64
68
 
65
69
 
66
70
 
71
+
67
72
  importAsset := func(assetName) {
68
73
  asset := plapi.getSoftwareInfo(assetName)
69
74
  return ll.toStrict({
@@ -84,6 +89,7 @@ descriptor: ll.toStrict(json.decode(asset.descriptor)) // raw sw.json data with
84
89
 
85
90
 
86
91
 
92
+
87
93
  isAssetInfo := func(toCheck) {
88
94
  if !ll.isMap(toCheck) {
89
95
  return false
@@ -1,9 +1,11 @@
1
1
 
2
+
2
3
  ll := import("@platforma-sdk/workflow-tengo:ll")
3
4
 
4
5
  RTYPE_JSON := { Name: "json/object", Version: "1" }
5
6
 
6
7
  RTYPE_MAP := { Name: "std/map", Version: "1" }
8
+
7
9
  RTYPE_MAP_ALT := { Name: "StdMap", Version: "1" }
8
10
  RTYPE_MAP_EPH := { Name: "EphStdMap", Version: "1" }
9
11
 
@@ -31,6 +33,7 @@ RTYPE_WORKDIR_FILL_RULES := { Name: "WorkdirFill/rules", Version: "1" }
31
33
  RTYPE_WORKDIR_SAVE := { Name: "WorkdirSave", Version: "1" }
32
34
  RTYPE_WORKDIR_SAVE_RULES := { Name: "WorkdirSave/rules", Version: "1" }
33
35
 
36
+
34
37
  RTYPE_JSON_ERROR := { Name: "json/resourceError", Version: "1"}
35
38
 
36
39
  FTYPE_OTW := "OTW" // Generic one-time writable field. The value of this field can be set only once.
@@ -68,6 +68,7 @@ return self
68
68
 
69
69
 
70
70
 
71
+
71
72
  cacheMillis: func(millis) {
72
73
  ll.assert(is_int(millis) && millis > 0, "exec.R.cacheMillis: cache time must be a number of milliseconds")
73
74
  cache = millis * times.millisecond
@@ -78,6 +79,7 @@ return self
78
79
 
79
80
 
80
81
 
82
+
81
83
  cacheSeconds: func(seconds) {
82
84
  ll.assert(is_int(seconds) && seconds > 0, "exec.R.cacheSeconds: cache time must be a number of seconds")
83
85
  cache = seconds * times.second
@@ -88,6 +90,7 @@ return self
88
90
 
89
91
 
90
92
 
93
+
91
94
  cacheMinutes: func(minutes) {
92
95
  ll.assert(is_int(minutes) && minutes > 0, "exec.R.cacheMinutes: cache time must be a number of minutes")
93
96
  cache = minutes * times.minute
@@ -98,6 +101,7 @@ return self
98
101
 
99
102
 
100
103
 
104
+
101
105
  cacheHours: func(hours) {
102
106
  ll.assert(is_int(hours) && hours > 0, "exec.R.cacheHours: cache time must be a number of hours")
103
107
  cache = hours * times.hour
@@ -108,6 +112,7 @@ return self
108
112
 
109
113
 
110
114
 
115
+
111
116
  cacheDays: func(days) {
112
117
  ll.assert(is_int(days) && days > 0, "exec.R.cacheDays: cache time must be a number of days")
113
118
  cache = days * times.hour * 24
@@ -119,6 +124,7 @@ return self
119
124
 
120
125
 
121
126
 
127
+
122
128
  cache: func(time) {
123
129
  ll.assert(
124
130
  is_int(time) && time > times.millisecond,
@@ -151,6 +157,7 @@ self = ll.toStrict(oop.inherit(tpl, {
151
157
 
152
158
 
153
159
 
160
+
154
161
  venv: func() {
155
162
  return tpl.output(_OUTPUT_RUN_ENV, cache)
156
163
  },
@@ -159,6 +166,7 @@ return tpl.output(_OUTPUT_RUN_ENV, cache)
159
166
 
160
167
 
161
168
 
169
+
162
170
  R: func() {
163
171
  return rPkg
164
172
  }
@@ -4,6 +4,7 @@
4
4
 
5
5
 
6
6
 
7
+
7
8
  ll := import("@platforma-sdk/workflow-tengo:ll")
8
9
  json := import("json")
9
10
  times := import("times")
@@ -16,6 +17,7 @@ runcmd := import("@platforma-sdk/workflow-tengo:exec.runcmd")
16
17
  python := import("@platforma-sdk/workflow-tengo:exec.python")
17
18
  R := import("@platforma-sdk/workflow-tengo:exec.R")
18
19
 
20
+
19
21
  _ARG_VAR_PKG := "{pkg}" // abs path to software package
20
22
  _ARG_VAR_JAVA := "{java}" // abs path to 'java' run environment
21
23
  _ARG_VAR_PYTHON := "{python}" // abs path to 'python' run environment
@@ -26,6 +28,7 @@ _ARG_VAR_R_VENV := "{rVenv}" // abs path to 'R' portable virtual environ
26
28
 
27
29
 
28
30
 
31
+
29
32
  _newArg := func(hasVariables, value) {
30
33
  return ll.toStrict({
31
34
  hasVars: hasVariables,
@@ -172,12 +175,15 @@ ll.panic("run environment type %q is not currently supported by workflow-sdk", d
172
175
 
173
176
 
174
177
 
178
+
175
179
  _binPackageCallOptions := func(operationMode, runOptions, variables, descriptor, softPackage) {
176
180
  customPaths := []
177
181
  envs := ll.toStrict({})
178
182
  args := []
179
183
  runEnvType := "binary"
180
184
 
185
+
186
+
181
187
  if (maps.containsKey(descriptor, "runEnv")) {
182
188
  runEnvInfo := _loadRunEnvironment(operationMode, descriptor, runOptions.software.name, softPackage)
183
189
 
@@ -252,6 +258,9 @@ return _binPackageCallOptions("remote", runOptions, variables, binaryDescriptor,
252
258
 
253
259
  binaryRunOptions := func(runOptions) {
254
260
  if (is_undefined(ll.fromStrict(runOptions).software)) {
261
+
262
+
263
+
255
264
  return _directCallOptions(runOptions)
256
265
  }
257
266
 
@@ -272,15 +281,18 @@ ll.panic("Unable to run software %s v%s: 'binary' execution mode is not enabled
272
281
  prepareCommandRun := func(wd, opts) {
273
282
  runBuilder := runcmd.builder(wd)
274
283
 
284
+
275
285
  for varInfo in opts.variables {
276
286
  runBuilder.ref(varInfo.refName, varInfo.reference)
277
287
  runBuilder.substitutionRule(varInfo.varName, varInfo.refName)
278
288
  }
279
289
 
290
+
280
291
  for p in opts.customPaths {
281
292
  runBuilder.addToPath(p.value, p.hasVars)
282
293
  }
283
294
 
295
+
284
296
  for name, value in opts.envs {
285
297
  if value.hasVars {
286
298
  runBuilder.envVar(name, value.value)
@@ -1,6 +1,7 @@
1
1
 
2
2
 
3
3
 
4
+
4
5
  ll := import("@platforma-sdk/workflow-tengo:ll")
5
6
  assets := import("@platforma-sdk/workflow-tengo:assets")
6
7
  smart := import("@platforma-sdk/workflow-tengo:smart")
@@ -24,6 +25,7 @@ _UI_TASKS_QUEUE := "ui-tasks"
24
25
 
25
26
 
26
27
 
28
+
27
29
  builder := func() {
28
30
  self := undefined
29
31
 
@@ -43,17 +45,27 @@ queue := _HEAVY_QUEUE
43
45
  cache := 0
44
46
  nErrorLines := 200
45
47
 
48
+
46
49
  filesToAdd := {}
50
+
47
51
  filesToWrite := {}
52
+
48
53
  dirsToCreate := {}
49
54
 
55
+
50
56
  filesToSave := {}
57
+
51
58
  filesContentToSave := {}
59
+
52
60
  fileSetsToSave := {}
61
+
53
62
  fileSetsContentToSave := {}
63
+
54
64
  filesToStream := {}
65
+
55
66
  wdProcessors := {}
56
67
 
68
+
57
69
  assetInfos := {}
58
70
  assetDescriptors := {}
59
71
  assetRules := {}
@@ -71,6 +83,7 @@ self = ll.toStrict({
71
83
 
72
84
 
73
85
 
86
+
74
87
  cmd: func(commandName) {
75
88
  assertEntrypointNotSet()
76
89
 
@@ -83,6 +96,7 @@ return self
83
96
 
84
97
 
85
98
 
99
+
86
100
  software: func(sw) {
87
101
  assertEntrypointNotSet()
88
102
  ll.assert(assets.isSoftwareInfo(sw),
@@ -98,6 +112,7 @@ return self
98
112
 
99
113
 
100
114
 
115
+
101
116
  arg: func(arg) {
102
117
  if is_undefined(arg) {
103
118
  ll.panic("exec: arg can't be undefined")
@@ -111,6 +126,7 @@ return self
111
126
 
112
127
 
113
128
 
129
+
114
130
  env: func(name, value) {
115
131
  validation.assertJsonSchema([name, value], ["string"])
116
132
  envs[name] = value
@@ -121,6 +137,7 @@ return self
121
137
 
122
138
 
123
139
 
140
+
124
141
  envMap: func(envMap) {
125
142
  enum.each(envMap, self.env)
126
143
  return self
@@ -131,6 +148,7 @@ return self
131
148
 
132
149
 
133
150
 
151
+
134
152
  secret: func(secretName, envName) {
135
153
  validation.assertJsonSchema([secretName, envName], ["string"])
136
154
  secrets[envName] = "{secrets."+secretName+"}"
@@ -139,6 +157,7 @@ return self
139
157
 
140
158
 
141
159
 
160
+
142
161
  inHeavyQueue: func() {
143
162
  queue = _HEAVY_QUEUE
144
163
  return self
@@ -146,6 +165,7 @@ return self
146
165
 
147
166
 
148
167
 
168
+
149
169
  inMediumQueue: func() {
150
170
  queue = _MEDIUM_QUEUE
151
171
  return self
@@ -153,6 +173,7 @@ return self
153
173
 
154
174
 
155
175
 
176
+
156
177
  inLightQueue: func() {
157
178
  queue = _LIGHT_QUEUE
158
179
  return self
@@ -160,6 +181,7 @@ return self
160
181
 
161
182
 
162
183
 
184
+
163
185
  inUiQueue: func() {
164
186
  queue = _UI_TASKS_QUEUE
165
187
  return self
@@ -170,6 +192,7 @@ return self
170
192
 
171
193
 
172
194
 
195
+
173
196
  cache: func(time) {
174
197
  ll.assert(
175
198
  is_int(time),
@@ -183,6 +206,7 @@ return self
183
206
 
184
207
 
185
208
 
209
+
186
210
  cacheMillis: func(millis) {
187
211
  ll.assert(is_int(millis) && millis > 0, "cache time must be a number of milliseconds")
188
212
  cache = millis * times.millisecond
@@ -193,6 +217,7 @@ return self
193
217
 
194
218
 
195
219
 
220
+
196
221
  cacheSeconds: func(seconds) {
197
222
  ll.assert(is_int(seconds) && seconds > 0, "cache time must be a number of seconds")
198
223
  cache = seconds * times.second
@@ -203,6 +228,7 @@ return self
203
228
 
204
229
 
205
230
 
231
+
206
232
  cacheMinutes: func(minutes) {
207
233
  ll.assert(is_int(minutes) && minutes > 0, "cache time must be a number of minutes")
208
234
  cache = minutes * times.minute
@@ -213,6 +239,7 @@ return self
213
239
 
214
240
 
215
241
 
242
+
216
243
  cacheHours: func(hours) {
217
244
  ll.assert(is_int(hours) && hours > 0, "cache time must be a number of hours")
218
245
  cache = hours * times.hour
@@ -223,6 +250,7 @@ return self
223
250
 
224
251
 
225
252
 
253
+
226
254
  cacheDays: func(days) {
227
255
  ll.assert(is_int(days) && days > 0, "cache time must be a number of days")
228
256
  cache = days * times.hour * 24
@@ -233,6 +261,7 @@ return self
233
261
 
234
262
 
235
263
 
264
+
236
265
  nErrorLines: func(lines) {
237
266
  ll.assert(
238
267
  is_int(lines) && lines >= 0,
@@ -249,11 +278,14 @@ return self
249
278
 
250
279
 
251
280
 
281
+
252
282
  addAsset: func(asset, destinationDir, ...pathsInArchive) {
253
283
  if (len(pathsInArchive) == 1 && is_array(pathsInArchive[0])) {
284
+
254
285
  pathsInArchive = pathsInArchive[0]
255
286
  }
256
287
  if len(pathsInArchive) == 0 {
288
+
257
289
  pathsInArchive = []
258
290
  }
259
291
 
@@ -283,6 +315,7 @@ return self
283
315
 
284
316
 
285
317
 
318
+
286
319
  cacheAssetMillis: func (asset, millis) {
287
320
  ll.assert(assets.isAssetInfo(asset),
288
321
  "exec.builder.cacheAssetMillis: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
@@ -298,6 +331,7 @@ return self
298
331
 
299
332
 
300
333
 
334
+
301
335
  cacheAssetSeconds: func (asset, seconds) {
302
336
  ll.assert(assets.isAssetInfo(asset),
303
337
  "exec.builder.cacheAssetSeconds: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
@@ -313,6 +347,7 @@ return self
313
347
 
314
348
 
315
349
 
350
+
316
351
  cacheAssetMinutes: func (asset, minutes) {
317
352
  ll.assert(assets.isAssetInfo(asset),
318
353
  "exec.builder.cacheAssetMinutes: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
@@ -328,6 +363,7 @@ return self
328
363
 
329
364
 
330
365
 
366
+
331
367
  cacheAssetHours: func (asset, hours) {
332
368
  ll.assert(assets.isAssetInfo(asset),
333
369
  "exec.builder.cacheAssetHours: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
@@ -343,6 +379,7 @@ return self
343
379
 
344
380
 
345
381
 
382
+
346
383
  cacheAssetDays: func (asset, days) {
347
384
  ll.assert(assets.isAssetInfo(asset),
348
385
  "exec.builder.cacheAssetHours: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
@@ -360,6 +397,7 @@ return self
360
397
 
361
398
 
362
399
 
400
+
363
401
  addFile: func(fileName, file) {
364
402
  fileName = path.canonize(fileName)
365
403
  filesToAdd[fileName] = file
@@ -370,6 +408,7 @@ return self
370
408
 
371
409
 
372
410
 
411
+
373
412
  addFiles: func(filesMap) {
374
413
  enum.each(filesMap, self.addFile)
375
414
  return self
@@ -381,6 +420,7 @@ return self
381
420
 
382
421
 
383
422
 
423
+
384
424
  writeFile: func(fileName, data) {
385
425
  validation.assertJsonSchema(data, ["or",
386
426
  "string",
@@ -398,6 +438,7 @@ return self
398
438
 
399
439
 
400
440
 
441
+
401
442
  mkDir: func(dir) {
402
443
  dir = path.canonize(dir)
403
444
  dirsToCreate = sets.add(dirsToCreate, dir)
@@ -408,6 +449,7 @@ return self
408
449
 
409
450
 
410
451
 
452
+
411
453
  saveFile: func(fileName) {
412
454
  fileName = path.canonize(fileName)
413
455
  sets.add(filesToSave, fileName)
@@ -418,6 +460,7 @@ return self
418
460
 
419
461
 
420
462
 
463
+
421
464
  saveFileContent: func(fileName) {
422
465
  fileName = path.canonize(fileName)
423
466
  sets.add(filesContentToSave, fileName)
@@ -429,6 +472,7 @@ return self
429
472
 
430
473
 
431
474
 
475
+
432
476
  saveFileSet: func(name, regex) {
433
477
  fileSetsToSave[name] = regex
434
478
  return self
@@ -436,6 +480,7 @@ return self
436
480
 
437
481
 
438
482
 
483
+
439
484
  processWorkdir: func(name, tpl, tplArgs) {
440
485
  wdProcessors[name] = {
441
486
  tpl: tpl,
@@ -449,6 +494,7 @@ return self
449
494
 
450
495
 
451
496
 
497
+
452
498
  saveFileSetContent: func(name, regex) {
453
499
  fileSetsContentToSave[name] = regex
454
500
  return self
@@ -458,6 +504,7 @@ return self
458
504
 
459
505
 
460
506
 
507
+
461
508
  streamFile: func(fileName) {
462
509
  fileName = path.canonize(fileName)
463
510
  sets.add(filesToStream, fileName)
@@ -467,6 +514,7 @@ return self
467
514
 
468
515
 
469
516
 
517
+
470
518
  stdoutFileName: func(fileName) {
471
519
  fileName = path.canonize(fileName)
472
520
  stdout = fileName
@@ -475,6 +523,7 @@ return self
475
523
 
476
524
 
477
525
 
526
+
478
527
  stderrFileName: func(fileName) {
479
528
  fileName = path.canonize(fileName)
480
529
  stderr = fileName
@@ -483,6 +532,7 @@ return self
483
532
 
484
533
 
485
534
 
535
+
486
536
  saveStdoutContent: func() {
487
537
  stdoutToValue = true
488
538
  return self
@@ -490,6 +540,7 @@ return self
490
540
 
491
541
 
492
542
 
543
+
493
544
  saveStderrContent: func() {
494
545
  stderrToValue = true
495
546
  return self
@@ -497,6 +548,7 @@ return self
497
548
 
498
549
 
499
550
 
551
+
500
552
  printErrStreamToStdout: func() {
501
553
  stderrToStdout = true
502
554
  return self
@@ -506,6 +558,7 @@ return self
506
558
 
507
559
 
508
560
 
561
+
509
562
  run: func() {
510
563
  if stderrToStdout {
511
564
  stderr = stdout
@@ -521,6 +574,9 @@ if stderrToValue {
521
574
  sets.add(filesContentToSave, stderr)
522
575
  }
523
576
 
577
+
578
+
579
+
524
580
  filesToWriteRefs := maps.mapValues(filesToWrite, func(v) {
525
581
  if smart.isReference(v) { return v }
526
582
  return smart.createValueResource(constants.RTYPE_BINARY_VALUE, v)
@@ -573,6 +629,7 @@ self = ll.toStrict(oop.inherit(tpl, {
573
629
 
574
630
 
575
631
 
632
+
576
633
  getFile: func(fileName) {
577
634
  return tpl.output("files", cache).getFutureInputField(fileName)
578
635
  },
@@ -582,6 +639,7 @@ return tpl.output("files", cache).getFutureInputField(fileName)
582
639
 
583
640
 
584
641
 
642
+
585
643
  getFileContent: func(fileName) {
586
644
  return tpl.output("filesContent", cache).getFutureInputField(fileName)
587
645
  },
@@ -591,6 +649,7 @@ return tpl.output("filesContent", cache).getFutureInputField(fileName)
591
649
 
592
650
 
593
651
 
652
+
594
653
  getFileStream: func(fileName) {
595
654
  return tpl.output("fileStreams", cache).getFutureInputField(fileName, true)
596
655
  },
@@ -600,6 +659,7 @@ return tpl.output("fileStreams", cache).getFutureInputField(fileName, true)
600
659
 
601
660
 
602
661
 
662
+
603
663
  getFileSet: func(fileSetName) {
604
664
  return tpl.output("fileSets", cache).getFutureInputField(fileSetName)
605
665
  },
@@ -609,6 +669,7 @@ return tpl.output("fileSets", cache).getFutureInputField(fileSetName)
609
669
 
610
670
 
611
671
 
672
+
612
673
  getFileSetContent: func(fileSetName) {
613
674
  return tpl.output("fileSetsContent", cache).getFutureInputField(fileSetName)
614
675
  },
@@ -619,30 +680,35 @@ return tpl.output("wdProcessors", cache).getFutureInputField(procName)
619
680
 
620
681
 
621
682
 
683
+
622
684
  getStdoutStream: func() {
623
685
  return self.getFileStream(stdout)
624
686
  },
625
687
 
626
688
 
627
689
 
690
+
628
691
  getStderrStream: func() {
629
692
  return self.getFileStream(stderr)
630
693
  },
631
694
 
632
695
 
633
696
 
697
+
634
698
  getStdoutFile: func() {
635
699
  return self.getFile(stdout)
636
700
  },
637
701
 
638
702
 
639
703
 
704
+
640
705
  getStderrFile: func() {
641
706
  return self.getFile(stderr)
642
707
  },
643
708
 
644
709
 
645
710
 
711
+
646
712
  getStdoutFileContent: func() {
647
713
  if stdoutToValue {
648
714
  return self.getFileContent(stdout)
@@ -652,6 +718,7 @@ ll.panic("stdout was not saved as a content")
652
718
 
653
719
 
654
720
 
721
+
655
722
  getStderrFileContent: func() {
656
723
  if stderrToValue {
657
724
  return self.getFileContent(stderr)
@@ -1,6 +1,7 @@
1
1
 
2
2
 
3
3
 
4
+
4
5
  ll := import("@platforma-sdk/workflow-tengo:ll")
5
6
  smart := import("@platforma-sdk/workflow-tengo:smart")
6
7
  workdir := import("@platforma-sdk/workflow-tengo:workdir")
@@ -68,6 +69,7 @@ self = oop.inherit(res, {
68
69
 
69
70
 
70
71
 
72
+
71
73
  archive: func() {
72
74
  return res.outputs()[_OUTPUT_ARCHIVE]
73
75
  }
@@ -94,6 +96,7 @@ self = oop.inherit(res, {
94
96
 
95
97
 
96
98
 
99
+
97
100
  package: func() {
98
101
  return res.getField(_OUTPUT_PACKAGE)
99
102
  }
@@ -130,6 +133,7 @@ self = oop.inherit(res, {
130
133
 
131
134
 
132
135
 
136
+
133
137
  package: func() {
134
138
  return res.outputs()[_OUTPUT_PACKAGE]
135
139
  }
@@ -149,6 +153,7 @@ _OUTPUT_WD_OUT := "workdirOut"
149
153
 
150
154
 
151
155
 
156
+
152
157
  pkgFileLoader := func(pkg) {
153
158
  ll.assert(smart.isReference(pkg),
154
159
  "package.pkgFileLoader: <pkg> must be reference to installed package. It is usually obtained from package.install().package")
@@ -224,6 +229,7 @@ progress: wdSave.progress,
224
229
 
225
230
 
226
231
 
232
+
227
233
  getFile: func(fileName) {
228
234
  return wdSave.files.getFutureInputField(fileName)
229
235
  },
@@ -233,6 +239,7 @@ return wdSave.files.getFutureInputField(fileName)
233
239
 
234
240
 
235
241
 
242
+
236
243
  getFileContent: func(fileName) {
237
244
  return wdSave.filesContent.getFutureInputField(fileName)
238
245
  }
@@ -250,6 +257,7 @@ return ll.toStrict(self)
250
257
 
251
258
 
252
259
 
260
+
253
261
  loadPackageFile := func(pkg, assetPath) {
254
262
  assets := pkgFileLoader(pkg).
255
263
  saveFile(assetPath).
@@ -268,6 +276,7 @@ progress: assets.progress
268
276
 
269
277
 
270
278
 
279
+
271
280
  loadPackageFileContent := func(pkg, assetPath) {
272
281
  assets := pkgFileLoader(pkg).
273
282
  saveFileContent(assetPath).
@@ -6,6 +6,7 @@ pythonVenvInputSchema := {
6
6
  toolset: "string",
7
7
  dependencies: {"any": validation.reference},
8
8
 
9
+
9
10
  pythonDescriptor: pkg.runEnvDescriptorScheme,
10
11
  python: validation.reference
11
12
  }