@platforma-sdk/workflow-tengo 5.3.9 → 5.4.0

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 (56) hide show
  1. package/dist/index.cjs +1 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/tengo/lib/exec.conda.internal.lib.tengo +14 -0
  5. package/dist/tengo/lib/exec.conda.lib.tengo +156 -0
  6. package/dist/tengo/lib/exec.delayed-compute-allocation.lib.tengo +3 -2
  7. package/dist/tengo/lib/exec.descriptor.lib.tengo +15 -2
  8. package/dist/tengo/lib/exec.load-software.lib.tengo +3 -3
  9. package/dist/tengo/lib/exec.monetization.lib.tengo +2 -2
  10. package/dist/tengo/lib/exec.python.lib.tengo +1 -1
  11. package/dist/tengo/lib/exec.runcmd.lib.tengo +4 -0
  12. package/dist/tengo/lib/exec.runenv.lib.tengo +13 -3
  13. package/dist/tengo/lib/ll.get-future-field-default.lib.tengo +2 -2
  14. package/dist/tengo/lib/pframes.export-pframe.lib.tengo +2 -2
  15. package/dist/tengo/lib/validation.lib.tengo +6 -1
  16. package/dist/tengo/tpl/anonymize.deanonymize.plj.gz +0 -0
  17. package/dist/tengo/tpl/anonymize.impl.plj.gz +0 -0
  18. package/dist/tengo/tpl/check_network.create_workdir_from_storage.plj.gz +0 -0
  19. package/dist/tengo/tpl/check_network.download_blob.plj.gz +0 -0
  20. package/dist/tengo/tpl/check_network.run_hello_world.plj.gz +0 -0
  21. package/dist/tengo/tpl/check_network.run_hello_world_py.plj.gz +0 -0
  22. package/dist/tengo/tpl/check_network.upload_blob.plj.gz +0 -0
  23. package/dist/tengo/tpl/check_network.upload_template.plj.gz +0 -0
  24. package/dist/tengo/tpl/check_network.workdir_type_name_extractor.plj.gz +0 -0
  25. package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
  26. package/dist/tengo/tpl/exec.conda.create-env.plj.gz +0 -0
  27. package/dist/tengo/tpl/exec.delayed-compute-allocation.impl.plj.gz +0 -0
  28. package/dist/tengo/tpl/exec.exec-impl.plj.gz +0 -0
  29. package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
  30. package/dist/tengo/tpl/exec.load-software.impl.plj.gz +0 -0
  31. package/dist/tengo/tpl/exec.monetization_info.plj.gz +0 -0
  32. package/dist/tengo/tpl/exec.monetization_to_json.plj.gz +0 -0
  33. package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
  34. package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
  35. package/dist/tengo/tpl/exec.python.venv-bin-path.plj.gz +0 -0
  36. package/dist/tengo/tpl/ll.get-field.plj.gz +0 -0
  37. package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
  38. package/dist/tengo/tpl/pframes.export-parquet-pcolumn-chunk.plj.gz +0 -0
  39. package/dist/tengo/tpl/pframes.export-pframe-for-ui.plj.gz +0 -0
  40. package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
  41. package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
  42. package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
  43. package/dist/tengo/tpl/pframes.parse-to-json.plj.gz +0 -0
  44. package/dist/tengo/tpl/pframes.process-pcolumn-data.plj.gz +0 -0
  45. package/dist/tengo/tpl/pframes.remove-nulls.plj.gz +0 -0
  46. package/dist/tengo/tpl/pframes.slice-data.plj.gz +0 -0
  47. package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
  48. package/dist/tengo/tpl/pframes.xsv-import-if-not-null.plj.gz +0 -0
  49. package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
  50. package/dist/tengo/tpl/pt.import-dir.plj.gz +0 -0
  51. package/dist/tengo/tpl/pt.workflow-run.plj.gz +0 -0
  52. package/dist/tengo/tpl/waiter.waiter.plj.gz +0 -0
  53. package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
  54. package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
  55. package/dist/tengo/tpl/workflow.query-anchored.plj.gz +0 -0
  56. package/package.json +3 -3
