diff --git a/src/DatasetAPI/Datasets.jl b/src/DatasetAPI/Datasets.jl index 766bc560..7ca12040 100644 --- a/src/DatasetAPI/Datasets.jl +++ b/src/DatasetAPI/Datasets.jl @@ -1,6 +1,6 @@ module Datasets #import ..Cubes.Axes: axsym, axname, CubeAxis, findAxis, CategoricalAxis, RangeAxis, caxes -import ..Cubes: Cubes, YAXArray, concatenatecubes, CleanMe, subsetcube, copy_diskarray, setchunks, caxes +import ..Cubes: Cubes, YAXArray, concatenatecubes, CleanMe, subsetcube, copy_diskarray, setchunks, caxes, readcubedata using ...YAXArrays: YAXArrays, YAXDefaults, findAxis using DataStructures: OrderedDict, counter using Dates: Day, Hour, Minute, Second, Month, Year, Date, DateTime, TimeType, AbstractDateTime @@ -178,6 +178,12 @@ function Base.getproperty(x::Dataset, k::Symbol) x[k] end end + +function readcubedata(ds::Dataset) + inmemcubes = OrderedDict(key=> readcubedata(val) for (key, val) in pairs(ds.cubes)) + Dataset(inmemcubes, ds.axes, ds.properties) +end + Base.getindex(x::Dataset, i::Symbol) = haskey(x.cubes, i) ? x.cubes[i] : haskey(x.axes, i) ? x.axes[i] : throw(ArgumentError("$i not found in Dataset")) diff --git a/test/Datasets/datasets.jl b/test/Datasets/datasets.jl index e7789cb0..b0590b9e 100644 --- a/test/Datasets/datasets.jl +++ b/test/Datasets/datasets.jl @@ -319,6 +319,11 @@ end @test ds.b.data == y @test ds.b.chunks == b.chunks + @test ds.b.data isa AbstractDiskArray + inmemds = readcubedata(ds) + @test !isa(inmemds.b.data, AbstractDiskArray) + + ds2 = Dataset(c=c) savedataset(ds2, path=f, backend=:zarr, append=true) ds = open_dataset(f, driver=:zarr)