Skip to content

Commit 59958ec

Browse files
authored
Merge pull request #465 from fractal-analytics-platform/continue-restart-workflow
Implemented continue/restart workflow
2 parents 4cd7b48 + 5d1f417 commit 59958ec

File tree

9 files changed

+635
-260
lines changed

9 files changed

+635
-260
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* moved editing of dataset inside dataset page (\#452);
1919
* supported editing of single dataset images (\#457);
2020
* used switches to represent boolean flags (\#457);
21+
* implemented continue/restart workflow (\#465);
2122

2223
# 0.10.2
2324

__tests__/job_utilities.test.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { it, expect } from 'vitest';
2-
import { extractJobErrorParts, extractRelevantJobError } from '$lib/common/job_utilities.js';
2+
import {
3+
extractJobErrorParts,
4+
extractRelevantJobError,
5+
generateNewUniqueDatasetName
6+
} from '$lib/common/job_utilities.js';
37

48
const completeTracebackError = `TASK ERROR:Task id: 15 (Create OME-Zarr structure), e.workflow_task_order=0
59
TRACEBACK:
@@ -223,3 +227,21 @@ it('handles null or undefined inputs', () => {
223227
expect(extractRelevantJobError(null)).eq('');
224228
expect(extractRelevantJobError()).eq('');
225229
});
230+
231+
it('generates new unique dataset name', () => {
232+
expect(generateNewUniqueDatasetName(getMockedDatasets(['a', 'b']), 'a')).toEqual('a_1');
233+
expect(generateNewUniqueDatasetName(getMockedDatasets(['a', 'a_1', 'b']), 'a')).toEqual('a_2');
234+
expect(generateNewUniqueDatasetName(getMockedDatasets(['a', 'a_1', 'b']), 'a_1')).toEqual('a_2');
235+
expect(generateNewUniqueDatasetName(getMockedDatasets(['a', 'a_1', 'a_2', 'b']), 'a_1')).toEqual(
236+
'a_3'
237+
);
238+
});
239+
240+
/**
241+
* @param {string[]} names
242+
*/
243+
function getMockedDatasets(names) {
244+
return names.map((name, index) => {
245+
return { id: index + 1, name };
246+
});
247+
}

src/lib/common/job_utilities.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,22 @@ export function extractRelevantJobError(completeJobError, maxLines = undefined)
114114
}
115115
return relevantError;
116116
}
117+
118+
/**
119+
* @param {import("$lib/types-v2").DatasetV2[]} datasets
120+
* @param {string} selectedDatasetName
121+
* @returns {string}
122+
*/
123+
export function generateNewUniqueDatasetName(datasets, selectedDatasetName) {
124+
let i = 1;
125+
const match = selectedDatasetName.match(/^(.*)_(\d+)$/);
126+
if (match) {
127+
selectedDatasetName = match[1];
128+
}
129+
let newDatasetName;
130+
do {
131+
newDatasetName = `${selectedDatasetName}_${i}`;
132+
i++;
133+
} while (datasets.filter((d) => d.name === newDatasetName).length > 0);
134+
return newDatasetName;
135+
}

src/lib/components/v2/workflow/InputFiltersTab.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@
3838
});
3939
4040
export async function init() {
41-
form.init(workflowTask.input_filters.attributes, workflowTask.input_filters.types);
41+
if (!form.hasUnsavedChanges()) {
42+
form.init(workflowTask.input_filters.attributes, workflowTask.input_filters.types);
43+
}
4244
4345
if (selectedDatasetId === undefined) {
4446
datasetAttributes = {};

0 commit comments

Comments
 (0)