package/dist/index.cjs CHANGED
@@ -23,6 +23,7 @@ module.exports = { Templates: {
23
23
  'check_network.upload_blob': { type: 'from-file', path: require.resolve('./tengo/tpl/check_network.upload_blob.plj.gz') },
24
24
  'check_network.upload_template': { type: 'from-file', path: require.resolve('./tengo/tpl/check_network.upload_template.plj.gz') },
25
25
  'exec.R.create-renv': { type: 'from-file', path: require.resolve('./tengo/tpl/exec.R.create-renv.plj.gz') },
26
+ 'exec.conda.create-env': { type: 'from-file', path: require.resolve('./tengo/tpl/exec.conda.create-env.plj.gz') },
26
27
  'exec.exec-impl': { type: 'from-file', path: require.resolve('./tengo/tpl/exec.exec-impl.plj.gz') },
27
28
  'exec.monetization_info': { type: 'from-file', path: require.resolve('./tengo/tpl/exec.monetization_info.plj.gz') },
28
29
  'exec.python.create-venv': { type: 'from-file', path: require.resolve('./tengo/tpl/exec.python.create-venv.plj.gz') },
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  declare type TemplateFromFile = { readonly type: "from-file"; readonly path: string; };
2
- declare type TplName = "ll.get-field" | "pframes.export-parquet-pcolumn-chunk" | "pframes.export-single-pcolumn" | "pframes.import-dir" | "pframes.remove-nulls" | "pt.import-dir" | "waiter.waiter" | "workdir.save" | "workflow.build-ctx" | "workflow.query-anchored" | "anonymize.deanonymize" | "anonymize.impl" | "check_network.workdir_type_name_extractor" | "exec.delayed-compute-allocation.impl" | "exec.monetization_to_json" | "exec.python.install-deps" | "exec.python.venv-bin-path" | "pframes.export-multiple-pcolumns" | "pframes.slice-data" | "check_network.create_workdir_from_storage" | "check_network.download_blob" | "check_network.upload_blob" | "check_network.upload_template" | "exec.R.create-renv" | "exec.exec-impl" | "exec.monetization_info" | "exec.python.create-venv" | "pframes.parse-to-json" | "exec.load-software.impl" | "exec.exec" | "pt.workflow-run" | "check_network.run_hello_world" | "check_network.run_hello_world_py" | "pframes.xsv-export-pframe" | "pframes.xsv-import-if-not-null" | "pframes.xsv-import-map" | "pframes.process-pcolumn-data" | "pframes.export-pframe" | "pframes.export-pframe-for-ui";
2
+ declare type TplName = "ll.get-field" | "pframes.export-parquet-pcolumn-chunk" | "pframes.export-single-pcolumn" | "pframes.import-dir" | "pframes.remove-nulls" | "pt.import-dir" | "waiter.waiter" | "workdir.save" | "workflow.build-ctx" | "workflow.query-anchored" | "anonymize.deanonymize" | "anonymize.impl" | "check_network.workdir_type_name_extractor" | "exec.delayed-compute-allocation.impl" | "exec.monetization_to_json" | "exec.python.install-deps" | "exec.python.venv-bin-path" | "pframes.export-multiple-pcolumns" | "pframes.slice-data" | "check_network.create_workdir_from_storage" | "check_network.download_blob" | "check_network.upload_blob" | "check_network.upload_template" | "exec.R.create-renv" | "exec.conda.create-env" | "exec.exec-impl" | "exec.monetization_info" | "exec.python.create-venv" | "pframes.parse-to-json" | "exec.load-software.impl" | "exec.exec" | "pt.workflow-run" | "check_network.run_hello_world" | "check_network.run_hello_world_py" | "pframes.xsv-export-pframe" | "pframes.xsv-import-if-not-null" | "pframes.xsv-import-map" | "pframes.process-pcolumn-data" | "pframes.export-pframe" | "pframes.export-pframe-for-ui";
3
3
  declare const Templates: Record<TplName, TemplateFromFile>;
4
4
  export { Templates };
package/dist/index.js CHANGED
@@ -24,6 +24,7 @@ export const Templates = {
24
24
  'check_network.upload_blob': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/check_network.upload_blob.plj.gz') },
25
25
  'check_network.upload_template': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/check_network.upload_template.plj.gz') },
26
26
  'exec.R.create-renv': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/exec.R.create-renv.plj.gz') },
27
+ 'exec.conda.create-env': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/exec.conda.create-env.plj.gz') },
27
28
  'exec.exec-impl': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/exec.exec-impl.plj.gz') },
28
29
  'exec.monetization_info': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/exec.monetization_info.plj.gz') },
29
30
  'exec.python.create-venv': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/exec.python.create-venv.plj.gz') },
@@ -0,0 +1,14 @@
1
+ ll := import("@platforma-sdk/workflow-tengo:ll")
2
+ validation := import("@platforma-sdk/workflow-tengo:validation")
3
+ desc := import("@platforma-sdk/workflow-tengo:exec.descriptor")
4
+
5
+ condaEnvInputSchema := {
6
+ "condaPackage": validation.reference,
7
+ "condaDescriptor": desc.condaScheme,
8
+
9
+ "forceRecreate,?": "number"
10
+ }
11
+
12
+ export ll.toStrict({
13
+ condaEnvInputSchema : condaEnvInputSchema
14
+ })
@@ -0,0 +1,156 @@
1
+ json := import("json")
2
+ times := import("times")
3
+
4
+ ll := import("@platforma-sdk/workflow-tengo:ll")
5
+ oop := import("@platforma-sdk/workflow-tengo:oop")
6
+ validation := import("@platforma-sdk/workflow-tengo:validation")
7
+ assets := import("@platforma-sdk/workflow-tengo:assets")
8
+ smart := import("@platforma-sdk/workflow-tengo:smart")
9
+ render := import("@platforma-sdk/workflow-tengo:render")
10
+ pkg := import("@platforma-sdk/workflow-tengo:exec.package")
11
+ internal := import("@platforma-sdk/workflow-tengo:exec.conda.internal")
12
+ desc := import("@platforma-sdk/workflow-tengo:exec.descriptor")
13
+
14
+ _OUTPUT_RUN_ENV := "runEnv"
15
+
16
+ createEnvTpl := assets.importTemplate("@platforma-sdk/workflow-tengo:exec.conda.create-env")
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+ condaBuilder := func(descriptor) {
25
+ self := undefined
26
+
27
+ validation.assertType(descriptor, desc.condaScheme, "exec.conda.builder: <descriptor> must be conda software specification")
28
+ ll.assert(descriptor.type == "conda", "exec.conda.builder: <descriptor> must be conda software specification, not %q", descriptor.type)
29
+ condaDescriptor := ll.fromStrict(descriptor)
30
+ softwareRef := undefined
31
+
32
+ cache := 0
33
+
34
+ self = {
35
+
36
+
37
+
38
+
39
+
40
+ software: func(pkgRef) {
41
+ validation.assertType(pkgRef, validation.reference, "exec.conda.software: <pkgRef> must be a reference to software package")
42
+
43
+ softwareRef = pkgRef
44
+ return self
45
+ },
46
+
47
+
48
+
49
+
50
+
51
+
52
+ cacheMillis: func(millis) {
53
+ ll.assert(is_int(millis) && millis > 0, "exec.conda.cacheMillis: cache time must be a number of milliseconds")
54
+ cache = millis * times.millisecond
55
+ return self
56
+ },
57
+
58
+
59
+
60
+
61
+
62
+
63
+ cacheSeconds: func(seconds) {
64
+ ll.assert(is_int(seconds) && seconds > 0, "exec.conda.cacheSeconds: cache time must be a number of seconds")
65
+ cache = seconds * times.second
66
+ return self
67
+ },
68
+
69
+
70
+
71
+
72
+
73
+
74
+ cacheMinutes: func(minutes) {
75
+ ll.assert(is_int(minutes) && minutes > 0, "exec.conda.cacheMinutes: cache time must be a number of minutes")
76
+ cache = minutes * times.minute
77
+ return self
78
+ },
79
+
80
+
81
+
82
+
83
+
84
+
85
+ cacheHours: func(hours) {
86
+ ll.assert(is_int(hours) && hours > 0, "exec.conda.cacheHours: cache time must be a number of hours")
87
+ cache = hours * times.hour
88
+ return self
89
+ },
90
+
91
+
92
+
93
+
94
+
95
+
96
+ cacheDays: func(days) {
97
+ ll.assert(is_int(days) && days > 0, "exec.conda.cacheDays: cache time must be a number of days")
98
+ cache = days * times.hour * 24
99
+ return self
100
+ },
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+ build: func() {
109
+ if (is_undefined(softwareRef)) {
110
+
111
+ archive := pkg.get(condaDescriptor.registry, condaDescriptor.package).archive()
112
+ softwareRef = pkg.install(archive).package()
113
+ }
114
+
115
+ envInputs := {
116
+ condaPackage: softwareRef,
117
+ condaDescriptor: condaDescriptor,
118
+
119
+ forceRecreate: 1 // increment to force venv re-creation in blocks
120
+ }
121
+
122
+ validation.assertType(envInputs, internal.condaEnvInputSchema, "invalid conda environment configuration")
123
+ tpl := render.create(createEnvTpl, envInputs)
124
+
125
+ self := undefined
126
+ self = ll.toStrict(oop.inherit(tpl, {
127
+
128
+
129
+
130
+
131
+
132
+ conda: func() {
133
+ return softwareRef
134
+ },
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+ env: func() {
143
+ return tpl.output(_OUTPUT_RUN_ENV, cache)
144
+ }
145
+ }))
146
+
147
+ return self
148
+ }
149
+ }
150
+
151
+ return self
152
+ }
153
+
154
+ export ll.toStrict({
155
+ condaBuilder : condaBuilder
156
+ })
@@ -1,3 +1,4 @@
1
+ ll := import("@platforma-sdk/workflow-tengo:ll")
1
2
  render := import("@platforma-sdk/workflow-tengo:render")
2
3
  smart := import("@platforma-sdk/workflow-tengo:smart")
3
4
  assets := import("@platforma-sdk/workflow-tengo:assets")
@@ -38,6 +39,6 @@ create := func(workdir, req) {
38
39
  return delayedComputeAllocation.output("allocation")
39
40
  }
40
41
 
41
- export {
42
+ export ll.toStrict({
42
43
  create: create
43
- }
44
+ })
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
 
5
+ ll := import("@platforma-sdk/workflow-tengo:ll")
5
6
 
6
7
  runEnvScheme := {
7
8
  registry: "string",
@@ -22,6 +23,17 @@ binaryScheme := {
22
23
  "runEnv,?": runEnvScheme
23
24
  }
24
25
 
26
+ condaScheme := {
27
+ registry: "string",
28
+ package: "string",
29
+ cmd: ["string"],
30
+ "envVars,?": ["string"],
31
+
32
+ "micromamba-version": "string",
33
+ "conda-root-dir": "string",
34
+ spec: "string"
35
+ }
36
+
25
37
  assetScheme := {
26
38
  registry: "string",
27
39
  package: "string",
@@ -43,10 +55,11 @@ scheme := {
43
55
  "local,?": localScheme
44
56
  }
45
57
 
46
- export {
58
+ export ll.toStrict({
47
59
  runEnvScheme: runEnvScheme,
48
60
  binaryScheme: binaryScheme,
61
+ condaScheme: condaScheme,
49
62
  assetScheme: assetScheme,
50
63
  localScheme: localScheme,
51
64
  scheme: scheme
52
- }
65
+ })
@@ -2,10 +2,10 @@
2
2
 
3
3
 
4
4
 
5
+ ll := import("@platforma-sdk/workflow-tengo:ll")
5
6
  render := import("@platforma-sdk/workflow-tengo:render")
6
7
  smart := import("@platforma-sdk/workflow-tengo:smart")
7
8
  assets := import("@platforma-sdk/workflow-tengo:assets")
8
- ll := import("@platforma-sdk/workflow-tengo:ll")
9
9
 
10
10
  times := import("times")
11
11
 
@@ -27,6 +27,6 @@ loadSoftware := func(software) {
27
27
  return loadSoftwareResult.output("plan", 9 * times.hour * 24)
28
28
  }
29
29
 
30
- export {
30
+ export ll.toStrict({
31
31
  loadSoftware: loadSoftware
32
- }
32
+ })
@@ -143,6 +143,6 @@ builder := func(productKey) {
143
143
  return self
144
144
  }
145
145
 
146
- export {
146
+ export ll.toStrict({
147
147
  builder: builder
148
- }
148
+ })
@@ -129,7 +129,7 @@ pythonVenvBuilder := func() {
129
129
  },
130
130
 
131
131
  build: func() {
132
- depsMap := runenv.loadDependencyFiles(softwareRef, dependencies)
132
+ depsMap := runenv.loadFilesFromPackage(softwareRef, dependencies)
133
133
 
134
134
  archive := pkg.get(pythonDescriptor.registry, pythonDescriptor.package).archive()
135
135
  pythonPkg := pkg.install(archive).package()
@@ -2,6 +2,8 @@
2
2
 
3
3
 
4
4
 
5
+ text := import("text")
6
+
5
7
  ll := import("@platforma-sdk/workflow-tengo:ll")
6
8
  validation := import("@platforma-sdk/workflow-tengo:validation")
7
9
  feats := import("@platforma-sdk/workflow-tengo:feats")
@@ -385,6 +387,8 @@ _createAbstractRunCommandPlan := func(state, returnSelfFn) {
385
387
 
386
388
 
387
389
  substitutionRule: func(varName, refKey) {
390
+ validation.assert(!text.contains(varName, "-"), "runcmd.plan.substitutionRule: varName must not contain '-' character: it is interpreted as 'minus' sign")
391
+
388
392
  state.options.substRules[varName] = refKey
389
393
  return returnSelfFn()
390
394
  },
@@ -94,7 +94,17 @@ saveBuilder := func(wd) {
94
94
  return self
95
95
  }
96
96
 
97
- loadDependencyFiles := func(packageRef, dependencies) {
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+ loadFilesFromPackage := func(packageRef, dependencies) {
98
108
  if len(dependencies) == 0 {
99
109
  return {}
100
110
  }
@@ -115,6 +125,6 @@ loadDependencyFiles := func(packageRef, dependencies) {
115
125
  }
116
126
 
117
127
  export ll.toStrict({
118
- saveBuilder : saveBuilder,
119
- loadDependencyFiles : loadDependencyFiles
128
+ saveBuilder : saveBuilder,
129
+ loadFilesFromPackage : loadFilesFromPackage
120
130
  })
@@ -132,6 +132,6 @@ getFutureFieldWithDefault := func(from, name, fieldType, isEph, ...options) {
132
132
  return resultFieldId
133
133
  }
134
134
 
135
- export {
135
+ export plapi.mapToStrict({
136
136
  getFutureFieldWithDefault: getFutureFieldWithDefault
137
- }
137
+ })
@@ -129,6 +129,6 @@ exportPFrame := func(pfResource, skipHideDataFromUI) {
129
129
  return result.build()
130
130
  }
131
131
 
132
- export {
132
+ export ll.toStrict({
133
133
  exportPFrame: exportPFrame
134
- }
134
+ })
@@ -381,7 +381,12 @@ assert := func(condition, msg, ...args) {
381
381
 
382
382
 
383
383
  assertType := func(value, schema, ...failMsg) {
384
- r := _validateJson(value, schema, "")
384
+ r := undefined
385
+ if (is_undefined(schema)) {
386
+ r = fail("", "no schema provided for value. To require value to be undefined, simply use is_undefined() check")
387
+ } else {
388
+ r = _validateJson(value, schema, "")
389
+ }
385
390
 
386
391
  msg := "type schema validation error"
387
392
  if len(failMsg) > 0 {
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/workflow-tengo",
3
- "version": "5.3.9",
3
+ "version": "5.4.0",
4
4
  "description": "Tengo SDK library",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -18,8 +18,8 @@
18
18
  "dependencies": {
19
19
  "@milaboratories/software-pframes-conv": "2.2.9",
20
20
  "@platforma-open/milaboratories.software-small-binaries": "^1.15.23",
21
- "@platforma-open/milaboratories.software-ptabler": "1.12.9",
22
- "@platforma-open/milaboratories.software-ptexter": "1.1.1"
21
+ "@platforma-open/milaboratories.software-ptexter": "1.1.1",
22
+ "@platforma-open/milaboratories.software-ptabler": "1.12.10"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@platforma-sdk/tengo-builder": "2.3.2"