diff --git a/xarray/backends/api.py b/xarray/backends/api.py index 9f45474e7e7..47f46e73218 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -36,7 +36,6 @@ except ImportError: Delayed = None - DATAARRAY_NAME = "__xarray_dataarray_name__" DATAARRAY_VARIABLE = "__xarray_dataarray_variable__" @@ -446,6 +445,7 @@ def open_dataset( if backend_kwargs is None: backend_kwargs = {} + extra_kwargs = {} def maybe_decode_store(store, lock=False): ds = conventions.decode_cf( @@ -504,28 +504,24 @@ def maybe_decode_store(store, lock=False): if engine is None: engine = _get_default_engine(filename_or_obj, allow_remote=True) - if engine == "netcdf4": - store = backends.NetCDF4DataStore.open( - filename_or_obj, group=group, lock=lock, **backend_kwargs - ) - elif engine == "scipy": - store = backends.ScipyDataStore(filename_or_obj, **backend_kwargs) - elif engine == "pydap": - store = backends.PydapDataStore.open(filename_or_obj, **backend_kwargs) - elif engine == "h5netcdf": - store = backends.H5NetCDFStore.open( - filename_or_obj, group=group, lock=lock, **backend_kwargs - ) - elif engine == "pynio": - store = backends.NioDataStore(filename_or_obj, lock=lock, **backend_kwargs) - elif engine == "pseudonetcdf": - store = backends.PseudoNetCDFDataStore.open( - filename_or_obj, lock=lock, **backend_kwargs - ) - elif engine == "cfgrib": - store = backends.CfGribDataStore( - filename_or_obj, lock=lock, **backend_kwargs - ) + + backend_switch = { + "netcdf4": backends.NetCDF4DataStore.open, + "scipy": backends.ScipyDataStore, + "pydap": backends.PydapDataStore.open, + "h5netcdf": backends.H5NetCDFStore.open, + "pynio": backends.NioDataStore, + "pseudonetcdf": backends.PseudoNetCDFDataStore.open, + "cfgrib": backends.CfGribDataStore, + } + if engine in ["netcdf4", "h5netcdf"]: + extra_kwargs["group"] = group + extra_kwargs["lock"] = lock + elif engine in ["pynio", "pseudonetcdf", "cfgrib"]: + extra_kwargs["lock"] = lock + store = backend_switch.get(engine)( + filename_or_obj, **backend_kwargs, **extra_kwargs + ) else: if engine not in [None, "scipy", "h5netcdf"]: