-
-
Notifications
You must be signed in to change notification settings - Fork 282
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Try to converge on internal types consistency. #574
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -44,7 +44,7 @@ | |
from zarr.meta import encode_array_metadata, encode_group_metadata | ||
from zarr.util import (buffer_size, json_loads, nolock, normalize_chunks, | ||
normalize_dtype, normalize_fill_value, normalize_order, | ||
normalize_shape, normalize_storage_path) | ||
normalize_shape, normalize_storage_path, json_dumps) | ||
|
||
__doctest_requires__ = { | ||
('RedisStore', 'RedisStore.*'): ['redis'], | ||
|
@@ -2479,6 +2479,10 @@ class ConsolidatedMetadataStore(MutableMapping): | |
|
||
.. versionadded:: 2.3 | ||
|
||
.. versionchanged:: 2.5 | ||
|
||
__getitem__ will now return bytes for metadata for consistency across stores. | ||
|
||
.. note:: This is an experimental feature. | ||
|
||
Parameters | ||
|
@@ -2507,7 +2511,9 @@ def __init__(self, store, metadata_key='.zmetadata'): | |
consolidated_format) | ||
|
||
# decode metadata | ||
self.meta_store = meta['metadata'] | ||
self.meta_store = {} | ||
for k, v in meta["metadata"].items(): | ||
self.meta_store[k] = json_dumps(v) | ||
Comment on lines
+2514
to
+2516
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. FWIW this was originally how this worked, but this introduces an extra unnecessary JSON encode/decode round trip into the processing of consolidated metadata. In practice that may not be a performance issue, but it seemed awkward to have this extra JSON encode/decode if it wasn't necessary. Hence I introduced a special case which avoided the necessity for this, see the parse_metadata function in the original PR. |
||
|
||
def __getitem__(self, key): | ||
return self.meta_store[key] | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
N.B., ensuring bytes may introduce a memory copy, which may be unnecessary. Memory copies can noticeably affect performance. Ensuring we have something that supports the buffer interface would be better.