|
19 | 19 | DirectoryStore, ZipStore, init_group, group_meta_key,
|
20 | 20 | getsize, migrate_1to2, TempStore, atexit_rmtree,
|
21 | 21 | NestedDirectoryStore, default_compressor, DBMStore,
|
22 |
| - LMDBStore, atexit_rmglob, LRUStoreCache) |
| 22 | + LMDBStore, atexit_rmglob, LRUStoreCache, |
| 23 | + ConsolidatedMetadataStore) |
23 | 24 | from zarr.meta import (decode_array_metadata, encode_array_metadata, ZARR_FORMAT,
|
24 | 25 | decode_group_metadata, encode_group_metadata)
|
25 | 26 | from zarr.compat import PY2
|
26 | 27 | from zarr.codecs import Zlib, Blosc, BZ2
|
27 |
| -from zarr.errors import PermissionError |
| 28 | +from zarr.errors import PermissionError, MetadataError |
28 | 29 | from zarr.hierarchy import group
|
29 | 30 | from zarr.tests.util import CountingDict
|
30 | 31 |
|
@@ -1251,3 +1252,49 @@ def test_format_compatibility():
|
1251 | 1252 | else:
|
1252 | 1253 | assert compressor.codec_id == z.compressor.codec_id
|
1253 | 1254 | assert compressor.get_config() == z.compressor.get_config()
|
| 1255 | + |
| 1256 | + |
| 1257 | +class TestConsolidatedMetadataStore(unittest.TestCase): |
| 1258 | + |
| 1259 | + def test_bad_format(self): |
| 1260 | + |
| 1261 | + # setup store with consolidated metdata |
| 1262 | + store = dict() |
| 1263 | + consolidated = { |
| 1264 | + # bad format version |
| 1265 | + 'zarr_consolidated_format': 0, |
| 1266 | + } |
| 1267 | + store['.zmetadata'] = json.dumps(consolidated).encode() |
| 1268 | + |
| 1269 | + # check appropriate error is raised |
| 1270 | + with pytest.raises(MetadataError): |
| 1271 | + ConsolidatedMetadataStore(store) |
| 1272 | + |
| 1273 | + def test_read_write(self): |
| 1274 | + |
| 1275 | + # setup store with consolidated metdata |
| 1276 | + store = dict() |
| 1277 | + consolidated = { |
| 1278 | + 'zarr_consolidated_format': 1, |
| 1279 | + 'metadata': { |
| 1280 | + 'foo': 'bar', |
| 1281 | + 'baz': 42, |
| 1282 | + } |
| 1283 | + } |
| 1284 | + store['.zmetadata'] = json.dumps(consolidated).encode() |
| 1285 | + |
| 1286 | + # create consolidated store |
| 1287 | + cs = ConsolidatedMetadataStore(store) |
| 1288 | + |
| 1289 | + # test __contains__, __getitem__ |
| 1290 | + for key, value in consolidated['metadata'].items(): |
| 1291 | + assert key in cs |
| 1292 | + assert value == cs[key] |
| 1293 | + |
| 1294 | + # test __delitem__, __setitem__ |
| 1295 | + with pytest.raises(PermissionError): |
| 1296 | + del cs['foo'] |
| 1297 | + with pytest.raises(PermissionError): |
| 1298 | + cs['bar'] = 0 |
| 1299 | + with pytest.raises(PermissionError): |
| 1300 | + cs['spam'] = 'eggs' |
0 commit comments