@sw-tsdk/plugin-connector 3.13.1 → 3.13.2-next.3dfd44a
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.
- package/README.md +18 -18
- package/lib/commands/connector/build.js +168 -44
- package/lib/commands/connector/build.js.map +1 -1
- package/lib/commands/connector/sign.js +108 -12
- package/lib/commands/connector/sign.js.map +1 -1
- package/lib/commands/connector/validate.js +110 -10
- package/lib/commands/connector/validate.js.map +1 -1
- package/lib/commands/migrator/convert.d.ts +3 -0
- package/lib/commands/migrator/convert.js +201 -20
- package/lib/commands/migrator/convert.js.map +1 -1
- package/lib/templates/migrator-runners/plugin_override.txt +76 -4
- package/lib/templates/migrator-runners/runner_override.txt +30 -0
- package/lib/templates/migrator-runners/script_override.txt +77 -5
- package/lib/templates/swimlane/__init__.py +18 -0
- package/lib/templates/swimlane/core/__init__.py +0 -0
- package/lib/templates/swimlane/core/adapters/__init__.py +10 -0
- package/lib/templates/swimlane/core/adapters/app.py +59 -0
- package/lib/templates/swimlane/core/adapters/app_revision.py +49 -0
- package/lib/templates/swimlane/core/adapters/helper.py +84 -0
- package/lib/templates/swimlane/core/adapters/record.py +468 -0
- package/lib/templates/swimlane/core/adapters/record_revision.py +43 -0
- package/lib/templates/swimlane/core/adapters/report.py +65 -0
- package/lib/templates/swimlane/core/adapters/task.py +58 -0
- package/lib/templates/swimlane/core/adapters/usergroup.py +183 -0
- package/lib/templates/swimlane/core/bulk.py +48 -0
- package/lib/templates/swimlane/core/cache.py +165 -0
- package/lib/templates/swimlane/core/client.py +466 -0
- package/lib/templates/swimlane/core/cursor.py +100 -0
- package/lib/templates/swimlane/core/fields/__init__.py +46 -0
- package/lib/templates/swimlane/core/fields/attachment.py +82 -0
- package/lib/templates/swimlane/core/fields/base/__init__.py +15 -0
- package/lib/templates/swimlane/core/fields/base/cursor.py +90 -0
- package/lib/templates/swimlane/core/fields/base/field.py +149 -0
- package/lib/templates/swimlane/core/fields/base/multiselect.py +116 -0
- package/lib/templates/swimlane/core/fields/comment.py +48 -0
- package/lib/templates/swimlane/core/fields/datetime.py +112 -0
- package/lib/templates/swimlane/core/fields/history.py +28 -0
- package/lib/templates/swimlane/core/fields/list.py +266 -0
- package/lib/templates/swimlane/core/fields/number.py +38 -0
- package/lib/templates/swimlane/core/fields/reference.py +169 -0
- package/lib/templates/swimlane/core/fields/text.py +30 -0
- package/lib/templates/swimlane/core/fields/tracking.py +10 -0
- package/lib/templates/swimlane/core/fields/usergroup.py +137 -0
- package/lib/templates/swimlane/core/fields/valueslist.py +70 -0
- package/lib/templates/swimlane/core/resolver.py +46 -0
- package/lib/templates/swimlane/core/resources/__init__.py +0 -0
- package/lib/templates/swimlane/core/resources/app.py +136 -0
- package/lib/templates/swimlane/core/resources/app_revision.py +43 -0
- package/lib/templates/swimlane/core/resources/attachment.py +64 -0
- package/lib/templates/swimlane/core/resources/base.py +55 -0
- package/lib/templates/swimlane/core/resources/comment.py +33 -0
- package/lib/templates/swimlane/core/resources/record.py +499 -0
- package/lib/templates/swimlane/core/resources/record_revision.py +44 -0
- package/lib/templates/swimlane/core/resources/report.py +259 -0
- package/lib/templates/swimlane/core/resources/revision_base.py +69 -0
- package/lib/templates/swimlane/core/resources/task.py +16 -0
- package/lib/templates/swimlane/core/resources/usergroup.py +166 -0
- package/lib/templates/swimlane/core/search.py +31 -0
- package/lib/templates/swimlane/core/wrappedsession.py +12 -0
- package/lib/templates/swimlane/exceptions.py +191 -0
- package/lib/templates/swimlane/utils/__init__.py +132 -0
- package/lib/templates/swimlane/utils/date_validator.py +4 -0
- package/lib/templates/swimlane/utils/list_validator.py +7 -0
- package/lib/templates/swimlane/utils/str_validator.py +10 -0
- package/lib/templates/swimlane/utils/version.py +101 -0
- package/lib/transformers/base-transformer.js +61 -14
- package/lib/transformers/base-transformer.js.map +1 -1
- package/lib/transformers/connector-generator.d.ts +104 -2
- package/lib/transformers/connector-generator.js +1234 -51
- package/lib/transformers/connector-generator.js.map +1 -1
- package/lib/types/migrator-types.d.ts +22 -0
- package/lib/types/migrator-types.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +6 -6
|
@@ -7,6 +7,7 @@ const docker_1 = require("@sw-tsdk/docker");
|
|
|
7
7
|
const core_2 = require("@oclif/core");
|
|
8
8
|
const node_fs_1 = require("node:fs");
|
|
9
9
|
const core_3 = require("@sw-tsdk/core");
|
|
10
|
+
const node_stream_1 = require("node:stream");
|
|
10
11
|
// noinspection JSUnusedGlobalSymbols
|
|
11
12
|
class Validate extends core_3.Base {
|
|
12
13
|
async run() {
|
|
@@ -21,17 +22,37 @@ class Validate extends core_3.Base {
|
|
|
21
22
|
try {
|
|
22
23
|
await node_fs_1.promises.access(directory);
|
|
23
24
|
}
|
|
24
|
-
catch {
|
|
25
|
-
|
|
25
|
+
catch (error) {
|
|
26
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
27
|
+
core_2.ux.error(`Could not access directory: ${directory}`, { exit: false });
|
|
28
|
+
core_2.ux.log('');
|
|
29
|
+
core_2.ux.log('Error details:');
|
|
30
|
+
core_2.ux.log(` ${errorMessage}`);
|
|
31
|
+
core_2.ux.log('');
|
|
32
|
+
core_2.ux.log('Please verify:');
|
|
33
|
+
core_2.ux.log(` 1. The directory path is correct: ${directory}`);
|
|
34
|
+
core_2.ux.log(' 2. The directory exists');
|
|
35
|
+
core_2.ux.log(' 3. You have proper permissions to access the directory');
|
|
36
|
+
this.error('Directory access failed');
|
|
26
37
|
}
|
|
27
38
|
const docker = new docker_1.Docker();
|
|
28
39
|
core_2.ux.action.start('Checking for docker...');
|
|
29
|
-
await docker.ping();
|
|
40
|
+
const dockerAvailable = await docker.ping();
|
|
30
41
|
core_2.ux.action.stop();
|
|
42
|
+
if (!dockerAvailable) {
|
|
43
|
+
core_2.ux.log('');
|
|
44
|
+
core_2.ux.error('Docker is not available. Cannot proceed with validation.', { exit: false });
|
|
45
|
+
core_2.Errors.exit(1);
|
|
46
|
+
}
|
|
31
47
|
if (!skipPull) {
|
|
32
48
|
core_2.ux.action.start(`Pulling image (${image})...`);
|
|
33
|
-
await docker.pullImage(image);
|
|
49
|
+
const pullSuccess = await docker.pullImage(image);
|
|
34
50
|
core_2.ux.action.stop();
|
|
51
|
+
if (!pullSuccess) {
|
|
52
|
+
core_2.ux.log('');
|
|
53
|
+
core_2.ux.error('Failed to pull image. Cannot proceed with validation.', { exit: false });
|
|
54
|
+
core_2.Errors.exit(1);
|
|
55
|
+
}
|
|
35
56
|
}
|
|
36
57
|
const bindings = [`${directory}:/connector`];
|
|
37
58
|
const commands = ['connector:validate'];
|
|
@@ -41,7 +62,25 @@ class Validate extends core_3.Base {
|
|
|
41
62
|
commands.push('--skip-verification');
|
|
42
63
|
}
|
|
43
64
|
else {
|
|
44
|
-
|
|
65
|
+
// Validate key file exists if a path is provided
|
|
66
|
+
const keyPath = (0, node_path_1.resolve)(key);
|
|
67
|
+
try {
|
|
68
|
+
await node_fs_1.promises.access(keyPath);
|
|
69
|
+
commands.push('--key', keyPath);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
73
|
+
core_2.ux.error(`Could not access key file: ${keyPath}`, { exit: false });
|
|
74
|
+
core_2.ux.log('');
|
|
75
|
+
core_2.ux.log('Error details:');
|
|
76
|
+
core_2.ux.log(` ${errorMessage}`);
|
|
77
|
+
core_2.ux.log('');
|
|
78
|
+
core_2.ux.log('Please verify:');
|
|
79
|
+
core_2.ux.log(` 1. The key file path is correct: ${keyPath}`);
|
|
80
|
+
core_2.ux.log(' 2. The file exists and is readable');
|
|
81
|
+
core_2.ux.log(' 3. You have proper permissions to access the file');
|
|
82
|
+
core_2.Errors.exit(1);
|
|
83
|
+
}
|
|
45
84
|
}
|
|
46
85
|
}
|
|
47
86
|
commands.push(`/connector/${connector}`);
|
|
@@ -53,11 +92,72 @@ class Validate extends core_3.Base {
|
|
|
53
92
|
},
|
|
54
93
|
};
|
|
55
94
|
core_2.ux.action.start('Validating...');
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
95
|
+
// Capture output and errors for better logging
|
|
96
|
+
let outputBuffer = '';
|
|
97
|
+
let errorBuffer = '';
|
|
98
|
+
const outputStream = new node_stream_1.Writable({
|
|
99
|
+
write(chunk, encoding, callback) {
|
|
100
|
+
outputBuffer += chunk.toString();
|
|
101
|
+
process.stdout.write(chunk);
|
|
102
|
+
callback();
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
const errorStream = new node_stream_1.Writable({
|
|
106
|
+
write(chunk, encoding, callback) {
|
|
107
|
+
errorBuffer += chunk.toString();
|
|
108
|
+
process.stderr.write(chunk);
|
|
109
|
+
callback();
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
try {
|
|
113
|
+
const success = await docker.runImage(image, createOptions, outputStream, errorStream);
|
|
114
|
+
core_2.ux.action.stop();
|
|
115
|
+
if (!success) {
|
|
116
|
+
core_2.ux.log('');
|
|
117
|
+
core_2.ux.error('Validation failed.', { exit: false });
|
|
118
|
+
if (errorBuffer) {
|
|
119
|
+
core_2.ux.log('');
|
|
120
|
+
core_2.ux.log('Error output:');
|
|
121
|
+
core_2.ux.log(errorBuffer);
|
|
122
|
+
}
|
|
123
|
+
if (outputBuffer) {
|
|
124
|
+
core_2.ux.log('');
|
|
125
|
+
core_2.ux.log('Output:');
|
|
126
|
+
core_2.ux.log(outputBuffer);
|
|
127
|
+
}
|
|
128
|
+
core_2.Errors.exit(1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Re-throw ExitError from Errors.exit() without logging misleading messages
|
|
133
|
+
// ExitError is thrown by Errors.exit() and indicates intentional exit
|
|
134
|
+
if (error && typeof error === 'object' && 'exitCode' in error) {
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
core_2.ux.action.stop();
|
|
138
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
139
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
140
|
+
core_2.ux.error('Failed to run validation container.', { exit: false });
|
|
141
|
+
if (errorMessage) {
|
|
142
|
+
core_2.ux.log('');
|
|
143
|
+
core_2.ux.log('Error details:');
|
|
144
|
+
core_2.ux.log(` ${errorMessage}`);
|
|
145
|
+
}
|
|
146
|
+
if (errorStack && core_2.ux.config.outputLevel === 'debug') {
|
|
147
|
+
core_2.ux.log('');
|
|
148
|
+
core_2.ux.log('Stack trace:');
|
|
149
|
+
core_2.ux.log(errorStack);
|
|
150
|
+
}
|
|
151
|
+
if (errorBuffer) {
|
|
152
|
+
core_2.ux.log('');
|
|
153
|
+
core_2.ux.log('Container error output:');
|
|
154
|
+
core_2.ux.log(errorBuffer);
|
|
155
|
+
}
|
|
156
|
+
if (outputBuffer) {
|
|
157
|
+
core_2.ux.log('');
|
|
158
|
+
core_2.ux.log('Container output:');
|
|
159
|
+
core_2.ux.log(outputBuffer);
|
|
160
|
+
}
|
|
61
161
|
core_2.Errors.exit(1);
|
|
62
162
|
}
|
|
63
163
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/connector/validate.ts"],"names":[],"mappings":";;;AAAA,sCAAiC;AACjC,yCAAiC;AACjC,4CAAsD;AACtD,sCAAsC;AACtC,qCAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/connector/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,10 @@ export declare class Migrate extends Base {
|
|
|
19
19
|
* Basically, each array item is a different connector
|
|
20
20
|
*/
|
|
21
21
|
private collectJobs;
|
|
22
|
+
private extractImportsFromScriptContent;
|
|
22
23
|
private extractImportsFromScript;
|
|
24
|
+
private collectImportsFromContent;
|
|
25
|
+
private getTopLevelPackageName;
|
|
23
26
|
private decompressIfNeeded;
|
|
24
27
|
run(): Promise<void>;
|
|
25
28
|
}
|
|
@@ -15,10 +15,17 @@ class Migrate extends core_1.Base {
|
|
|
15
15
|
async processTaskFiles(taskFiles) {
|
|
16
16
|
const taskImports = new Set();
|
|
17
17
|
const importPromises = taskFiles.map(async (taskFile) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
try {
|
|
19
|
+
const taskContent = await node_fs_1.promises.readFile(taskFile, 'utf8');
|
|
20
|
+
const taskJson = JSON.parse(taskContent);
|
|
21
|
+
const script = taskJson?.Action?.Script || '';
|
|
22
|
+
const scriptImports = await this.extractImportsFromScriptContent(script);
|
|
23
|
+
for (const importName of scriptImports)
|
|
24
|
+
taskImports.add(importName);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
this.warn(`Could not extract imports from task file: ${taskFile}`);
|
|
28
|
+
}
|
|
22
29
|
});
|
|
23
30
|
await Promise.all(importPromises);
|
|
24
31
|
return taskImports;
|
|
@@ -71,9 +78,17 @@ class Migrate extends core_1.Base {
|
|
|
71
78
|
.filter(file => file.endsWith('.json'))
|
|
72
79
|
.map(file => (0, node_path_1.join)(tasksFolder, file));
|
|
73
80
|
const scriptImportLists = await Promise.all(taskFiles.map(async (taskFile) => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
81
|
+
try {
|
|
82
|
+
const taskContent = await node_fs_1.promises.readFile(taskFile, 'utf8');
|
|
83
|
+
const taskJson = JSON.parse(taskContent);
|
|
84
|
+
const script = taskJson?.Action?.Script || '';
|
|
85
|
+
const scriptImports = await this.extractImportsFromScriptContent(script);
|
|
86
|
+
return [...scriptImports];
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
this.warn(`Could not extract imports from task file: ${taskFile}`);
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
77
92
|
}));
|
|
78
93
|
for (const scriptImports of scriptImportLists) {
|
|
79
94
|
for (const importName of scriptImports) {
|
|
@@ -90,6 +105,7 @@ class Migrate extends core_1.Base {
|
|
|
90
105
|
appFolderPath,
|
|
91
106
|
connectorName,
|
|
92
107
|
taskFilePaths: taskFiles,
|
|
108
|
+
taskImports,
|
|
93
109
|
};
|
|
94
110
|
});
|
|
95
111
|
const appResults = await Promise.all(appFolderPromises);
|
|
@@ -98,21 +114,78 @@ class Migrate extends core_1.Base {
|
|
|
98
114
|
const nestedAppTasks = await Promise.all(pythonDirPromises);
|
|
99
115
|
return nestedAppTasks.flat();
|
|
100
116
|
}
|
|
117
|
+
async extractImportsFromScriptContent(scriptContent) {
|
|
118
|
+
const usedPackages = new Set();
|
|
119
|
+
if (!scriptContent || typeof scriptContent !== 'string') {
|
|
120
|
+
return usedPackages;
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
this.collectImportsFromContent(scriptContent, usedPackages);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
this.warn(`Could not extract imports from script content: ${error?.message || 'Unknown error'}`);
|
|
127
|
+
}
|
|
128
|
+
return usedPackages;
|
|
129
|
+
}
|
|
101
130
|
async extractImportsFromScript(pyFilePath) {
|
|
102
131
|
const usedPackages = new Set();
|
|
103
132
|
try {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
usedPackages.add(match[1]);
|
|
133
|
+
// Check if file exists first
|
|
134
|
+
if (!(await (0, core_1.fileExists)(pyFilePath))) {
|
|
135
|
+
this.warn(`Python file does not exist: ${pyFilePath}`);
|
|
136
|
+
return usedPackages;
|
|
109
137
|
}
|
|
138
|
+
const content = await node_fs_1.promises.readFile(pyFilePath, 'utf8');
|
|
139
|
+
this.collectImportsFromContent(content, usedPackages);
|
|
110
140
|
}
|
|
111
|
-
catch {
|
|
112
|
-
|
|
141
|
+
catch (error) {
|
|
142
|
+
// Provide more specific error information
|
|
143
|
+
const errorMessage = error?.code === 'EACCES' ?
|
|
144
|
+
`Permission denied reading file: ${pyFilePath}` :
|
|
145
|
+
(error?.code === 'ENOENT' ?
|
|
146
|
+
`File not found: ${pyFilePath}` :
|
|
147
|
+
`Could not extract imports from: ${pyFilePath} (${error?.message || 'Unknown error'})`);
|
|
148
|
+
this.warn(errorMessage);
|
|
113
149
|
}
|
|
114
150
|
return usedPackages;
|
|
115
151
|
}
|
|
152
|
+
collectImportsFromContent(content, usedPackages) {
|
|
153
|
+
for (const line of content.split('\n')) {
|
|
154
|
+
const withoutComment = line.split('#')[0]?.trimStart() ?? '';
|
|
155
|
+
if (!withoutComment)
|
|
156
|
+
continue;
|
|
157
|
+
if (withoutComment.startsWith('import ')) {
|
|
158
|
+
const importClause = withoutComment.slice('import '.length).trim();
|
|
159
|
+
if (!importClause)
|
|
160
|
+
continue;
|
|
161
|
+
for (const segment of importClause.split(',')) {
|
|
162
|
+
const moduleToken = segment.trim().split(/\s+/)[0];
|
|
163
|
+
const packageName = this.getTopLevelPackageName(moduleToken);
|
|
164
|
+
if (packageName)
|
|
165
|
+
usedPackages.add(packageName);
|
|
166
|
+
}
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (withoutComment.startsWith('from ')) {
|
|
170
|
+
const importIndex = withoutComment.indexOf(' import ');
|
|
171
|
+
if (importIndex === -1)
|
|
172
|
+
continue;
|
|
173
|
+
const sourceModule = withoutComment.slice('from '.length, importIndex).trim();
|
|
174
|
+
const packageName = this.getTopLevelPackageName(sourceModule);
|
|
175
|
+
if (packageName)
|
|
176
|
+
usedPackages.add(packageName);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
getTopLevelPackageName(modulePath) {
|
|
181
|
+
const normalized = modulePath.replace(/^\.+/, '').trim();
|
|
182
|
+
if (!normalized)
|
|
183
|
+
return '';
|
|
184
|
+
const packageName = normalized.split('.')[0];
|
|
185
|
+
if (!packageName || packageName.toLowerCase().startsWith('sw_'))
|
|
186
|
+
return '';
|
|
187
|
+
return packageName;
|
|
188
|
+
}
|
|
116
189
|
async decompressIfNeeded(fromDirectory) {
|
|
117
190
|
if (fromDirectory.endsWith('.zip')) {
|
|
118
191
|
const extractPath = fromDirectory.replace(/\.zip$/, '');
|
|
@@ -167,13 +240,106 @@ class Migrate extends core_1.Base {
|
|
|
167
240
|
const groupPromises = groupedAppTasks.map(async (group) => {
|
|
168
241
|
this.log(`\nProcessing [${group.pythonDirName}] / [${group.connectorName}]`);
|
|
169
242
|
this.log(`Found ${group.taskFilePaths.length} task file(s) in: ${group.appFolderPath}`);
|
|
170
|
-
|
|
243
|
+
// Remove disallowed path characters from folder name
|
|
244
|
+
const sanitizedFolderName = group.connectorName
|
|
245
|
+
.replaceAll(/[()/:|]/g, '') // Remove parentheses, slashes, colons, and pipes
|
|
246
|
+
.replaceAll(' ', '_')
|
|
247
|
+
.toLowerCase();
|
|
248
|
+
const connectorToDir = (0, node_path_1.join)(toDirectory, sanitizedFolderName);
|
|
171
249
|
await connector_generator_1.ConnectorGenerator.generateBaseStructure(connectorToDir);
|
|
172
250
|
await connector_generator_1.ConnectorGenerator.generateLogo(connectorToDir);
|
|
173
251
|
await connector_generator_1.ConnectorGenerator.generateConnectorManifest(answers, group, connectorToDir);
|
|
174
252
|
await connector_generator_1.ConnectorGenerator.generateRunnerOverride(connectorToDir);
|
|
253
|
+
await connector_generator_1.ConnectorGenerator.addExtractedImportsToRequirements(connectorToDir, group.taskImports);
|
|
254
|
+
// First, collect all forked plugin names to initialize them before processing tasks
|
|
255
|
+
const forkedPluginNames = new Set();
|
|
256
|
+
const taskContents = await Promise.all(group.taskFilePaths.map(async (taskFilePath) => {
|
|
257
|
+
try {
|
|
258
|
+
const content = await node_fs_1.promises.readFile(taskFilePath, 'utf8');
|
|
259
|
+
return { taskFilePath, content };
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
}));
|
|
265
|
+
for (const taskContent of taskContents) {
|
|
266
|
+
if (!taskContent)
|
|
267
|
+
continue;
|
|
268
|
+
try {
|
|
269
|
+
const fileJson = JSON.parse(taskContent.content);
|
|
270
|
+
const transformer = (0, transformers_1.getTransformer)(fileJson);
|
|
271
|
+
const transformationResult = transformer.transform(fileJson);
|
|
272
|
+
if (transformationResult.type === 'forked-plugin' && transformationResult.forkedName) {
|
|
273
|
+
forkedPluginNames.add(transformationResult.forkedName);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
// Skip if we can't parse
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Initialize all forked plugins sequentially to avoid race conditions; collect packages excluded via EXCLUDED_PACKAGES that need runner.sh (e.g. ssdeep)
|
|
281
|
+
const excludedRunnerPackages = new Set();
|
|
282
|
+
for (const forkedName of forkedPluginNames) {
|
|
283
|
+
try {
|
|
284
|
+
// Create a dummy transformation result just for initialization
|
|
285
|
+
const dummyResult = {
|
|
286
|
+
type: 'forked-plugin',
|
|
287
|
+
forkedName,
|
|
288
|
+
connectorName: group.connectorName,
|
|
289
|
+
pythonDefinition: group.pythonDefinition,
|
|
290
|
+
};
|
|
291
|
+
// eslint-disable-next-line no-await-in-loop
|
|
292
|
+
const fromInit = await connector_generator_1.ConnectorGenerator.initializeForkedPlugin(dummyResult, fromDirectory, connectorToDir);
|
|
293
|
+
for (const p of fromInit)
|
|
294
|
+
excludedRunnerPackages.add(p);
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
console.error(`Error initializing forked plugin ${forkedName}:`, error);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Collect all asset parameters from all tasks to avoid race conditions
|
|
301
|
+
const allAssetParameters = [];
|
|
302
|
+
let applicationInfo = null;
|
|
303
|
+
try {
|
|
304
|
+
const appInfoPath = (0, node_path_1.join)(group.appFolderPath, 'applicationInfo.json');
|
|
305
|
+
const rawInfo = await node_fs_1.promises.readFile(appInfoPath, 'utf8');
|
|
306
|
+
applicationInfo = JSON.parse(rawInfo);
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// applicationInfo.json optional; record inputs will keep inferred types
|
|
310
|
+
}
|
|
311
|
+
const currentApplicationId = (0, node_path_1.basename)(group.appFolderPath);
|
|
312
|
+
const pythonDirPath = (0, node_path_1.dirname)(group.appFolderPath);
|
|
313
|
+
const applicationInfoMap = applicationInfo ? { [currentApplicationId]: applicationInfo } : {};
|
|
314
|
+
// Collect ApplicationIds from all tasks' Outputs (e.g. InsertUpdateRecordOutput.ApplicationId) and load their applicationInfo
|
|
315
|
+
const outputAppIdGroups = await Promise.all(group.taskFilePaths.map(async (taskFilePath) => {
|
|
316
|
+
try {
|
|
317
|
+
const content = await node_fs_1.promises.readFile(taskFilePath, 'utf8');
|
|
318
|
+
const taskJson = JSON.parse(content);
|
|
319
|
+
return (taskJson?.Outputs ?? []).map((output) => output?.ApplicationId ?? output?.applicationId)
|
|
320
|
+
.filter((appId) => typeof appId === 'string');
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
return [];
|
|
324
|
+
}
|
|
325
|
+
}));
|
|
326
|
+
const outputAppIds = new Set(outputAppIdGroups.flat());
|
|
327
|
+
const missingAppIds = [...outputAppIds].filter(appId => !applicationInfoMap[appId]);
|
|
328
|
+
const appInfoEntries = await Promise.all(missingAppIds.map(async (appId) => {
|
|
329
|
+
try {
|
|
330
|
+
const rawInfo = await node_fs_1.promises.readFile((0, node_path_1.join)(pythonDirPath, appId, 'applicationInfo.json'), 'utf8');
|
|
331
|
+
return { appId, appInfo: JSON.parse(rawInfo) };
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
}));
|
|
337
|
+
for (const appInfoEntry of appInfoEntries) {
|
|
338
|
+
if (appInfoEntry) {
|
|
339
|
+
applicationInfoMap[appInfoEntry.appId] = appInfoEntry.appInfo;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
175
342
|
const taskPromises = group.taskFilePaths.map(async (taskFilePath) => {
|
|
176
|
-
const initializedConnectors = new Set();
|
|
177
343
|
const content = await node_fs_1.promises.readFile(taskFilePath, 'utf8');
|
|
178
344
|
let fileJson;
|
|
179
345
|
try {
|
|
@@ -184,19 +350,34 @@ class Migrate extends core_1.Base {
|
|
|
184
350
|
}
|
|
185
351
|
const transformer = (0, transformers_1.getTransformer)(fileJson);
|
|
186
352
|
const transformationResult = transformer.transform(fileJson);
|
|
353
|
+
connector_generator_1.ConnectorGenerator.patchRecordInputTypes(transformationResult, applicationInfo);
|
|
354
|
+
connector_generator_1.ConnectorGenerator.patchOutputDateConversions(transformationResult, applicationInfoMap, currentApplicationId);
|
|
187
355
|
if (!transformer.scriptIsValid(transformationResult.script)) {
|
|
188
356
|
this.warn(`Found code that is not supported in turbine: ${taskFilePath}`);
|
|
189
357
|
}
|
|
190
358
|
transformationResult.connectorName = group.connectorName;
|
|
191
359
|
transformationResult.pythonDefinition = group.pythonDefinition;
|
|
192
|
-
|
|
193
|
-
initializedConnectors.add(transformationResult.forkedName);
|
|
194
|
-
await connector_generator_1.ConnectorGenerator.initializeForkedPlugin(transformationResult, fromDirectory, connectorToDir);
|
|
195
|
-
}
|
|
360
|
+
// Forked plugins are already initialized above, so skip initialization here
|
|
196
361
|
await connector_generator_1.ConnectorGenerator.generateAction(transformationResult, connectorToDir);
|
|
197
362
|
await connector_generator_1.ConnectorGenerator.generateActionConfig(transformationResult, connectorToDir);
|
|
363
|
+
// Collect asset parameters instead of writing immediately
|
|
364
|
+
if (transformationResult.assetParameters && transformationResult.assetParameters.length > 0) {
|
|
365
|
+
allAssetParameters.push(...transformationResult.assetParameters);
|
|
366
|
+
}
|
|
198
367
|
});
|
|
199
368
|
await Promise.all(taskPromises);
|
|
369
|
+
// Write all asset parameters once after all tasks are processed
|
|
370
|
+
if (allAssetParameters.length > 0) {
|
|
371
|
+
await connector_generator_1.ConnectorGenerator.addAssetParameters(connectorToDir, allAssetParameters, group.connectorName);
|
|
372
|
+
}
|
|
373
|
+
// Deduplicate requirements after all tasks are processed
|
|
374
|
+
await connector_generator_1.ConnectorGenerator.deduplicateRequirements(connectorToDir);
|
|
375
|
+
// Generate compile.sh if needed (for swimbundle_utils)
|
|
376
|
+
await connector_generator_1.ConnectorGenerator.generateCompileScript(connectorToDir);
|
|
377
|
+
// Generate runner.sh for system deps (wkhtmltopdf for sw_swimlane_email, ssdeep via apt+pip when excluded from requirements)
|
|
378
|
+
const needsSsdeep = [...group.taskImports].some(name => name.toLowerCase() === 'ssdeep') ||
|
|
379
|
+
excludedRunnerPackages.has('ssdeep');
|
|
380
|
+
await connector_generator_1.ConnectorGenerator.generateRunnerScript(connectorToDir, forkedPluginNames.has('sw_swimlane_email'), needsSsdeep);
|
|
200
381
|
});
|
|
201
382
|
await Promise.all(groupPromises);
|
|
202
383
|
this.log(`\nDone processing. Converted files at: ${toDirectory}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/commands/migrator/convert.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/commands/migrator/convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,22 +9,94 @@ class RunnerOverride(RO):
|
|
|
9
9
|
super().__init__(asset, asset_schema, http_proxy)
|
|
10
10
|
|
|
11
11
|
def run(self, inputs, action_schema):
|
|
12
|
+
# Rebuild inputs from YAML-defined keys (empty per type), then merge asset, then overlay incoming inputs
|
|
13
|
+
# INPUTS_MERGE_HERE
|
|
12
14
|
sw_context = SwimlaneContext(asset=self.asset, asset_schema=self.asset_schema,
|
|
13
15
|
http_proxy=self.http_proxy, inputs=inputs)
|
|
14
16
|
|
|
17
|
+
from swimlane import Swimlane
|
|
18
|
+
Swimlane.turbineAccountId = sw_context.inputs.pop('TurbineAccountId', '')
|
|
19
|
+
Swimlane.turbineTenantId = sw_context.inputs.pop('TurbineTenantId', '')
|
|
20
|
+
Swimlane._api_root = f'/api/account/{Swimlane.turbineAccountId}/tenant/{Swimlane.turbineTenantId}/'
|
|
21
|
+
Swimlane._execute_task_webhook_url = sw_context.inputs.pop('ExecuteTaskWebhookUrl', '')
|
|
15
22
|
plugin_instance = SwMain(sw_context)
|
|
16
23
|
plugin_response = plugin_instance.execute()
|
|
17
24
|
|
|
25
|
+
import os
|
|
26
|
+
import base64
|
|
27
|
+
import requests
|
|
28
|
+
import re
|
|
29
|
+
IPC_API_URI = os.getenv('IPC_API_URI', '')
|
|
30
|
+
IPC_API_TOKEN = os.getenv('IPC_API_TOKEN', '')
|
|
31
|
+
|
|
32
|
+
OUTPUT_DATE_CONVERSIONS = __OUTPUT_DATE_CONVERSIONS__
|
|
33
|
+
|
|
34
|
+
def convert_timestamp(value, timetype):
|
|
35
|
+
import pendulum
|
|
36
|
+
if timetype == "milliseconds":
|
|
37
|
+
value = value / 1000
|
|
38
|
+
if timetype in ('milliseconds', 'seconds'):
|
|
39
|
+
return pendulum.from_timestamp(value).to_iso8601_string()
|
|
40
|
+
return pendulum.from_format(value, timetype).to_iso8601_string()
|
|
41
|
+
|
|
42
|
+
def sanitize_filename(filename):
|
|
43
|
+
"""Removes or replaces illegal characters from file names."""
|
|
44
|
+
illegal_chars = r'[\/:*?"<>|[\]{}()\%]' # Define characters to be removed
|
|
45
|
+
sanitized = re.sub(illegal_chars, '', filename) # Remove illegal characters
|
|
46
|
+
return sanitized.strip() # Remove leading/trailing spaces
|
|
47
|
+
|
|
48
|
+
def handle_output_files(output):
|
|
49
|
+
post_url = f"{IPC_API_URI}/files"
|
|
50
|
+
params = {"token": IPC_API_TOKEN}
|
|
51
|
+
# There are potentially many dicts in output, but usually only one
|
|
52
|
+
for o in output:
|
|
53
|
+
for key in o:
|
|
54
|
+
file_output = o.get(key, None)
|
|
55
|
+
temp_files = []
|
|
56
|
+
if file_output and isinstance(file_output, list):
|
|
57
|
+
# value is a list, but we only want to proceed if it's a list of files
|
|
58
|
+
if all(isinstance(i, dict) and 'base64' in i and 'filename' in i for i in file_output):
|
|
59
|
+
# we need to convert the objects to turbine format, then upload
|
|
60
|
+
temp_files = [{'file_data': base64.b64decode(i['base64']), 'file_name': sanitize_filename(i['filename'])} for i in file_output]
|
|
61
|
+
attachments = []
|
|
62
|
+
for file in temp_files:
|
|
63
|
+
attachments.append(
|
|
64
|
+
(
|
|
65
|
+
"files",
|
|
66
|
+
(
|
|
67
|
+
file["file_name"],
|
|
68
|
+
file["file_data"],
|
|
69
|
+
"multipart/form-data",
|
|
70
|
+
)
|
|
71
|
+
)
|
|
72
|
+
)
|
|
73
|
+
res = requests.post(post_url, files=attachments, params=params)
|
|
74
|
+
res.raise_for_status()
|
|
75
|
+
o[key] = res.json()
|
|
76
|
+
for key, timetype in OUTPUT_DATE_CONVERSIONS.items():
|
|
77
|
+
if key in o and o[key] is not None:
|
|
78
|
+
try:
|
|
79
|
+
o[key] = convert_timestamp(o[key], timetype)
|
|
80
|
+
except Exception:
|
|
81
|
+
pass
|
|
82
|
+
|
|
83
|
+
return output
|
|
18
84
|
if isinstance(plugin_response, dict):
|
|
19
|
-
|
|
85
|
+
plugin_response["sw_task_status"] = "success"
|
|
86
|
+
return {"output": handle_output_files([plugin_response])} # Already a dictionary
|
|
20
87
|
|
|
21
88
|
elif isinstance(plugin_response, list):
|
|
22
|
-
|
|
89
|
+
# Add sw_task_status to each dictionary in the list
|
|
90
|
+
for item in plugin_response:
|
|
91
|
+
if isinstance(item, dict):
|
|
92
|
+
item["sw_task_status"] = "success"
|
|
93
|
+
return {"output": handle_output_files(plugin_response)} # Wrap in a dictionary
|
|
23
94
|
|
|
24
95
|
elif plugin_response is None:
|
|
25
|
-
return {"
|
|
96
|
+
return {"output": [{"sw_task_status": "success"}]} # Handle None case explicitly
|
|
26
97
|
else:
|
|
27
|
-
|
|
98
|
+
# For other types, wrap in a dictionary with sw_task_status
|
|
99
|
+
return {"output": [{"result": plugin_response, "sw_task_status": "success"}]} # Wrap other types in a dictionary
|
|
28
100
|
return plugin_response
|
|
29
101
|
|
|
30
102
|
# IMPORTED CODE BELOW
|