From 9204b099740e3881c65829e787e0271138a3fae7 Mon Sep 17 00:00:00 2001 From: markbader Date: Tue, 27 Jun 2023 16:19:50 +0200 Subject: [PATCH 01/14] Extend traceback to get exception of future. --- webknossos/webknossos/utils.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/webknossos/webknossos/utils.py b/webknossos/webknossos/utils.py index a9aab067d..5cd805b69 100644 --- a/webknossos/webknossos/utils.py +++ b/webknossos/webknossos/utils.py @@ -5,6 +5,7 @@ import logging import sys import time +import traceback import warnings from concurrent.futures import as_completed from concurrent.futures._base import Future @@ -134,6 +135,12 @@ def wait_and_ensure_success( with get_rich_progress() as progress: task = progress.add_task(progress_desc, total=len(futures)) for fut in as_completed(futures): + if (exc := fut.exception()) is not None: + raise Exception( + "".join( + [element for element in traceback.format_exception(exc)] + ) + ) from exc results.append(fut.result()) progress.update(task, advance=1) return results From 2bb3883449ecbfb92721ac5d936b70e03bb72282 Mon Sep 17 00:00:00 2001 From: markbader Date: Thu, 29 Jun 2023 17:32:44 +0200 Subject: [PATCH 02/14] Implement pad flag for webknossos cli convert subcommand. --- webknossos/webknossos/cli/convert.py | 11 ++++++++++- webknossos/webknossos/cli/main.py | 2 +- webknossos/webknossos/dataset/_utils/pims_images.py | 12 +++++++++++- webknossos/webknossos/dataset/dataset.py | 5 +++++ webknossos/webknossos/utils.py | 7 ------- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/webknossos/webknossos/cli/convert.py b/webknossos/webknossos/cli/convert.py index 0987f4284..cc59faa23 100644 --- a/webknossos/webknossos/cli/convert.py +++ b/webknossos/webknossos/cli/convert.py @@ -57,6 +57,14 @@ def main( "(if not provided, final component of target path is used)" ), ] = None, + pad: Annotated[ + bool, + typer.Option( + help="Automatically pad image files at the bottom and right borders. " + "Use this, when the input images don't have a common size, but have " + "their origin at (0, 0)." + ), + ] = False, compress: Annotated[ bool, typer.Option(help="Enable compression of the target dataset.") ] = False, @@ -96,9 +104,10 @@ def main( source, target, voxel_size, - name=name, + name, data_format=data_format, executor=executor, + pad=pad, ) # TODO pylint: disable=fixme # Include this in the from_images() call as soon as issue #900 is resolved diff --git a/webknossos/webknossos/cli/main.py b/webknossos/webknossos/cli/main.py index 8fabacda5..567116002 100644 --- a/webknossos/webknossos/cli/main.py +++ b/webknossos/webknossos/cli/main.py @@ -17,7 +17,7 @@ upsample, ) -app = typer.Typer(no_args_is_help=True) +app = typer.Typer(no_args_is_help=True, pretty_exceptions_short=False) app.command("check-equality")(check_equality.main) app.command("compress")(compress.main) diff --git a/webknossos/webknossos/dataset/_utils/pims_images.py b/webknossos/webknossos/dataset/_utils/pims_images.py index c0aadf1ad..8aea2879c 100644 --- a/webknossos/webknossos/dataset/_utils/pims_images.py +++ b/webknossos/webknossos/dataset/_utils/pims_images.py @@ -76,6 +76,7 @@ def __init__( flip_x: bool, flip_y: bool, flip_z: bool, + pad: bool, use_bioformats: Optional[bool], is_segmentation: bool, ) -> None: @@ -255,7 +256,15 @@ def __init__( ############################# with self._open_images() as images: - if isinstance(images, list): + if pad: + images_shape = (len(images),) + tuple( + # Search in all dimensions for the highest value to get max shape + max(values) + for values in zip( + *[cast(pims.FramesSequence, image).shape for image in images] + ) + ) + elif isinstance(images, list): images_shape = (len(images),) + cast( pims.FramesSequence, images[0] ).shape @@ -594,6 +603,7 @@ def has_image_z_dimension( flip_x=False, flip_y=False, flip_z=False, + pad=False, ) return pims_images.expected_shape.z > 1 diff --git a/webknossos/webknossos/dataset/dataset.py b/webknossos/webknossos/dataset/dataset.py index 7b9e8958e..0f97a482b 100644 --- a/webknossos/webknossos/dataset/dataset.py +++ b/webknossos/webknossos/dataset/dataset.py @@ -567,6 +567,7 @@ def from_images( flip_x: bool = False, flip_y: bool = False, flip_z: bool = False, + pad: bool = False, use_bioformats: Optional[bool] = None, max_layers: int = 20, batch_size: Optional[int] = None, @@ -649,6 +650,7 @@ def from_images( flip_x=flip_x, flip_y=flip_y, flip_z=flip_z, + pad=pad, use_bioformats=use_bioformats, batch_size=batch_size, allow_multiple_layers=True, @@ -1003,6 +1005,7 @@ def add_layer_from_images( flip_x: bool = False, flip_y: bool = False, flip_z: bool = False, + pad: bool = False, dtype: Optional[DTypeLike] = None, use_bioformats: Optional[bool] = None, channel: Optional[int] = None, @@ -1067,6 +1070,7 @@ def add_layer_from_images( flip_x=flip_x, flip_y=flip_y, flip_z=flip_z, + pad=pad, use_bioformats=use_bioformats, is_segmentation=category == "segmentation", ) @@ -1147,6 +1151,7 @@ def add_layer_from_images( flip_x=flip_x, flip_y=flip_y, flip_z=flip_z, + pad=pad, use_bioformats=use_bioformats, is_segmentation=category == "segmentation", **pims_open_kwargs, diff --git a/webknossos/webknossos/utils.py b/webknossos/webknossos/utils.py index 5cd805b69..a9aab067d 100644 --- a/webknossos/webknossos/utils.py +++ b/webknossos/webknossos/utils.py @@ -5,7 +5,6 @@ import logging import sys import time -import traceback import warnings from concurrent.futures import as_completed from concurrent.futures._base import Future @@ -135,12 +134,6 @@ def wait_and_ensure_success( with get_rich_progress() as progress: task = progress.add_task(progress_desc, total=len(futures)) for fut in as_completed(futures): - if (exc := fut.exception()) is not None: - raise Exception( - "".join( - [element for element in traceback.format_exception(exc)] - ) - ) from exc results.append(fut.result()) progress.update(task, advance=1) return results From 54d3477ba60a5dd5ded8f8ab6577b77a8d6c35df Mon Sep 17 00:00:00 2001 From: markbader Date: Mon, 10 Jul 2023 17:04:47 +0200 Subject: [PATCH 03/14] Implement hotfix solution for fitting bbox without pad flag. --- webknossos/Changelog.md | 1 + webknossos/webknossos/cli/convert.py | 9 --------- webknossos/webknossos/dataset/_utils/pims_images.py | 12 +----------- webknossos/webknossos/dataset/dataset.py | 9 +++------ 4 files changed, 5 insertions(+), 26 deletions(-) diff --git a/webknossos/Changelog.md b/webknossos/Changelog.md index 60f677b97..9574ae142 100644 --- a/webknossos/Changelog.md +++ b/webknossos/Changelog.md @@ -19,6 +19,7 @@ For upgrade instructions, please check the respective _Breaking Changes_ section ### Changed ### Fixed +- Fixed a bug where parallel access to the properties json leads to an JsonDecodeError in the webknossos CLI [#919](https://github.com/scalableminds/webknossos-libs/issues/919) ## [0.13.0](https://github.com/scalableminds/webknossos-libs/releases/tag/v0.13.0) - 2023-06-21 diff --git a/webknossos/webknossos/cli/convert.py b/webknossos/webknossos/cli/convert.py index cc59faa23..76b8cd232 100644 --- a/webknossos/webknossos/cli/convert.py +++ b/webknossos/webknossos/cli/convert.py @@ -57,14 +57,6 @@ def main( "(if not provided, final component of target path is used)" ), ] = None, - pad: Annotated[ - bool, - typer.Option( - help="Automatically pad image files at the bottom and right borders. " - "Use this, when the input images don't have a common size, but have " - "their origin at (0, 0)." - ), - ] = False, compress: Annotated[ bool, typer.Option(help="Enable compression of the target dataset.") ] = False, @@ -107,7 +99,6 @@ def main( name, data_format=data_format, executor=executor, - pad=pad, ) # TODO pylint: disable=fixme # Include this in the from_images() call as soon as issue #900 is resolved diff --git a/webknossos/webknossos/dataset/_utils/pims_images.py b/webknossos/webknossos/dataset/_utils/pims_images.py index 8aea2879c..c0aadf1ad 100644 --- a/webknossos/webknossos/dataset/_utils/pims_images.py +++ b/webknossos/webknossos/dataset/_utils/pims_images.py @@ -76,7 +76,6 @@ def __init__( flip_x: bool, flip_y: bool, flip_z: bool, - pad: bool, use_bioformats: Optional[bool], is_segmentation: bool, ) -> None: @@ -256,15 +255,7 @@ def __init__( ############################# with self._open_images() as images: - if pad: - images_shape = (len(images),) + tuple( - # Search in all dimensions for the highest value to get max shape - max(values) - for values in zip( - *[cast(pims.FramesSequence, image).shape for image in images] - ) - ) - elif isinstance(images, list): + if isinstance(images, list): images_shape = (len(images),) + cast( pims.FramesSequence, images[0] ).shape @@ -603,7 +594,6 @@ def has_image_z_dimension( flip_x=False, flip_y=False, flip_z=False, - pad=False, ) return pims_images.expected_shape.z > 1 diff --git a/webknossos/webknossos/dataset/dataset.py b/webknossos/webknossos/dataset/dataset.py index 0f97a482b..b8b627a72 100644 --- a/webknossos/webknossos/dataset/dataset.py +++ b/webknossos/webknossos/dataset/dataset.py @@ -567,7 +567,6 @@ def from_images( flip_x: bool = False, flip_y: bool = False, flip_z: bool = False, - pad: bool = False, use_bioformats: Optional[bool] = None, max_layers: int = 20, batch_size: Optional[int] = None, @@ -650,7 +649,6 @@ def from_images( flip_x=flip_x, flip_y=flip_y, flip_z=flip_z, - pad=pad, use_bioformats=use_bioformats, batch_size=batch_size, allow_multiple_layers=True, @@ -1005,7 +1003,6 @@ def add_layer_from_images( flip_x: bool = False, flip_y: bool = False, flip_z: bool = False, - pad: bool = False, dtype: Optional[DTypeLike] = None, use_bioformats: Optional[bool] = None, channel: Optional[int] = None, @@ -1070,7 +1067,6 @@ def add_layer_from_images( flip_x=flip_x, flip_y=flip_y, flip_z=flip_z, - pad=pad, use_bioformats=use_bioformats, is_segmentation=category == "segmentation", ) @@ -1151,7 +1147,6 @@ def add_layer_from_images( flip_x=flip_x, flip_y=flip_y, flip_z=flip_z, - pad=pad, use_bioformats=use_bioformats, is_segmentation=category == "segmentation", **pims_open_kwargs, @@ -1186,7 +1181,9 @@ def add_layer_from_images( ) mag = mag_view.mag layer.bounding_box = ( - BoundingBox((0, 0, 0), pims_images.expected_shape) + BoundingBox( + (0, 0, 0), Vec3Int(2**32, 2**32, pims_images.expected_shape.z) + ) .from_mag_to_mag1(mag) .offset(topleft) ) From 7c6f46d84332cf11b6a34f0c26b35cc029ca0afa Mon Sep 17 00:00:00 2001 From: markbader Date: Mon, 10 Jul 2023 17:11:25 +0200 Subject: [PATCH 04/14] Update changelog. --- webknossos/Changelog.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/webknossos/Changelog.md b/webknossos/Changelog.md index ead737915..6d01a5271 100644 --- a/webknossos/Changelog.md +++ b/webknossos/Changelog.md @@ -19,11 +19,8 @@ For upgrade instructions, please check the respective _Breaking Changes_ section ### Changed ### Fixed -<<<<<<< HEAD - Fixed a bug where parallel access to the properties json leads to an JsonDecodeError in the webknossos CLI [#919](https://github.com/scalableminds/webknossos-libs/issues/919) -======= - Fixed a bug where compression in add_layer_from_images uses too much memory [#900](https://github.com/scalableminds/webknossos-libs/issues/900) ->>>>>>> master ## [0.13.0](https://github.com/scalableminds/webknossos-libs/releases/tag/v0.13.0) - 2023-06-21 From 52cc6b660627278e15eaa2099b45f9de44e79da4 Mon Sep 17 00:00:00 2001 From: markbader Date: Mon, 17 Jul 2023 12:01:58 +0200 Subject: [PATCH 05/14] Add update_bbox argument and propagate it from from_images to actual write of view. --- .../dataset/_utils/buffered_slice_writer.py | 3 +++ webknossos/webknossos/dataset/_utils/pims_images.py | 2 ++ webknossos/webknossos/dataset/dataset.py | 11 ++++++----- webknossos/webknossos/dataset/mag_view.py | 5 +++-- webknossos/webknossos/dataset/view.py | 10 +++++++--- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py b/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py index e32447be1..6552ed2d8 100644 --- a/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py +++ b/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py @@ -34,6 +34,7 @@ def __init__( self, view: "View", offset: Optional[Vec3IntLike] = None, + update_bbox: bool = False, # buffer_size specifies, how many slices should be aggregated until they are flushed. buffer_size: int = 32, dimension: int = 2, # z @@ -48,6 +49,7 @@ def __init__( self.buffer_size = buffer_size self.dtype = self.view.get_dtype() self.use_logging = use_logging + self.update_bbox = update_bbox if offset is None and relative_offset is None and absolute_offset is None: relative_offset = Vec3Int.zeros() if offset is not None: @@ -129,6 +131,7 @@ def _write_buffer(self) -> None: offset=buffer_start.add_or_none(self.offset), relative_offset=buffer_start_mag1.add_or_none(self.relative_offset), absolute_offset=buffer_start_mag1.add_or_none(self.absolute_offset), + update_bbox=self.update_bbox, ) except Exception as exc: diff --git a/webknossos/webknossos/dataset/_utils/pims_images.py b/webknossos/webknossos/dataset/_utils/pims_images.py index c0aadf1ad..4ea2796ee 100644 --- a/webknossos/webknossos/dataset/_utils/pims_images.py +++ b/webknossos/webknossos/dataset/_utils/pims_images.py @@ -477,6 +477,7 @@ def copy_to_view( args: Tuple[int, int], mag_view: MagView, is_segmentation: bool, + update_bbox: bool = False, dtype: Optional[DTypeLike] = None, ) -> Tuple[Tuple[int, int], Optional[int]]: """Copies the images according to the passed arguments to the given mag_view. @@ -496,6 +497,7 @@ def copy_to_view( with mag_view.get_buffered_slice_writer( relative_offset=(0, 0, z_start * mag_view.mag.z), buffer_size=mag_view.info.chunk_shape.z, + update_bbox=update_bbox, ) as writer: for image_slice in images[z_start:z_end]: image_slice = np.array(image_slice) diff --git a/webknossos/webknossos/dataset/dataset.py b/webknossos/webknossos/dataset/dataset.py index b8b627a72..26d57159f 100644 --- a/webknossos/webknossos/dataset/dataset.py +++ b/webknossos/webknossos/dataset/dataset.py @@ -1181,9 +1181,7 @@ def add_layer_from_images( ) mag = mag_view.mag layer.bounding_box = ( - BoundingBox( - (0, 0, 0), Vec3Int(2**32, 2**32, pims_images.expected_shape.z) - ) + BoundingBox((0, 0, 0), Vec3Int(pims_images.expected_shape)) .from_mag_to_mag1(mag) .offset(topleft) ) @@ -1207,6 +1205,7 @@ def add_layer_from_images( mag_view=mag_view, is_segmentation=category == "segmentation", dtype=current_dtype, + update_bbox=False, ) args = [] @@ -1250,9 +1249,11 @@ def add_layer_from_images( .offset(topleft) ) if pims_images.expected_shape != actual_size: - warnings.warn( + logger.info( "[WARNING] Some images are larger than expected, smaller slices are padded with zeros now. " - + f"New size is {actual_size}, expected {pims_images.expected_shape}.", + + "New size is %s, expected %s.", + actual_size, + pims_images.expected_shape, ) if first_layer is None: first_layer = layer diff --git a/webknossos/webknossos/dataset/mag_view.py b/webknossos/webknossos/dataset/mag_view.py index c68fab69c..1f7580230 100644 --- a/webknossos/webknossos/dataset/mag_view.py +++ b/webknossos/webknossos/dataset/mag_view.py @@ -145,6 +145,7 @@ def write( self, data: np.ndarray, offset: Optional[Vec3IntLike] = None, # deprecated, relative, in current mag + update_bbox: bool = True, *, relative_offset: Optional[Vec3IntLike] = None, # in mag1 absolute_offset: Optional[Vec3IntLike] = None, # in mag1 @@ -177,10 +178,10 @@ def write( # Only update the layer's bbox if we are actually larger # than the mag-aligned, rounded up bbox (self.bounding_box): - if not self.bounding_box.contains_bbox(mag1_bbox): + if update_bbox and not self.bounding_box.contains_bbox(mag1_bbox): self.layer.bounding_box = self.layer.bounding_box.extended_by(mag1_bbox) - super().write(data, absolute_offset=mag1_bbox.topleft) + super().write(data, absolute_offset=mag1_bbox.topleft, update_bbox=update_bbox) def read( self, diff --git a/webknossos/webknossos/dataset/view.py b/webknossos/webknossos/dataset/view.py index ffb7e05cc..9b1554775 100644 --- a/webknossos/webknossos/dataset/view.py +++ b/webknossos/webknossos/dataset/view.py @@ -192,6 +192,7 @@ def write( self, data: np.ndarray, offset: Optional[Vec3IntLike] = None, # deprecated, relative, in current mag + update_bbox: bool = True, *, relative_offset: Optional[Vec3IntLike] = None, # in mag1 absolute_offset: Optional[Vec3IntLike] = None, # in mag1 @@ -243,9 +244,10 @@ def write( abs_mag1_offset=absolute_offset, current_mag_size=Vec3Int(data.shape[-3:]), ) - assert self.bounding_box.contains_bbox( - mag1_bbox - ), f"The bounding box to write {mag1_bbox} is larger than the view's bounding box {self.bounding_box}" + if update_bbox: + assert self.bounding_box.contains_bbox( + mag1_bbox + ), f"The bounding box to write {mag1_bbox} is larger than the view's bounding box {self.bounding_box}" if len(data.shape) == 4 and data.shape[0] == 1: data = data[0] # remove channel dimension for single-channel data @@ -633,6 +635,7 @@ def get_buffered_slice_writer( offset: Optional[Vec3IntLike] = None, buffer_size: int = 32, dimension: int = 2, # z + update_bbox: bool = False, *, relative_offset: Optional[Vec3IntLike] = None, # in mag1 absolute_offset: Optional[Vec3IntLike] = None, # in mag1 @@ -674,6 +677,7 @@ def get_buffered_slice_writer( return BufferedSliceWriter( view=self, offset=offset, + update_bbox=update_bbox, buffer_size=buffer_size, dimension=dimension, relative_offset=relative_offset, From 18631949da377bda89e8437f74d74e09c5f717c4 Mon Sep 17 00:00:00 2001 From: markbader Date: Mon, 17 Jul 2023 15:23:29 +0200 Subject: [PATCH 06/14] Implement requested changes. --- .../dataset/_utils/buffered_slice_writer.py | 28 +++++++++++++------ webknossos/webknossos/dataset/mag_view.py | 6 +++- webknossos/webknossos/dataset/view.py | 4 +-- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py b/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py index 6552ed2d8..20231d7b3 100644 --- a/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py +++ b/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py @@ -9,6 +9,7 @@ import numpy as np import psutil +from webknossos.dataset.mag_view import MagView from webknossos.geometry import Vec3Int, Vec3IntLike if TYPE_CHECKING: @@ -34,7 +35,9 @@ def __init__( self, view: "View", offset: Optional[Vec3IntLike] = None, - update_bbox: bool = False, + # update_bbox enables the update of the bounding box and rewriting of the properties json. + # It should be False when parallel access is intended. + update_bbox: bool = True, # buffer_size specifies, how many slices should be aggregated until they are flushed. buffer_size: int = 32, dimension: int = 2, # z @@ -126,13 +129,22 @@ def _write_buffer(self) -> None: buffer_start_list[self.dimension] = self.buffer_start_slice buffer_start = Vec3Int(buffer_start_list) buffer_start_mag1 = buffer_start * self.view.mag.to_vec3_int() - self.view.write( - data, - offset=buffer_start.add_or_none(self.offset), - relative_offset=buffer_start_mag1.add_or_none(self.relative_offset), - absolute_offset=buffer_start_mag1.add_or_none(self.absolute_offset), - update_bbox=self.update_bbox, - ) + if isinstance(self.view, MagView): + self.view.write( + data, + offset=buffer_start.add_or_none(self.offset), + relative_offset=buffer_start_mag1.add_or_none(self.relative_offset), + absolute_offset=buffer_start_mag1.add_or_none(self.absolute_offset), + update_bbox=self.update_bbox, + ) + else: + self.view.write( + data, + offset=buffer_start.add_or_none(self.offset), + relative_offset=buffer_start_mag1.add_or_none(self.relative_offset), + absolute_offset=buffer_start_mag1.add_or_none(self.absolute_offset), + allow_write_outside_bbox=not self.update_bbox, + ) except Exception as exc: error( diff --git a/webknossos/webknossos/dataset/mag_view.py b/webknossos/webknossos/dataset/mag_view.py index 1f7580230..558697760 100644 --- a/webknossos/webknossos/dataset/mag_view.py +++ b/webknossos/webknossos/dataset/mag_view.py @@ -181,7 +181,11 @@ def write( if update_bbox and not self.bounding_box.contains_bbox(mag1_bbox): self.layer.bounding_box = self.layer.bounding_box.extended_by(mag1_bbox) - super().write(data, absolute_offset=mag1_bbox.topleft, update_bbox=update_bbox) + super().write( + data, + absolute_offset=mag1_bbox.topleft, + allow_write_outside_bbox=not update_bbox, + ) def read( self, diff --git a/webknossos/webknossos/dataset/view.py b/webknossos/webknossos/dataset/view.py index 9b1554775..3d5bb06d2 100644 --- a/webknossos/webknossos/dataset/view.py +++ b/webknossos/webknossos/dataset/view.py @@ -192,7 +192,7 @@ def write( self, data: np.ndarray, offset: Optional[Vec3IntLike] = None, # deprecated, relative, in current mag - update_bbox: bool = True, + allow_write_outside_bbox: bool = False, *, relative_offset: Optional[Vec3IntLike] = None, # in mag1 absolute_offset: Optional[Vec3IntLike] = None, # in mag1 @@ -244,7 +244,7 @@ def write( abs_mag1_offset=absolute_offset, current_mag_size=Vec3Int(data.shape[-3:]), ) - if update_bbox: + if not allow_write_outside_bbox: assert self.bounding_box.contains_bbox( mag1_bbox ), f"The bounding box to write {mag1_bbox} is larger than the view's bounding box {self.bounding_box}" From 3bbcd06439943e6729e630ff3c21a27e60e591f9 Mon Sep 17 00:00:00 2001 From: markbader Date: Mon, 17 Jul 2023 15:37:15 +0200 Subject: [PATCH 07/14] Minor changes to default values. --- webknossos/webknossos/dataset/dataset.py | 4 ++-- webknossos/webknossos/dataset/view.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/webknossos/webknossos/dataset/dataset.py b/webknossos/webknossos/dataset/dataset.py index 2e3c524cc..332b4b724 100644 --- a/webknossos/webknossos/dataset/dataset.py +++ b/webknossos/webknossos/dataset/dataset.py @@ -30,11 +30,11 @@ import attr import numpy as np from boltons.typeutils import make_sentinel -from cluster_tools import Executor from natsort import natsort_keygen from numpy.typing import DTypeLike from upath import UPath +from cluster_tools import Executor from webknossos.dataset.defaults import ( DEFAULT_CHUNK_SHAPE, DEFAULT_CHUNKS_PER_SHARD_ZARR, @@ -1181,7 +1181,7 @@ def add_layer_from_images( ) mag = mag_view.mag layer.bounding_box = ( - BoundingBox((0, 0, 0), Vec3Int(pims_images.expected_shape)) + BoundingBox((0, 0, 0), pims_images.expected_shape) .from_mag_to_mag1(mag) .offset(topleft) ) diff --git a/webknossos/webknossos/dataset/view.py b/webknossos/webknossos/dataset/view.py index 3d5bb06d2..f65e1a3e7 100644 --- a/webknossos/webknossos/dataset/view.py +++ b/webknossos/webknossos/dataset/view.py @@ -16,6 +16,7 @@ import numpy as np import wkw + from cluster_tools import Executor from ..geometry import BoundingBox, Mag, Vec3Int, Vec3IntLike @@ -635,7 +636,9 @@ def get_buffered_slice_writer( offset: Optional[Vec3IntLike] = None, buffer_size: int = 32, dimension: int = 2, # z - update_bbox: bool = False, + # update_bbox enables the update of the bounding box and rewriting of the properties json. + # It should be False when parallel access is intended. + update_bbox: bool = True, *, relative_offset: Optional[Vec3IntLike] = None, # in mag1 absolute_offset: Optional[Vec3IntLike] = None, # in mag1 From a6366c162bcb334ec2f60ba2396de16543d01a30 Mon Sep 17 00:00:00 2001 From: markbader Date: Mon, 17 Jul 2023 15:37:43 +0200 Subject: [PATCH 08/14] Run formatter. --- webknossos/webknossos/dataset/dataset.py | 2 +- webknossos/webknossos/dataset/view.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/webknossos/webknossos/dataset/dataset.py b/webknossos/webknossos/dataset/dataset.py index 332b4b724..9c8d12599 100644 --- a/webknossos/webknossos/dataset/dataset.py +++ b/webknossos/webknossos/dataset/dataset.py @@ -30,11 +30,11 @@ import attr import numpy as np from boltons.typeutils import make_sentinel +from cluster_tools import Executor from natsort import natsort_keygen from numpy.typing import DTypeLike from upath import UPath -from cluster_tools import Executor from webknossos.dataset.defaults import ( DEFAULT_CHUNK_SHAPE, DEFAULT_CHUNKS_PER_SHARD_ZARR, diff --git a/webknossos/webknossos/dataset/view.py b/webknossos/webknossos/dataset/view.py index f65e1a3e7..e165eb39c 100644 --- a/webknossos/webknossos/dataset/view.py +++ b/webknossos/webknossos/dataset/view.py @@ -16,7 +16,6 @@ import numpy as np import wkw - from cluster_tools import Executor from ..geometry import BoundingBox, Mag, Vec3Int, Vec3IntLike From e3336f7b59deb61ac0fe36ab9e2693a5895a6b9b Mon Sep 17 00:00:00 2001 From: markbader Date: Thu, 20 Jul 2023 13:42:57 +0200 Subject: [PATCH 09/14] Add filelock dependency and start to change to SoftFileLock implementation. --- webknossos/poetry.lock | 17 +++++++++++- webknossos/pyproject.toml | 1 + .../dataset/_utils/buffered_slice_writer.py | 27 +++++-------------- .../webknossos/dataset/_utils/pims_images.py | 2 -- webknossos/webknossos/dataset/dataset.py | 20 +++++++------- webknossos/webknossos/dataset/mag_view.py | 4 +-- webknossos/webknossos/dataset/view.py | 12 +++------ 7 files changed, 38 insertions(+), 45 deletions(-) diff --git a/webknossos/poetry.lock b/webknossos/poetry.lock index 8d9b8f6cb..d4a26f1b7 100644 --- a/webknossos/poetry.lock +++ b/webknossos/poetry.lock @@ -865,6 +865,21 @@ files = [ [package.dependencies] numpy = "*" +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + [[package]] name = "frozenlist" version = "1.3.3" @@ -3365,4 +3380,4 @@ tifffile = ["pims", "tifffile"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "74647410aeb5f42f69d7861f7d63a66e1ba7d9eb34d1301f92ffd9aae56fbbad" +content-hash = "b5065dd9341b8f19cf2907bb240586699023bd8c9d303ac5750d3353934633eb" diff --git a/webknossos/pyproject.toml b/webknossos/pyproject.toml index 11f15794f..038a36813 100644 --- a/webknossos/pyproject.toml +++ b/webknossos/pyproject.toml @@ -34,6 +34,7 @@ attrs = "^22.1.0" boltons = "~21.0.0" cattrs = "^22.2.0" cluster_tools = { path = "../cluster_tools/", develop = true } +filelock = "^3.8.0" fsspec = "^2022.2.0" httpx = ">=0.15.4,<0.19.0" loxun = "^2.0" diff --git a/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py b/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py index 20231d7b3..e32447be1 100644 --- a/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py +++ b/webknossos/webknossos/dataset/_utils/buffered_slice_writer.py @@ -9,7 +9,6 @@ import numpy as np import psutil -from webknossos.dataset.mag_view import MagView from webknossos.geometry import Vec3Int, Vec3IntLike if TYPE_CHECKING: @@ -35,9 +34,6 @@ def __init__( self, view: "View", offset: Optional[Vec3IntLike] = None, - # update_bbox enables the update of the bounding box and rewriting of the properties json. - # It should be False when parallel access is intended. - update_bbox: bool = True, # buffer_size specifies, how many slices should be aggregated until they are flushed. buffer_size: int = 32, dimension: int = 2, # z @@ -52,7 +48,6 @@ def __init__( self.buffer_size = buffer_size self.dtype = self.view.get_dtype() self.use_logging = use_logging - self.update_bbox = update_bbox if offset is None and relative_offset is None and absolute_offset is None: relative_offset = Vec3Int.zeros() if offset is not None: @@ -129,22 +124,12 @@ def _write_buffer(self) -> None: buffer_start_list[self.dimension] = self.buffer_start_slice buffer_start = Vec3Int(buffer_start_list) buffer_start_mag1 = buffer_start * self.view.mag.to_vec3_int() - if isinstance(self.view, MagView): - self.view.write( - data, - offset=buffer_start.add_or_none(self.offset), - relative_offset=buffer_start_mag1.add_or_none(self.relative_offset), - absolute_offset=buffer_start_mag1.add_or_none(self.absolute_offset), - update_bbox=self.update_bbox, - ) - else: - self.view.write( - data, - offset=buffer_start.add_or_none(self.offset), - relative_offset=buffer_start_mag1.add_or_none(self.relative_offset), - absolute_offset=buffer_start_mag1.add_or_none(self.absolute_offset), - allow_write_outside_bbox=not self.update_bbox, - ) + self.view.write( + data, + offset=buffer_start.add_or_none(self.offset), + relative_offset=buffer_start_mag1.add_or_none(self.relative_offset), + absolute_offset=buffer_start_mag1.add_or_none(self.absolute_offset), + ) except Exception as exc: error( diff --git a/webknossos/webknossos/dataset/_utils/pims_images.py b/webknossos/webknossos/dataset/_utils/pims_images.py index 4ea2796ee..c0aadf1ad 100644 --- a/webknossos/webknossos/dataset/_utils/pims_images.py +++ b/webknossos/webknossos/dataset/_utils/pims_images.py @@ -477,7 +477,6 @@ def copy_to_view( args: Tuple[int, int], mag_view: MagView, is_segmentation: bool, - update_bbox: bool = False, dtype: Optional[DTypeLike] = None, ) -> Tuple[Tuple[int, int], Optional[int]]: """Copies the images according to the passed arguments to the given mag_view. @@ -497,7 +496,6 @@ def copy_to_view( with mag_view.get_buffered_slice_writer( relative_offset=(0, 0, z_start * mag_view.mag.z), buffer_size=mag_view.info.chunk_shape.z, - update_bbox=update_bbox, ) as writer: for image_slice in images[z_start:z_end]: image_slice = np.array(image_slice) diff --git a/webknossos/webknossos/dataset/dataset.py b/webknossos/webknossos/dataset/dataset.py index 9c8d12599..7021448dd 100644 --- a/webknossos/webknossos/dataset/dataset.py +++ b/webknossos/webknossos/dataset/dataset.py @@ -31,6 +31,7 @@ import numpy as np from boltons.typeutils import make_sentinel from cluster_tools import Executor +from filelock import SoftFileLock from natsort import natsort_keygen from numpy.typing import DTypeLike from upath import UPath @@ -1205,7 +1206,6 @@ def add_layer_from_images( mag_view=mag_view, is_segmentation=category == "segmentation", dtype=current_dtype, - update_bbox=False, ) args = [] @@ -1673,15 +1673,17 @@ def _export_as_json(self) -> None: + "newer than the ones that were seen last time. The properties will be overwritten. This is " + "likely happening because multiple processes changed the metadata of this dataset." ) + with SoftFileLock(self.path / PROPERTIES_FILE_NAME, timeout=3): + with (self.path / PROPERTIES_FILE_NAME).open( + "w", encoding="utf-8" + ) as outfile: + json.dump( + dataset_converter.unstructure(self._properties), + outfile, + indent=4, + ) - with (self.path / PROPERTIES_FILE_NAME).open("w", encoding="utf-8") as outfile: - json.dump( - dataset_converter.unstructure(self._properties), - outfile, - indent=4, - ) - - self._last_read_properties = copy.deepcopy(self._properties) + self._last_read_properties = copy.deepcopy(self._properties) # Write out Zarr and OME-Ngff metadata if there is a Zarr layer if any(layer.data_format == DataFormat.Zarr for layer in self.layers.values()): diff --git a/webknossos/webknossos/dataset/mag_view.py b/webknossos/webknossos/dataset/mag_view.py index 558697760..892afbcc3 100644 --- a/webknossos/webknossos/dataset/mag_view.py +++ b/webknossos/webknossos/dataset/mag_view.py @@ -145,7 +145,6 @@ def write( self, data: np.ndarray, offset: Optional[Vec3IntLike] = None, # deprecated, relative, in current mag - update_bbox: bool = True, *, relative_offset: Optional[Vec3IntLike] = None, # in mag1 absolute_offset: Optional[Vec3IntLike] = None, # in mag1 @@ -178,13 +177,12 @@ def write( # Only update the layer's bbox if we are actually larger # than the mag-aligned, rounded up bbox (self.bounding_box): - if update_bbox and not self.bounding_box.contains_bbox(mag1_bbox): + if not self.bounding_box.contains_bbox(mag1_bbox): self.layer.bounding_box = self.layer.bounding_box.extended_by(mag1_bbox) super().write( data, absolute_offset=mag1_bbox.topleft, - allow_write_outside_bbox=not update_bbox, ) def read( diff --git a/webknossos/webknossos/dataset/view.py b/webknossos/webknossos/dataset/view.py index e165eb39c..ffb7e05cc 100644 --- a/webknossos/webknossos/dataset/view.py +++ b/webknossos/webknossos/dataset/view.py @@ -192,7 +192,6 @@ def write( self, data: np.ndarray, offset: Optional[Vec3IntLike] = None, # deprecated, relative, in current mag - allow_write_outside_bbox: bool = False, *, relative_offset: Optional[Vec3IntLike] = None, # in mag1 absolute_offset: Optional[Vec3IntLike] = None, # in mag1 @@ -244,10 +243,9 @@ def write( abs_mag1_offset=absolute_offset, current_mag_size=Vec3Int(data.shape[-3:]), ) - if not allow_write_outside_bbox: - assert self.bounding_box.contains_bbox( - mag1_bbox - ), f"The bounding box to write {mag1_bbox} is larger than the view's bounding box {self.bounding_box}" + assert self.bounding_box.contains_bbox( + mag1_bbox + ), f"The bounding box to write {mag1_bbox} is larger than the view's bounding box {self.bounding_box}" if len(data.shape) == 4 and data.shape[0] == 1: data = data[0] # remove channel dimension for single-channel data @@ -635,9 +633,6 @@ def get_buffered_slice_writer( offset: Optional[Vec3IntLike] = None, buffer_size: int = 32, dimension: int = 2, # z - # update_bbox enables the update of the bounding box and rewriting of the properties json. - # It should be False when parallel access is intended. - update_bbox: bool = True, *, relative_offset: Optional[Vec3IntLike] = None, # in mag1 absolute_offset: Optional[Vec3IntLike] = None, # in mag1 @@ -679,7 +674,6 @@ def get_buffered_slice_writer( return BufferedSliceWriter( view=self, offset=offset, - update_bbox=update_bbox, buffer_size=buffer_size, dimension=dimension, relative_offset=relative_offset, From 1f4f77300c9173b3e52a933afd1b196bf1159b1e Mon Sep 17 00:00:00 2001 From: markbader Date: Thu, 20 Jul 2023 18:37:15 +0200 Subject: [PATCH 10/14] Implement filelock (upaths are not supported yet). --- webknossos/webknossos/dataset/dataset.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webknossos/webknossos/dataset/dataset.py b/webknossos/webknossos/dataset/dataset.py index 7021448dd..81ef65dba 100644 --- a/webknossos/webknossos/dataset/dataset.py +++ b/webknossos/webknossos/dataset/dataset.py @@ -1673,8 +1673,8 @@ def _export_as_json(self) -> None: + "newer than the ones that were seen last time. The properties will be overwritten. This is " + "likely happening because multiple processes changed the metadata of this dataset." ) - with SoftFileLock(self.path / PROPERTIES_FILE_NAME, timeout=3): - with (self.path / PROPERTIES_FILE_NAME).open( + with SoftFileLock(self.path / f"{PROPERTIES_FILE_NAME}.lock", timeout=3): + with (self.path.absolute() / PROPERTIES_FILE_NAME).open( "w", encoding="utf-8" ) as outfile: json.dump( From 9122256e41edfd2a7184a398c59a7d51635e08d2 Mon Sep 17 00:00:00 2001 From: markbader Date: Mon, 24 Jul 2023 15:48:08 +0200 Subject: [PATCH 11/14] Adapted implementation of SoftFileLock. Still does not support filelock for s3 buckets. --- ...on_from_url[61c20205010000cc004a6356].yaml | 54 +- ...annotation_from_url[LNir_A2-aCUzsoSL].yaml | 4 +- .../test_bounding_box_roundtrip.yaml | 2619 +------- .../test_examples/test_learned_segmenter.yaml | 394 +- .../test_examples/test_remote_datasets.yaml | 5571 +---------------- .../test_examples/test_upload_image_data.yaml | 292 +- .../test_examples/test_upload_tiff_stack.yaml | 264 +- .../test_examples/test_user_times.yaml | 8 +- .../test_build_info.yaml | 6 +- ...urrent_user_info_and_user_logged_time.yaml | 2 +- .../test_generated_client/test_user_list.yaml | 2 +- .../test_context/test_user_organization.yaml | 2 +- .../test_user/test_get_all_managed_users.yaml | 2 +- .../test_user/test_get_current_user.yaml | 2 +- .../test_user/test_get_logged_time.yaml | 2 +- .../test_remote_dataset.yaml | 718 +-- .../test_upload_download_roundtrip.yaml | 510 +- ...est_url_open_remote[93zLg9U9vJ3c_UWp].yaml | 104 +- ...t_url_open_remote[l4_sample_dev-view].yaml | 80 +- .../test_url_open_remote[l4_sample_dev].yaml | 28 +- ...en_remote[l4_sample_dev_sharing-view].yaml | 104 +- webknossos/webknossos/dataset/dataset.py | 4 +- webknossos/webknossos/utils.py | 332 +- 23 files changed, 1967 insertions(+), 9137 deletions(-) diff --git a/webknossos/tests/cassettes/test_annotation/test_annotation_from_url[61c20205010000cc004a6356].yaml b/webknossos/tests/cassettes/test_annotation/test_annotation_from_url[61c20205010000cc004a6356].yaml index eb7929e1b..df2ffa9c3 100644 --- a/webknossos/tests/cassettes/test_annotation/test_annotation_from_url[61c20205010000cc004a6356].yaml +++ b/webknossos/tests/cassettes/test_annotation/test_annotation_from_url[61c20205010000cc004a6356].yaml @@ -19,7 +19,7 @@ interactions: zip: l4dense_motta_et_al_demo_v2__explorational__potto__4a6356.nml: "\n \ \n \n \n \n \n \n \n \ \n \ \n \n \n \n \n \n \n \ \n

