@platforma-sdk/workflow-tengo 2.9.5 → 2.9.7

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 (64) hide show
  1. package/dist/tengo/lib/assets.lib.tengo +52 -52
  2. package/dist/tengo/lib/assets.swinfo.lib.tengo +45 -45
  3. package/dist/tengo/lib/constants.lib.tengo +32 -32
  4. package/dist/tengo/lib/exec.R.internal.lib.tengo +29 -29
  5. package/dist/tengo/lib/exec.R.lib.tengo +166 -166
  6. package/dist/tengo/lib/exec.constants.lib.tengo +4 -4
  7. package/dist/tengo/lib/exec.descriptor.lib.tengo +31 -31
  8. package/dist/tengo/lib/exec.internal.lib.tengo +297 -297
  9. package/dist/tengo/lib/exec.lib.tengo +815 -815
  10. package/dist/tengo/lib/exec.monetization.lib.tengo +130 -130
  11. package/dist/tengo/lib/exec.package.lib.tengo +212 -212
  12. package/dist/tengo/lib/exec.python.internal.lib.tengo +6 -6
  13. package/dist/tengo/lib/exec.python.lib.tengo +146 -146
  14. package/dist/tengo/lib/exec.runcmd.lib.tengo +371 -371
  15. package/dist/tengo/lib/exec.runenv.lib.tengo +92 -92
  16. package/dist/tengo/lib/exec.stream.lib.tengo +40 -40
  17. package/dist/tengo/lib/file.internal.lib.tengo +77 -77
  18. package/dist/tengo/lib/file.lib.tengo +57 -57
  19. package/dist/tengo/lib/ll.lib.tengo +244 -244
  20. package/dist/tengo/lib/maps.lib.tengo +152 -152
  21. package/dist/tengo/lib/objects.lib.tengo +13 -13
  22. package/dist/tengo/lib/oop.lib.tengo +19 -19
  23. package/dist/tengo/lib/path.lib.tengo +125 -125
  24. package/dist/tengo/lib/pframes.constants.lib.tengo +28 -28
  25. package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +33 -33
  26. package/dist/tengo/lib/pframes.lib.tengo +43 -43
  27. package/dist/tengo/lib/pframes.ll.lib.tengo +72 -72
  28. package/dist/tengo/lib/pframes.pcolumn.lib.tengo +49 -49
  29. package/dist/tengo/lib/pframes.spec.lib.tengo +96 -96
  30. package/dist/tengo/lib/pframes.util.lib.tengo +288 -288
  31. package/dist/tengo/lib/pframes.xsv.lib.tengo +272 -272
  32. package/dist/tengo/lib/render.lib.tengo +75 -75
  33. package/dist/tengo/lib/sets.lib.tengo +68 -68
  34. package/dist/tengo/lib/slices.lib.tengo +258 -155
  35. package/dist/tengo/lib/smart.lib.tengo +1069 -1069
  36. package/dist/tengo/lib/test.lib.tengo +161 -161
  37. package/dist/tengo/lib/tpl.lib.tengo +515 -515
  38. package/dist/tengo/lib/tpl.state-await.lib.tengo +240 -240
  39. package/dist/tengo/lib/tpl.util.lib.tengo +9 -9
  40. package/dist/tengo/lib/validation.lib.tengo +378 -378
  41. package/dist/tengo/lib/workdir.lib.tengo +331 -331
  42. package/dist/tengo/lib/workdir.proc.lib.tengo +144 -144
  43. package/dist/tengo/lib/workdir.save.lib.tengo +130 -130
  44. package/dist/tengo/lib/workflow.bobject.lib.tengo +26 -26
  45. package/dist/tengo/lib/workflow.bquery.lib.tengo +165 -165
  46. package/dist/tengo/lib/workflow.constants.lib.tengo +2 -2
  47. package/dist/tengo/lib/workflow.context.lib.tengo +32 -32
  48. package/dist/tengo/lib/workflow.lib.tengo +206 -206
  49. package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
  50. package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
  51. package/dist/tengo/tpl/exec.monetization_to_json.plj.gz +0 -0
  52. package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
  53. package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
  54. package/dist/tengo/tpl/pframes.aggregate.plj.gz +0 -0
  55. package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
  56. package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
  57. package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
  58. package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
  59. package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
  60. package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
  61. package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
  62. package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
  63. package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
  64. package/package.json +2 -2
