99
1010from zarr .core .array import Array , AsyncArray
1111from zarr .core .common import JSON , AccessModeLiteral , ChunkCoords , MemoryOrder , ZarrFormat
12+ from zarr .core .config import config
1213from zarr .core .group import AsyncGroup
13- from zarr .core .metadata import ArrayV2Metadata , ArrayV3Metadata
14+ from zarr .core .metadata .v2 import ArrayV2Metadata
15+ from zarr .core .metadata .v3 import ArrayV3Metadata
1416from zarr .store import (
1517 StoreLike ,
1618 make_store_path ,
@@ -125,8 +127,7 @@ def _handle_zarr_version_or_format(
125127
126128def _default_zarr_version () -> ZarrFormat :
127129 """return the default zarr_version"""
128- # TODO: set default value from config
129- return 3
130+ return cast (ZarrFormat , int (config .get ("default_zarr_version" , 3 )))
130131
131132
132133async def consolidate_metadata (* args : Any , ** kwargs : Any ) -> AsyncGroup :
@@ -336,7 +337,10 @@ async def save_group(
336337 kwargs
337338 NumPy arrays with data to save.
338339 """
339- zarr_format = _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
340+ zarr_format = (
341+ _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
342+ or _default_zarr_version ()
343+ )
340344
341345 if len (args ) == 0 and len (kwargs ) == 0 :
342346 raise ValueError ("at least one array must be provided" )
@@ -447,10 +451,7 @@ async def group(
447451 The new group.
448452 """
449453
450- zarr_format = (
451- _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
452- or _default_zarr_version ()
453- )
454+ zarr_format = _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
454455
455456 store_path = await make_store_path (store )
456457 if path is not None :
@@ -473,7 +474,7 @@ async def group(
473474 except (KeyError , FileNotFoundError ):
474475 return await AsyncGroup .from_store (
475476 store = store_path ,
476- zarr_format = zarr_format ,
477+ zarr_format = zarr_format or _default_zarr_version () ,
477478 exists_ok = overwrite ,
478479 attributes = attributes ,
479480 )
@@ -482,7 +483,7 @@ async def group(
482483async def open_group (
483484 store : StoreLike | None = None ,
484485 * , # Note: this is a change from v2
485- mode : AccessModeLiteral | None = None , # not used
486+ mode : AccessModeLiteral | None = None ,
486487 cache_attrs : bool | None = None , # not used, default changed
487488 synchronizer : Any = None , # not used
488489 path : str | None = None ,
@@ -497,8 +498,18 @@ async def open_group(
497498
498499 Parameters
499500 ----------
500- store : Store or string , optional
501+ store : Store, string, or mapping , optional
501502 Store or path to directory in file system or name of zip file.
503+
504+ Strings are interpreted as paths on the local file system
505+ and used as the ``root`` argument to :class:`zarr.store.LocalStore`.
506+
507+ Dictionaries are used as the ``store_dict`` argument in
508+ :class:`zarr.store.MemoryStore``.
509+
510+ By default (``store=None``) a new :class:`zarr.store.MemoryStore`
511+ is created.
512+
502513 mode : {'r', 'r+', 'a', 'w', 'w-'}, optional
503514 Persistence mode: 'r' means read only (must exist); 'r+' means
504515 read/write (must exist); 'a' means read/write (create if doesn't
@@ -527,10 +538,7 @@ async def open_group(
527538 The new group.
528539 """
529540
530- zarr_format = (
531- _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
532- or _default_zarr_version ()
533- )
541+ zarr_format = _handle_zarr_version_or_format (zarr_version = zarr_version , zarr_format = zarr_format )
534542
535543 if cache_attrs is not None :
536544 warnings .warn ("cache_attrs is not yet implemented" , RuntimeWarning , stacklevel = 2 )
@@ -554,7 +562,10 @@ async def open_group(
554562 return await AsyncGroup .open (store_path , zarr_format = zarr_format )
555563 except (KeyError , FileNotFoundError ):
556564 return await AsyncGroup .from_store (
557- store_path , zarr_format = zarr_format , exists_ok = True , attributes = attributes
565+ store_path ,
566+ zarr_format = zarr_format or _default_zarr_version (),
567+ exists_ok = True ,
568+ attributes = attributes ,
558569 )
559570
560571
@@ -676,7 +687,7 @@ async def create(
676687
677688 if zarr_format == 2 and chunks is None :
678689 chunks = shape
679- if zarr_format == 3 and chunk_shape is None :
690+ elif zarr_format == 3 and chunk_shape is None :
680691 if chunks is not None :
681692 chunk_shape = chunks
682693 chunks = None
@@ -897,8 +908,7 @@ async def open_array(
897908 if store_path .store .mode .create :
898909 return await create (
899910 store = store_path ,
900- path = path ,
901- zarr_format = zarr_format ,
911+ zarr_format = zarr_format or _default_zarr_version (),
902912 overwrite = store_path .store .mode .overwrite ,
903913 ** kwargs ,
904914 )
0 commit comments