From a9b13a0684b46465f7680cf1ce1e9a0d16959a35 Mon Sep 17 00:00:00 2001 From: Josh Moore Date: Sun, 16 Jul 2023 21:33:17 -0700 Subject: [PATCH 1/2] Hard-code .zmetadata in FSStore._normalize_key The normalization code in FSStore uses a list of well-known files to prevent incorrectly re-writing keys when dimension separator is "/" rather than ".". This was initialized only with the names specified in the spec, which left out ".zmetadata" from consolidated metadata. see: #1121 --- zarr/storage.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/zarr/storage.py b/zarr/storage.py index c91f2f1cf0..de5bad33bf 100644 --- a/zarr/storage.py +++ b/zarr/storage.py @@ -1378,7 +1378,12 @@ def _normalize_key(self, key): if key: *bits, end = key.split('/') - if end not in (self._array_meta_key, self._group_meta_key, self._attrs_key): + if end not in ( + self._array_meta_key, + self._group_meta_key, + self._attrs_key, + ".zmetadata", # see: #1121 + ): end = end.replace('.', self.key_separator) key = '/'.join(bits + [end]) From 0350a24bbe1beb59eafcf4879bf107c218d21bbb Mon Sep 17 00:00:00 2001 From: Josh Moore Date: Wed, 14 Feb 2024 21:36:57 +0100 Subject: [PATCH 2/2] fix formatting --- zarr/storage.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/zarr/storage.py b/zarr/storage.py index 821d0a3bf3..62f68fe3bc 100644 --- a/zarr/storage.py +++ b/zarr/storage.py @@ -14,6 +14,7 @@ path) and a `getsize` method (return the size in bytes of a given value). """ + import atexit import errno import glob @@ -1410,8 +1411,8 @@ def _normalize_key(self, key): self._attrs_key, ".zmetadata", # see: #1121 ): - end = end.replace('.', self.key_separator) - key = '/'.join(bits + [end]) + end = end.replace(".", self.key_separator) + key = "/".join(bits + [end]) return key.lower() if self.normalize_keys else key