@@ -1,158 +1,158 @@
1
-
1
+ /** Library for workdir processor templates */
2
2
 
3
3
  tpl := import("@platforma-sdk/workflow-tengo:tpl")
4
4
  ll := import("@platforma-sdk/workflow-tengo:ll")
5
5
  wdSave := import("@platforma-sdk/workflow-tengo:workdir.save")
6
6
 
7
-
7
+ // the template has a defined outputs
8
8
  tpl.defineOutputs(["result", "workdir"])
9
9
 
10
10
  proc := func() {
11
- self := undefined
12
-
13
- self = {
14
-
15
- _wdBefore: undefined,
16
-
17
-
18
-
19
- wdBefore: func() {
20
- if is_undefined(self._wdBefore) {
21
- self._wdBefore = tpl.inputs().workdir
22
- }
23
- return self._wdBefore
24
- },
25
-
26
- _filesInWd: undefined,
27
-
28
-
29
-
30
- filesInWd: func() {
31
- if is_undefined(self._filesInWd) {
32
- self._filesInWd = self.wdBefore().getDataAsJson().files
33
- }
34
-
35
- return self._filesInWd
36
- },
37
-
38
- _wdAfterReadFiles: undefined,
39
-
40
-
41
-
42
- wdAfterReadFiles: func() {
43
- if is_undefined(self._wdAfterReadFiles) {
44
-
45
- if !is_undefined(tpl.inputs().wdAfterReadFiles) {
46
-
47
-
48
-
49
-
50
-
51
- self._wdAfterReadFiles = tpl.inputs().wdAfterReadFiles
52
- } else {
53
-
54
-
55
- self._wdAfterReadFiles = self.wdBefore()
56
- }
57
- }
58
-
59
- return self._wdAfterReadFiles
60
- },
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
- readFiles: func(cb) {
70
- tpl.prepare(func(inputs){
71
- inputs.files = self.filesInWd()
72
-
73
- files := cb(inputs)
74
-
75
- wdBuilder := wdSave.builder(self.wdBefore())
76
- for _, fName in files {
77
- wdBuilder.saveFileContent(fName)
78
- }
79
- wd := wdBuilder.build()
80
-
81
-
82
- preps := {}
83
- for key, fName in files {
84
- preps[key] = wd.getSavedFileContent(fName)
85
- }
86
-
87
- preps.wdAfterReadFiles = wd.getWorkdirAfter()
88
-
89
- return preps
90
- })
91
- },
92
-
93
- _wdFinalBuilder: undefined,
94
-
95
-
96
-
97
- wdFinalBuilder: func() {
98
- if is_undefined(self._wdFinalBuilder) {
99
- self._wdFinalBuilder = wdSave.builder(self.wdAfterReadFiles())
100
- }
101
- return self._wdFinalBuilder
102
- },
103
-
104
-
105
-
106
-
107
-
108
-
109
- saveFile: func(fName) {
110
- self.wdFinalBuilder().saveFile(fName)
111
- return self.wdFinalBuilder().getSavedFile(fName)
112
- },
113
-
114
-
115
-
116
-
117
-
118
-
119
- saveFileContent: func(fName) {
120
- self.wdFinalBuilder().saveFileContent(fName)
121
- return self.wdFinalBuilder().getSavedFileContent(fName)
122
- },
123
-
124
-
125
-
126
-
127
-
128
-
129
-
130
-
131
-
132
- body: func(cb) {
133
- tpl.body(func(inputs) {
134
-
135
- inputs.files = self.filesInWd()
136
- result := cb(inputs)
137
- wd := self.wdFinalBuilder().build()
138
-
139
- return {
140
- result: result,
141
- workdir: wd.getWorkdirAfter()
142
- }
143
- })
144
- }
11
+ self := undefined
12
+
13
+ self = {
14
+
15
+ _wdBefore: undefined,
16
+ /**
17
+ * @return wd: resource - initial working directory resource
18
+ */
19
+ wdBefore: func() {
20
+ if is_undefined(self._wdBefore) {
21
+ self._wdBefore = tpl.inputs().workdir
22
+ }
23
+ return self._wdBefore
24
+ },
25
+
26
+ _filesInWd: undefined,
27
+ /**
28
+ * @return fileNames: string[] - list of file paths currently existing in the working directory
29
+ */
30
+ filesInWd: func() {
31
+ if is_undefined(self._filesInWd) {
32
+ self._filesInWd = self.wdBefore().getDataAsJson().files
33
+ }
34
+
35
+ return self._filesInWd
36
+ },
37
+
38
+ _wdAfterReadFiles: undefined,
39
+ /**
40
+ * @return wd: resource - working directory resource after "readFiles" is done
41
+ */
42
+ wdAfterReadFiles: func() {
43
+ if is_undefined(self._wdAfterReadFiles) {
44
+
45
+ if !is_undefined(tpl.inputs().wdAfterReadFiles) {
46
+
47
+ //
48
+ // this means readFiles was used and we are actually
49
+ // in the 'prepare' render
50
+ //
51
+ self._wdAfterReadFiles = tpl.inputs().wdAfterReadFiles
52
+ } else {
53
+
54
+ // no readFiles
55
+ self._wdAfterReadFiles = self.wdBefore()
56
+ }
57
+ }
58
+
59
+ return self._wdAfterReadFiles
60
+ },
61
+
62
+ /**
63
+ * Select files to read their content and pass it to the body function
64
+ *
65
+ * @param cb: callback - a callback which takes a list of file names (paths) existing in the working directory and
66
+ * returning a map of key -> file name containing files to get content from; each file content will be available in
67
+ * the body inputs with the corresponding key
68
+ */
69
+ readFiles: func(cb) {
70
+ tpl.prepare(func(inputs){
71
+ inputs.files = self.filesInWd()
72
+ // key -> file name
73
+ files := cb(inputs)
74
+
75
+ wdBuilder := wdSave.builder(self.wdBefore())
76
+ for _, fName in files {
77
+ wdBuilder.saveFileContent(fName)
78
+ }
79
+ wd := wdBuilder.build()
80
+
81
+ // run prepare to get file contents in the inputs
82
+ preps := {}
83
+ for key, fName in files {
84
+ preps[key] = wd.getSavedFileContent(fName)
85
+ }
86
+
87
+ preps.wdAfterReadFiles = wd.getWorkdirAfter()
88
+
89
+ return preps
90
+ })
91
+ },
92
+
93
+ _wdFinalBuilder: undefined,
94
+ /**
95
+ * Final workdir builder, after prepare
96
+ */
97
+ wdFinalBuilder: func() {
98
+ if is_undefined(self._wdFinalBuilder) {
99
+ self._wdFinalBuilder = wdSave.builder(self.wdAfterReadFiles())
100
+ }
101
+ return self._wdFinalBuilder
102
+ },
103
+
104
+ /**
105
+ * Save given file.
106
+ *
107
+ * @return ref: reference - a reference to saved file resource
108
+ */
109
+ saveFile: func(fName) {
110
+ self.wdFinalBuilder().saveFile(fName)
111
+ return self.wdFinalBuilder().getSavedFile(fName)
112
+ },
113
+
114
+ /**
115
+ * Save content of a given file.
116
+ *
117
+ * @return ref: reference - a reference to saved file content value resource
118
+ */
119
+ saveFileContent: func(fName) {
120
+ self.wdFinalBuilder().saveFileContent(fName)
121
+ return self.wdFinalBuilder().getSavedFileContent(fName)
122
+ },
123
+
124
+ /**
125
+ * Template body function
126
+ *
127
+ * @param cb: func - a callback function to run in template body; the inputs passed to the body will have the following fields:
128
+ * files: string[] - list of files in workdir
129
+ * args: map - additional arguments of the template processor
130
+ * ...filesContent: resources - fields with the content of files specified in 'readFiles'
131
+ */
132
+ body: func(cb) {
133
+ tpl.body(func(inputs) {
134
+
135
+ inputs.files = self.filesInWd()
136
+ result := cb(inputs)
137
+ wd := self.wdFinalBuilder().build()
138
+
139
+ return {
140
+ result: result,
141
+ workdir: wd.getWorkdirAfter()
142
+ }
143
+ })
144
+ }
145
+ }
146
+
147
+ return ll.toStrict(self)
145
148
  }
146
149
 
147
- return ll.toStrict(self)
148
- }
149
-
150
-
150
+ /** singleton instance */
151
151
  instance := proc()
