Skip to content

Commit cf18071

Browse files
committed
Add option to skip keys when opening datasets
1 parent 718da93 commit cf18071

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/DatasetAPI/Datasets.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,8 @@ function open_mfdataset(vec::DD.DimVector{<:AbstractString};kwargs...)
392392
alldatasets = open_dataset.(vec;kwargs...);
393393
fi = first(alldatasets)
394394
mergedim = DD.dims(alldatasets) |> only
395-
ars = map(collect(keys(fi.cubes))) do var
395+
vars_to_merge = collect(keys(fi.cubes))
396+
ars = map(vars_to_merge) do var
396397
cfi = fi.cubes[var]
397398
mergedar = if DD.dims(cfi,mergedim) !== nothing
398399
merge_existing_axis(alldatasets,cfi,var,mergedim)
@@ -411,14 +412,16 @@ open_dataset(g; driver=:all)
411412
Open the dataset at `g` with the given `driver`.
412413
The default driver will search for available drivers and tries to detect the useable driver from the filename extension.
413414
"""
414-
function open_dataset(g; driver = :all)
415+
function open_dataset(g; skip_keys=(), driver = :all)
416+
str_skipkeys = string.(skip_keys)
415417
dsopen = YAXArrayBase.to_dataset(g, driver = driver)
416418
YAXArrayBase.open_dataset_handle(dsopen) do g
417419
isempty(get_varnames(g)) && throw(ArgumentError("Group does not contain datasets."))
418420
dimlist = collectdims(g)
419421
dnames = string.(keys(dimlist))
420422
varlist = filter(get_varnames(g)) do vn
421423
upname = uppercase(vn)
424+
!in(vn, str_skipkeys) &&
422425
!occursin("BNDS", upname) &&
423426
!occursin("BOUNDS", upname) &&
424427
!any(i -> isequal(upname, uppercase(i)), dnames)

test/Datasets/datasets.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,12 @@ end
413413
@test ds2.c.data[:, :] == ds.c.data
414414
@test ds2.c.chunks == DiskArrays.GridChunks(size(a), (5, 10))
415415

416+
#Test if skip_keys works
417+
ds3 = open_dataset(f, driver=:zarr, skip_keys = (:c,))
418+
@test :a in keys(ds3.cubes)
419+
@test :b in keys(ds3.cubes)
420+
@test !in(:c,keys(ds3.cubes))
421+
416422
end
417423

418424
@testset "Saving, OutDims" begin

0 commit comments

Comments
 (0)