From 5109ae232c426c3ed5fadd8b46310136af99cde9 Mon Sep 17 00:00:00 2001 From: William Moore Date: Tue, 1 Nov 2022 11:39:53 +0000 Subject: [PATCH 1/2] Fix versions for dtype checks. Don't check v0.4 --- src/JsonValidator/MultiscaleArrays/Multiscale.svelte | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/JsonValidator/MultiscaleArrays/Multiscale.svelte b/src/JsonValidator/MultiscaleArrays/Multiscale.svelte index 17fcf67..8cfd673 100644 --- a/src/JsonValidator/MultiscaleArrays/Multiscale.svelte +++ b/src/JsonValidator/MultiscaleArrays/Multiscale.svelte @@ -11,8 +11,7 @@ // If multiscale.axes (version > 0.3) check it matches shape const {axes, datasets, version} = multiscale; - // TODO: add "0.4" to this list once tested! - const checkDtypes = !["0.1", "0.2", "0.3"].includes(version); + const checkDtypes = !["0.1", "0.2", "0.3", "0.4"].includes(version); const checkDimSeparator = ["0.2", "0.3", "0.4"].includes(version); function allEqual(items) { From 4acfaaa528b1e8be09711e2adb8501a6ad5c5952 Mon Sep 17 00:00:00 2001 From: William Moore Date: Tue, 24 Oct 2023 16:27:06 +0100 Subject: [PATCH 2/2] Support 'warning' status for some checks --- .../MultiscaleArrays/Multiscale.svelte | 58 ++++++++++++++----- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/src/JsonValidator/MultiscaleArrays/Multiscale.svelte b/src/JsonValidator/MultiscaleArrays/Multiscale.svelte index 8cfd673..ff5a49d 100644 --- a/src/JsonValidator/MultiscaleArrays/Multiscale.svelte +++ b/src/JsonValidator/MultiscaleArrays/Multiscale.svelte @@ -5,19 +5,25 @@ export let source; export let multiscale; + const WARNING = "warning"; + // We check that all multiscale Datasets have same dtype and // shape.length (number of dimensions) // If multiscale.axes (version > 0.3) check it matches shape - const {axes, datasets, version} = multiscale; + const { axes, datasets, version } = multiscale; - const checkDtypes = !["0.1", "0.2", "0.3", "0.4"].includes(version); + const permitDtypeMismatch = ["0.1", "0.2", "0.3", "0.4"].includes(version); const checkDimSeparator = ["0.2", "0.3", "0.4"].includes(version); function allEqual(items) { return items.every((value) => value == items[0]); } + function containsError(checks) { + return checks.some((check) => check.status != WARNING); + } + async function loadAndValidate() { let dtypes = []; let dimCounts = []; @@ -33,32 +39,50 @@ dimSeparators.push(zarray.dimension_separator); } - let errors = []; + // Each check is {msg: "Message"}, with status: "warning" if it isn't an Error. + let checks = []; if (dtypes.length === 0) { - errors.push("No multiscale datasets") + checks.push({ msg: "No multiscale datasets" }); } - if (checkDtypes && !allEqual(dtypes)) { - errors.push(`dtypes mismatch: ${dtypes.join(", ")}`) + if (!allEqual(dtypes)) { + if (permitDtypeMismatch) { + checks.push({ + msg: `dtypes mismatch: ${dtypes.join( + ", " + )} not valid after version 0.4`, + status: WARNING, + }); + } else { + checks.push({ msg: `dtypes mismatch: ${dtypes.join(", ")}` }); + } } if (!allEqual(dimCounts)) { - errors.push(`number of dimensions mismatch: ${dimCounts.join(", ")}`) + checks.push({ + msg: `number of dimensions mismatch: ${dimCounts.join(", ")}`, + }); } if (axes) { shapes.forEach((shape) => { if (shape.length != axes.length) { - errors.push(`Shape (${shape.join(", ")}) doesn't match axes length: ${axes.length}`) + checks.push({ + msg: `Shape (${shape.join(", ")}) doesn't match axes length: ${ + axes.length + }`, + }); } }); } if (checkDimSeparator) { dimSeparators.forEach((sep) => { if (sep != "/") { - errors.push(`Dimension separator must be / for version ${version}`) + checks.push({ + msg: `Dimension separator must be / for version ${version}`, + }); } }); } - return errors; + return checks; } const promise = loadAndValidate(); @@ -66,18 +90,22 @@ {#await promise}

loading...

-{:then errors} - {#if errors.length > 0} +{:then checks} + {#if containsError(checks)} - {#each errors as error} -

Error: {error}

- {/each} {:else}

{datasets.length} Datasets checked

{/if} + {#each checks as check} + {#if check.status == "warning"} +

Warning: {check.msg}

+ {:else} +

Error: {check.msg}

+ {/if} + {/each} {:catch error}

{error.message}

{/await}