152
152
 
153
153
  export ll.toStrict({
154
- readFiles: instance.readFiles,
155
- saveFile: instance.saveFile,
156
- saveFileContent: instance.saveFileContent,
157
- body: instance.body
154
+ readFiles: instance.readFiles,
155
+ saveFile: instance.saveFile,
156
+ saveFileContent: instance.saveFileContent,
157
+ body: instance.body
158
158
  })
@@ -1,4 +1,4 @@
1
-
1
+ /** A library providing workdir save resource builder */
2
2
 
3
3
  ll := import("@platforma-sdk/workflow-tengo:ll")
4
4
  oop := import("@platforma-sdk/workflow-tengo:oop")
@@ -15,144 +15,144 @@ _WORKDIR_AFTER_FIELD := "workdirOut"
15
15
  _PROGRESS_FIELD := "progress"
16
16
 
17
17
 
18
-
19
-
20
-
21
-
22
-
23
-
18
+ /**
19
+ * Generates a file save rule for a given file name.
20
+ *
21
+ * @param fileName: string - the name of the file.
22
+ * @return rule: map - the file save rule.
23
+ */
24
24
  getFileSaveRule := func(fileName) {
25
- return {
26
- blobKey: fileName,
27
- type: "file",
28
- filePath: fileName
29
- }
25
+ return {
26
+ blobKey: fileName,
27
+ type: "file",
28
+ filePath: fileName
29
+ }
30
30
  }