The following are the contents of the folder:

\n \n \n\n" + href=\"color\">color\n \n \n \n\n" headers: access-control-allow-origin: - '*' @@ -134,7 +133,7 @@ interactions: cache-control: - no-cache content-length: - - '1490' + - '1426' content-type: - text/html; charset=UTF-8 date: Mon, 01 Jan 2000 00:00:00 GMT @@ -172,8 +171,7 @@ interactions: folder.

\n

The following are the contents of the folder:

\n \n \n\n" + href=\"color\">color\n \n \n \n\n" headers: access-control-allow-origin: - '*' @@ -182,7 +180,7 @@ interactions: cache-control: - no-cache content-length: - - '1490' + - '1426' content-type: - text/html; charset=UTF-8 date: Mon, 01 Jan 2000 00:00:00 GMT @@ -220,8 +218,7 @@ interactions: folder.

\n

The following are the contents of the folder:

\n \n \n\n" + href=\"color\">color\n \n \n \n\n" headers: access-control-allow-origin: - '*' @@ -230,7 +227,7 @@ interactions: cache-control: - no-cache content-length: - - '1490' + - '1426' content-type: - text/html; charset=UTF-8 date: Mon, 01 Jan 2000 00:00:00 GMT @@ -251,7 +248,7 @@ interactions: uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/datasource-properties.json response: body: - string: '{"id":{"name":"e2006_knossos","team":"Organization_X"},"dataLayers":[{"name":"color","category":"color","boundingBox":{"topLeft":[3072,3072,512],"width":1024,"height":1024,"depth":1024},"elementClass":"uint8","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[2,2,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[4,4,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[8,8,2],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[16,16,4],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"numChannels":1,"dataFormat":"zarr"},{"name":"segmentation","boundingBox":{"topLeft":[3072,3072,512],"width":1024,"height":1024,"depth":1024},"elementClass":"uint32","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[2,2,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[4,4,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[8,8,2],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[16,16,4],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"largestSegmentId":2504697,"numChannels":1,"category":"segmentation","dataFormat":"zarr"}],"scale":[11.239999771118164,11.239999771118164,28]}' + string: '{"id":{"name":"e2006_knossos","team":"Organization_X"},"dataLayers":[{"name":"color","category":"color","boundingBox":{"topLeft":[0,0,0],"width":24,"height":24,"depth":24},"elementClass":"uint24","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"numChannels":3,"dataFormat":"zarr"}],"scale":[1.1,1.1,1.1]}' headers: access-control-allow-origin: - '*' @@ -260,7 +257,7 @@ interactions: cache-control: - no-cache content-length: - - '1079' + - '319' content-type: - application/json date: Mon, 01 Jan 2000 00:00:00 GMT @@ -281,7 +278,7 @@ interactions: uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/datasource-properties.json response: body: - string: '{"id":{"name":"e2006_knossos","team":"Organization_X"},"dataLayers":[{"name":"color","category":"color","boundingBox":{"topLeft":[3072,3072,512],"width":1024,"height":1024,"depth":1024},"elementClass":"uint8","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[2,2,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[4,4,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[8,8,2],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[16,16,4],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"numChannels":1,"dataFormat":"zarr"},{"name":"segmentation","boundingBox":{"topLeft":[3072,3072,512],"width":1024,"height":1024,"depth":1024},"elementClass":"uint32","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[2,2,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[4,4,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[8,8,2],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[16,16,4],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"largestSegmentId":2504697,"numChannels":1,"category":"segmentation","dataFormat":"zarr"}],"scale":[11.239999771118164,11.239999771118164,28]}' + string: '{"id":{"name":"e2006_knossos","team":"Organization_X"},"dataLayers":[{"name":"color","category":"color","boundingBox":{"topLeft":[0,0,0],"width":24,"height":24,"depth":24},"elementClass":"uint24","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"numChannels":3,"dataFormat":"zarr"}],"scale":[1.1,1.1,1.1]}' headers: access-control-allow-origin: - '*' @@ -290,7 +287,7 @@ interactions: cache-control: - no-cache content-length: - - '1079' + - '319' content-type: - application/json date: Mon, 01 Jan 2000 00:00:00 GMT @@ -322,7 +319,7 @@ interactions: cache-control: - no-cache content-length: - - '1079' + - '319' content-type: - application/json date: Mon, 01 Jan 2000 00:00:00 GMT @@ -340,12 +337,12 @@ interactions: body: null headers: Range: - - bytes=0-1078 + - bytes=0-318 method: GET uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/datasource-properties.json response: body: - string: '{"id":{"name":"e2006_knossos","team":"Organization_X"},"dataLayers":[{"name":"color","category":"color","boundingBox":{"topLeft":[3072,3072,512],"width":1024,"height":1024,"depth":1024},"elementClass":"uint8","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[2,2,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[4,4,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[8,8,2],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[16,16,4],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"numChannels":1,"dataFormat":"zarr"},{"name":"segmentation","boundingBox":{"topLeft":[3072,3072,512],"width":1024,"height":1024,"depth":1024},"elementClass":"uint32","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[2,2,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[4,4,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[8,8,2],"axisOrder":{"x":1,"y":2,"z":3,"c":0}},{"mag":[16,16,4],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"largestSegmentId":2504697,"numChannels":1,"category":"segmentation","dataFormat":"zarr"}],"scale":[11.239999771118164,11.239999771118164,28]}' + string: '{"id":{"name":"e2006_knossos","team":"Organization_X"},"dataLayers":[{"name":"color","category":"color","boundingBox":{"topLeft":[0,0,0],"width":24,"height":24,"depth":24},"elementClass":"uint24","mags":[{"mag":[1,1,1],"axisOrder":{"x":1,"y":2,"z":3,"c":0}}],"numChannels":3,"dataFormat":"zarr"}],"scale":[1.1,1.1,1.1]}' headers: access-control-allow-origin: - '*' @@ -354,7 +351,7 @@ interactions: cache-control: - no-cache content-length: - - '1079' + - '319' content-type: - application/json date: Mon, 01 Jan 2000 00:00:00 GMT @@ -483,7 +480,7 @@ interactions: uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1/.zarray response: body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,4096,4096,1536],"dimension_seperator":"."}' + string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[3,32,32,32],"compressor":null,"filters":null,"shape":[3,24,24,24],"dimension_seperator":"."}' headers: access-control-allow-origin: - '*' @@ -492,7 +489,7 @@ interactions: cache-control: - no-cache content-length: - - '166' + - '160' content-type: - application/json date: Mon, 01 Jan 2000 00:00:00 GMT @@ -541,2402 +538,10 @@ interactions: body: null headers: {} method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,4096,4096,1536],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '166' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1292' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/2-2-1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1296' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,2048,2048,1536],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '166' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,2048,2048,1536],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '166' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/2-2-1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1296' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/2-2-1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/4-4-1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1296' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,1024,1024,1536],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '166' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,1024,1024,1536],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '166' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/4-4-1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1296' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/4-4-1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/8-8-2\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1296' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,512,512,768],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '163' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,512,512,768],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '163' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/8-8-2\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1296' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/8-8-2 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/16-16-4\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1298' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,256,256,384],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '163' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/.zarray - response: - body: - string: '{"dtype":"|u1","fill_value":0,"zarr_format":2,"order":"F","chunks":[1,32,32,32],"compressor":null,"filters":null,"shape":[1,256,256,384],"dimension_seperator":"."}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '163' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/.zarray -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/16-16-4\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1298' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/16-16-4 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/1 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1299' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/1/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/1/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/1/.zarray - response: - body: - string: '{"dtype":"\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1299' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/2-2-1 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/2-2-1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1303' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/2-2-1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/2-2-1/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/2-2-1/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/2-2-1/.zarray - response: - body: - string: '{"dtype":"\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/2-2-1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1303' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/2-2-1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/4-4-1 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/4-4-1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1303' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/4-4-1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/4-4-1/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/4-4-1/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/4-4-1/.zarray - response: - body: - string: '{"dtype":"\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/4-4-1\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1303' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/4-4-1 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/8-8-2 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/8-8-2\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1303' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/8-8-2 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/8-8-2/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/8-8-2/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/8-8-2/.zattrs - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/8-8-2/.zattrs -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/8-8-2/.zarray - response: - body: - string: '{"dtype":"\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/8-8-2\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1303' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/8-8-2 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/16-16-4 - response: - body: - string: "\n\n \n \n WEBKNOSSOS - Datastore\n \n \n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/16-16-4\u201D - folder.

\n

The following are the contents of the folder:

\n \n - \ \n\n" - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '1305' - content-type: - - text/html; charset=UTF-8 - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 200 - message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/16-16-4 -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/16-16-4/zarr.json - response: - body: - string: '{"messages":[{"error":"The requested chunk coordinates are in an invalid - format. Expected c.x.y.z"}]}' - headers: - access-control-allow-origin: - - '*' - access-control-max-age: - - '600' - cache-control: - - no-cache - content-length: - - '101' - content-type: - - application/json - date: Mon, 01 Jan 2000 00:00:00 GMT - referrer-policy: - - origin-when-cross-origin, strict-origin-when-cross-origin - x-permitted-cross-domain-policies: - - master-only - x-xss-protection: - - 1; mode=block - status: - code: 404 - message: Not Found - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/16-16-4/zarr.json -- request: - body: null - headers: {} - method: GET - uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/16-16-4/.zarray + uri: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1/.zarray response: body: - string: '{"dtype":"\n\n \n \n - \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/segmentation/16-16-4\u201D + \ \n \n

This is the WEBKNOSSOS Datastore \u201COrganization_X/e2006_knossos/color/1\u201D folder.

\n

The following are the contents of the folder:

\n \n \ \n\n" @@ -3114,7 +627,7 @@ interactions: cache-control: - no-cache content-length: - - '1305' + - '1292' content-type: - text/html; charset=UTF-8 date: Mon, 01 Jan 2000 00:00:00 GMT @@ -3127,25 +640,24 @@ interactions: status: code: 200 message: OK - url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/segmentation/16-16-4 + url: http://localhost:9000/data/zarr/Organization_X/e2006_knossos/color/1 - request: body: zip: test_bounding_box_roundtrip.nml: "\n\n - \ \n \n \n \n \n - \ \n \n \n - \ \n \n \n \n \n \n \n \n \n\n" + \ \n \n \n \n \n \n \n \n \n \n \n + \ \n \n \n + \ \n \n \n
\n" headers: accept: - '*/*' @@ -3154,7 +666,7 @@ interactions: connection: - keep-alive content-length: - - '967' + - '954' content-type: - multipart/form-data; boundary=fffffff0000000 host: @@ -3164,7 +676,7 @@ interactions: method: POST uri: http://localhost:9000/api/annotations/upload response: - content: '{"annotation":{"typ":"Explorational","id":"64915a7b090200db024cdd41"},"messages":[{"success":"Successfully + content: '{"annotation":{"typ":"Explorational","id":"64be670a0100009200b779f8"},"messages":[{"success":"Successfully uploaded file"}]}' headers: cache-control: @@ -3196,38 +708,37 @@ interactions: user-agent: - python-httpx/0.18.2 method: GET - uri: http://localhost:9000/api/annotations/64915a7b090200db024cdd41/download?skipVolumeData=false + uri: http://localhost:9000/api/annotations/64be670a0100009200b779f8/download?skipVolumeData=false response: content: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n - \ \n" + description=\"\" wkUrl=\"http://localhost:9000\" />\n \n \n