From cf18071dd60ac5cb2fdc6d17cd972a247e18dec5 Mon Sep 17 00:00:00 2001 From: meggart Date: Fri, 13 Dec 2024 12:18:51 +0100 Subject: [PATCH] Add option to skip keys when opening datasets --- src/DatasetAPI/Datasets.jl | 7 +++++-- test/Datasets/datasets.jl | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/DatasetAPI/Datasets.jl b/src/DatasetAPI/Datasets.jl index 7a4bcf68..f7b98c14 100644 --- a/src/DatasetAPI/Datasets.jl +++ b/src/DatasetAPI/Datasets.jl @@ -392,7 +392,8 @@ function open_mfdataset(vec::DD.DimVector{<:AbstractString};kwargs...) alldatasets = open_dataset.(vec;kwargs...); fi = first(alldatasets) mergedim = DD.dims(alldatasets) |> only - ars = map(collect(keys(fi.cubes))) do var + vars_to_merge = collect(keys(fi.cubes)) + ars = map(vars_to_merge) do var cfi = fi.cubes[var] mergedar = if DD.dims(cfi,mergedim) !== nothing merge_existing_axis(alldatasets,cfi,var,mergedim) @@ -411,7 +412,8 @@ open_dataset(g; driver=:all) Open the dataset at `g` with the given `driver`. The default driver will search for available drivers and tries to detect the useable driver from the filename extension. """ -function open_dataset(g; driver = :all) +function open_dataset(g; skip_keys=(), driver = :all) + str_skipkeys = string.(skip_keys) dsopen = YAXArrayBase.to_dataset(g, driver = driver) YAXArrayBase.open_dataset_handle(dsopen) do g isempty(get_varnames(g)) && throw(ArgumentError("Group does not contain datasets.")) @@ -419,6 +421,7 @@ function open_dataset(g; driver = :all) dnames = string.(keys(dimlist)) varlist = filter(get_varnames(g)) do vn upname = uppercase(vn) + !in(vn, str_skipkeys) && !occursin("BNDS", upname) && !occursin("BOUNDS", upname) && !any(i -> isequal(upname, uppercase(i)), dnames) diff --git a/test/Datasets/datasets.jl b/test/Datasets/datasets.jl index 67e31d09..12de0b5a 100644 --- a/test/Datasets/datasets.jl +++ b/test/Datasets/datasets.jl @@ -413,6 +413,12 @@ end @test ds2.c.data[:, :] == ds.c.data @test ds2.c.chunks == DiskArrays.GridChunks(size(a), (5, 10)) + #Test if skip_keys works + ds3 = open_dataset(f, driver=:zarr, skip_keys = (:c,)) + @test :a in keys(ds3.cubes) + @test :b in keys(ds3.cubes) + @test !in(:c,keys(ds3.cubes)) + end @testset "Saving, OutDims" begin