31
31
 
32
-
33
-
34
-
35
-
36
-
37
-
32
+ /**
33
+ * Generates a value save rule for a given file name.
34
+ *
35
+ * @param fileName: string - the name of the file.
36
+ * @return rule: map - the value save rule.
37
+ */
38
38
  getContentSaveRule := func(fileName) {
39
- return {
40
- blobKey: fileName,
41
- type: "content",
42
- contentPath: fileName
43
- }
39
+ return {
40
+ blobKey: fileName,
41
+ type: "content",
42
+ contentPath: fileName
43
+ }
44
44
  }
45
45
 
46
-
47
-
48
-
46
+ /**
47
+ * Creates a builder for workdir save resource
48
+ */
49
49
  builder := func(wdBefore) {
50
50
 
51
- super := smart.ephemeralBuilder(constants.RTYPE_WORKDIR_SAVE)
52
-
53
- super.getField(_WORKDIR_IN_FIELD).set(wdBefore)
54
-
55
-
56
- fRules := {}
57
-
58
- cRules := {}
59
-
60
- self := undefined
61
- self = ll.toStrict(oop.inherit(super, {
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
- saveFile: func(fName) {
70
- fRules = sets.add(fRules, fName)
71
- return self
72
- },
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
- saveFileContent: func(fName) {
81
- cRules = sets.add(cRules, fName)
82
- return self
83
- },
84
-
85
-
86
-
87
-
88
- getSavedFiles: func() {
89
- return self.getField(_SAVED_FILES_FIELD)
90
- },
91
-
92
-
93
-
94
-
95
- getSavedFilesContent: func() {
96
- return self.getField(_SAVED_CONTENT_FIELD)
97
- },
98
-
99
-
100
-
101
-
102
- getWorkdirAfter: func() {
103
- return self.getField(_WORKDIR_AFTER_FIELD)
104
- },
105
-
106
-
107
-
108
-
109
- getProgress: func() {
110
- return self.getField(_PROGRESS_FIELD)
111
- },
112
-
113
-
114
-
115
-
116
- getSavedFile: func(fName) {
117
- return self.getSavedFiles().getFutureInputField(fName)
118
- },
119
-
120
-
121
-
122
-
123
- getSavedFileContent: func(fName) {
124
- return self.getSavedFilesContent().getFutureInputField(fName)
125
- },
126
-
127
-
128
-
129
-
130
- build: func() {
131
- rules := []
132
- for fName, _ in fRules {
133
- rules = append(rules, getFileSaveRule(fName))
134
- }
135
- for fName, _ in cRules {
136
- rules = append(rules, getContentSaveRule(fName))
137
- }
138
-
139
- super.getField(_RULES_FIELD).set(
140
- smart.createValueResource(
141
- constants.RTYPE_WORKDIR_SAVE_RULES,
142
- json.encode(rules)
143
- )
144
- )
145
-
146
- resource := super.lockAndBuild()
147
-
148
-
149
- return self
150
- }
151
- }))
152
-
153
- return self
51
+ super := smart.ephemeralBuilder(constants.RTYPE_WORKDIR_SAVE)
52
+ // set input wd
53
+ super.getField(_WORKDIR_IN_FIELD).set(wdBefore)
54
+
55
+ // file save rules
56
+ fRules := {}
57
+ // content save rules
58
+ cRules := {}
59
+
60
+ self := undefined
61
+ self = ll.toStrict(oop.inherit(super, {
62
+
63
+ /**
64
+ * Save file.
65
+ *
66
+ * @param fName: string - file name
67
+ *
68
+ */
69
+ saveFile: func(fName) {
70
+ fRules = sets.add(fRules, fName)
71
+ return self
72
+ },
73
+
74
+ /**
75
+ * Save file content.
76
+ *
77
+ * @param fName: string - file name
78
+ *
79
+ */
80
+ saveFileContent: func(fName) {
81
+ cRules = sets.add(cRules, fName)
82
+ return self
83
+ },
84
+
85
+ /**
86
+ * Get field pointing to saved files map resource
87
+ */
88
+ getSavedFiles: func() {
89
+ return self.getField(_SAVED_FILES_FIELD)
90
+ },
91
+
92
+ /**
93
+ * Get field pointing to saved files content map resource
94
+ */
95
+ getSavedFilesContent: func() {
96
+ return self.getField(_SAVED_CONTENT_FIELD)
97
+ },
98
+
99
+ /**
100
+ * Get field pointing to workdir after resource
101
+ */
102
+ getWorkdirAfter: func() {
103
+ return self.getField(_WORKDIR_AFTER_FIELD)
104
+ },
105
+
106
+ /**
107
+ * Get field pointing to progress resource
108
+ */
109
+ getProgress: func() {
110
+ return self.getField(_PROGRESS_FIELD)
111
+ },
112
+
113
+ /**
114
+ * Get future field pointing to saved file resource
115
+ */
116
+ getSavedFile: func(fName) {
117
+ return self.getSavedFiles().getFutureInputField(fName)
118
+ },
119
+
120
+ /**
121
+ * Get future field pointing to saved file content value resource
122
+ */
123
+ getSavedFileContent: func(fName) {
124
+ return self.getSavedFilesContent().getFutureInputField(fName)
125
+ },
126
+
127
+ /**
128
+ * Build resource
129
+ */
130
+ build: func() {
131
+ rules := []
132
+ for fName, _ in fRules {
133
+ rules = append(rules, getFileSaveRule(fName))
134
+ }
135
+ for fName, _ in cRules {
136
+ rules = append(rules, getContentSaveRule(fName))
137
+ }
138
+
139
+ super.getField(_RULES_FIELD).set(
140
+ smart.createValueResource(
141
+ constants.RTYPE_WORKDIR_SAVE_RULES,
142
+ json.encode(rules)
143
+ )
144
+ )
145
+
146
+ resource := super.lockAndBuild()
147
+
148
+ // still return self to have all the methods
149
+ return self
150
+ }
151
+ }))
152
+
153
+ return self
154
154
  }
