diff --git a/zarr/convenience.py b/zarr/convenience.py index 27b0655baa..1bb99c92e4 100644 --- a/zarr/convenience.py +++ b/zarr/convenience.py @@ -1120,7 +1120,6 @@ def is_zarr_key(key): return (key.endswith('.zarray') or key.endswith('.zgroup') or key.endswith('.zattrs')) -# out = {key: store[key].decode() for key in store if is_zarr_key(key)} out = { 'zarr_consolidated_format': 1, 'metadata': { diff --git a/zarr/meta.py b/zarr/meta.py index bef53c2917..9ce580eff2 100644 --- a/zarr/meta.py +++ b/zarr/meta.py @@ -34,13 +34,21 @@ def json_dumps(o): def parse_metadata(s): + + # Here we allow that a store may return an already-parsed metadata object, + # or a string of JSON that we will parse here. We allow for an already-parsed + # object to accommodate a consolidated metadata store, where all the metadata for + # all groups and arrays will already have been parsed from JSON. + if isinstance(s, Mapping): # assume metadata has already been parsed into a mapping object meta = s + else: # assume metadata needs to be parsed as JSON s = ensure_str(s) meta = json.loads(s) + return meta