Skip to content

Commit 0cfd2be

Browse files
authored
Array & Group: Use already loaded attributes to populate cache. (#1734)
* Array: Use already loaded attributes to populate cache. * Group: Use already loaded attributes to populate cache. * Fix * Add release note
1 parent bcb7684 commit 0cfd2be

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

docs/release.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ Unreleased
2121
Enhancements
2222
~~~~~~~~~~~~
2323

24+
* [v3] Reuse the download array metadata when creating an ``Array``.
25+
By :user:`Deepak Cherian <dcherian>`.
26+
2427
* Optimize ``Array.info`` so that it calls `getsize` only once.
2528
By :user:`Deepak Cherian <dcherian>`.
29+
2630
* Override IPython ``_repr_*_`` methods to avoid expensive lookups against object stores.
2731
By :user:`Deepak Cherian <dcherian>` :issue:`1716`.
2832

zarr/attrs.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ class Attributes(MutableMapping):
2525
2626
"""
2727

28-
def __init__(self, store, key=".zattrs", read_only=False, cache=True, synchronizer=None):
28+
def __init__(
29+
self, store, key=".zattrs", read_only=False, cache=True, synchronizer=None, cached_dict=None
30+
):
2931
self._version = getattr(store, "_store_version", 2)
3032
_Store = Store if self._version == 2 else StoreV3
3133
self.store = _Store._ensure_store(store)
3234
self.key = key
3335
self.read_only = read_only
3436
self.cache = cache
35-
self._cached_asdict = None
37+
self._cached_asdict = cached_dict if cache else None
3638
self.synchronizer = synchronizer
3739

3840
def _get_nosync(self):

zarr/core.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,12 @@ def __init__(
172172
# initialize attributes
173173
akey = _prefix_to_attrs_key(self._store, self._key_prefix)
174174
self._attrs = Attributes(
175-
store, key=akey, read_only=read_only, synchronizer=synchronizer, cache=cache_attrs
175+
store,
176+
key=akey,
177+
read_only=read_only,
178+
synchronizer=synchronizer,
179+
cache=cache_attrs,
180+
cached_dict=self._meta["attributes"] if self._version == 3 else None,
176181
)
177182

178183
# initialize info reporter

zarr/hierarchy.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,12 @@ def __init__(
208208
# object can still be created.
209209
akey = mkey
210210
self._attrs = Attributes(
211-
store, key=akey, read_only=read_only, cache=cache_attrs, synchronizer=synchronizer
211+
store,
212+
key=akey,
213+
read_only=read_only,
214+
cache=cache_attrs,
215+
synchronizer=synchronizer,
216+
cached_dict=self._meta["attributes"] if self._version == 3 and self._meta else None,
212217
)
213218

214219
# setup info

0 commit comments

Comments
 (0)