Skip to content

Commit f51a78a

Browse files
authored
Merge pull request #2 from meggart/netcdf_nohandles
Make NetCDF dataset not return handles
2 parents ef10136 + f956dd2 commit f51a78a

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

Manifest.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ version = "0.17.11"
1313
deps = ["Printf"]
1414
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
1515

16+
[[DiskArrays]]
17+
git-tree-sha1 = "3bfd0eb19711297e1b3656b7d4709f7b4b240195"
18+
uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3"
19+
version = "0.2.4"
20+
1621
[[Distributed]]
1722
deps = ["Random", "Serialization", "Sockets"]
1823
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
name = "YAXArrayBase"
22
uuid = "90b8fcef-0c2d-428d-9c56-5f86629e9d14"
33
authors = ["Fabian Gans <[email protected]>"]
4-
version = "0.1.0"
4+
version = "0.2.0"
55

66
[deps]
77
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
88
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
99
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
1010

1111
[compat]
12-
julia = "^1"
1312
DataStructures = "0.17, 0.18"
1413
Requires = "1"
14+
julia = "^1"
1515

1616
[extras]
1717
ArchGDAL = "c9ce4bd3-c3d5-55b8-8973-c0e20141b8c3"

src/datasets/netcdf.jl

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,44 @@ struct NetCDFDataset
1616
end
1717
NetCDFDataset(filename) = NetCDFDataset(filename,NC_NOWRITE)
1818

19+
import .NetCDF: AbstractDiskArray, readblock!, writeblock!, haschunks, eachchunk
20+
21+
struct NetCDFVariable{T,N} <: AbstractDiskArray{T,N}
22+
filename::String
23+
varname::String
24+
size::NTuple{N,Int}
25+
end
26+
#Define method forwarding for DiskArray methods
27+
for m in [:haschunks, :eachchunk]
28+
eval(:(function $(m)(v::NetCDFVariable,args...;kwargs...)
29+
NetCDF.open(a->$(m)(a,args...;kwargs...), v.filename, v.varname)
30+
end
31+
))
32+
end
33+
writeblock!(v::NetCDFVariable, aout, r::AbstractUnitRange...) = NetCDF.open(a->writeblock!(a,aout,r...), v.filename, v.varname, mode=NC_WRITE)
34+
readblock!(v::NetCDFVariable, aout, r::AbstractUnitRange...) = NetCDF.open(a->readblock!(a,aout,r...), v.filename, v.varname)
35+
36+
Base.size(v::NetCDFVariable) = v.size
37+
1938
get_var_dims(ds::NetCDFDataset,name) = NetCDF.open(v->map(i->i.name,v[name].dim),ds.filename)
2039
get_varnames(ds::NetCDFDataset) = NetCDF.open(v->collect(keys(v.vars)),ds.filename)
2140
get_var_attrs(ds::NetCDFDataset, name) = NetCDF.open(v->v[name].atts,ds.filename)
2241
function Base.getindex(ds::NetCDFDataset, i)
23-
NetCDF.open(ds.filename,i,mode=ds.mode)
42+
s,et = NetCDF.open(j->(size(j),eltype(j)),ds.filename,i)
43+
NetCDFVariable{et,length(s)}(ds.filename, i, s)
2444
end
2545
Base.haskey(ds::NetCDFDataset,k) = NetCDF.open(nc->haskey(nc.vars,k),ds.filename)
2646

2747
function add_var(p::NetCDFDataset, T::Type, varname, s, dimnames, attr;
2848
chunksize=s, compress = -1)
2949
dimsdescr = Iterators.flatten(zip(dimnames,s))
3050
nccreate(p.filename, varname, dimsdescr..., atts = attr, t=T, chunksize=chunksize, compress=compress)
31-
NetCDF.open(p.filename,varname,mode=p.mode)
51+
NetCDFVariable{T,length(s)}(p.filename,varname,s)
3252
end
3353

3454
function create_empty(::Type{NetCDFDataset}, path)
3555
NetCDF.create(path, NcVar[])
36-
NetCDFDataset(path,NC_WRITE)
56+
NetCDFDataset(path)
3757
end
3858

3959
allow_parallel_write(::NetCDFDataset) = false

0 commit comments

Comments
 (0)