155
155
 
156
156
  export ll.toStrict({
157
- builder: builder
157
+ builder: builder
158
158
  })
@@ -1,6 +1,6 @@
1
-
2
-
3
-
1
+ /**
2
+ * Utility functions to work with export objects & p-frames
3
+ */
4
4
 
5
5
  ll := import("@platforma-sdk/workflow-tengo:ll")
6
6
  constants := import("@platforma-sdk/workflow-tengo:constants")
@@ -9,43 +9,43 @@ smart := import("@platforma-sdk/workflow-tengo:smart")
9
9
  validation := import("@platforma-sdk/workflow-tengo:validation")
10
10
 
11
11
 
12
-
12
+ //
13
13
  _pObjectSpecSchema := {
14
- "__options__,closed": "",
14
+ "__options__,closed": "",
15
15
 
16
- "kind": "string",
16
+ "kind": "string",
17
17
 
18
- "valueType,?": `string,regex=json|File|DynamicFile|String|Double|Long|Int`,
18
+ "valueType,?": `string,regex=json|File|DynamicFile|String|Double|Long|Int`,
19
19
 
20
- "name,?": {",any": "string"},
20
+ "name,?": {",any": "string"},
21
21
 
22
- "domain,?": {",any": "string"},
22
+ "domain,?": {",any": "string"},
23
23
 
24
- "axesSpec,?": [{
25
- "type": "string,regex=String",
26
- "name": "string",
27
- "domain,?": {",any": "string"},
28
- "annotations,?": {",any": "string"}
29
- }],
24
+ "axesSpec,?": [{
25
+ "type": "string,regex=String",
26
+ "name": "string",
27
+ "domain,?": {",any": "string"},
28
+ "annotations,?": {",any": "string"}
29
+ }],
30
30
 
31
- "annotations,?": {",any": "string"}
31
+ "annotations,?": {",any": "string"}
32
32
  }
33
33
 
34
34
 
35
-
36
-
37
-
38
-
39
-
35
+ /**
36
+ * Creates export object spec from a given map
37
+ *
38
+ * @param spec: map
39
+ */
40
40
  createSpec := func(spec) {
41
- ll.assert(ll.isMap(spec), "expected map got %v", spec)
42
-
43
-
41
+ ll.assert(ll.isMap(spec), "expected map got %v", spec)
44
42
 
43
+ // @TODO fix validation
44
+ // validation.assertValidJson(spec, _pObjectSpecSchema)
45
45
 
46
- return smart.createValueResource(constants.RTYPE_BOBJECT_SPEC, json.encode(spec))
46
+ return smart.createValueResource(constants.RTYPE_BOBJECT_SPEC, json.encode(spec))
47
47
  }
48
48
 
49
49
  export ll.toStrict({
50
- createSpec: createSpec
50
+ createSpec: createSpec
51
51
  })