Skip to content

Commit b018c6f

Browse files
committed
tweak and update format
1 parent 118fc96 commit b018c6f

13 files changed

+164
-136
lines changed

docs/make.jl

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@ makedocs(;
1010
canonical="https://juliageo.github.io/ZarrDatasets.jl",
1111
assets=String[],
1212
),
13-
pages=[
14-
"Home" => "index.md",
15-
],
13+
pages=["Home" => "index.md"],
1614
)
1715

18-
deploydocs(;
19-
repo="github.com/JuliaGeo/ZarrDatasets.jl",
20-
)
16+
deploydocs(; repo="github.com/JuliaGeo/ZarrDatasets.jl")

src/ZarrDatasets.jl

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
module ZarrDatasets
22

3-
import Base:
4-
checkbounds,
5-
getindex,
6-
setindex!,
7-
size
3+
import Base: checkbounds, getindex, setindex!, size
84

95
import CommonDataModel:
106
CFVariable,
@@ -26,12 +22,10 @@ import CommonDataModel:
2622
parentdataset,
2723
variable
2824

29-
import DiskArrays:
30-
eachchunk,
31-
haschunks
25+
import DiskArrays: eachchunk, haschunks
3226

3327
import CommonDataModel as CDM
34-
import JSON
28+
using JSON: JSON
3529

3630
using DataStructures
3731
using Zarr

src/dataset.jl

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# Base interface
22

33
Base.keys(ds::ZarrDataset) = keys(ds.zgroup.arrays)
4-
Base.haskey(ds::ZarrDataset, varname::SymbolOrString) = haskey(ds.zgroup.arrays, String(varname))
4+
function Base.haskey(ds::ZarrDataset, varname::SymbolOrString)
5+
haskey(ds.zgroup.arrays, String(varname))
6+
end
57

6-
# CommonDataModel.jl interface
8+
# CommonDataModel.jl interface methods
79

810
CDM.name(v::ZarrDataset) = Zarr.zname(v.zgroup)
911
function CDM.variable(ds::ZarrDataset, varname::SymbolOrString)
@@ -43,7 +45,7 @@ end
4345
# groups
4446
function CDM.defGroup(ds::ZarrDataset, groupname::SymbolOrString; attrib=Dict())
4547
_attrib = Dict{String,Any}(attrib)
46-
zg = zgroup(ds.zgroup, String(groupname), attrs=_attrib)
48+
zg = zgroup(ds.zgroup, String(groupname); attrs=_attrib)
4749
dimensions = OrderedDict{Symbol,Int}()
4850
return ZarrDataset(ds, zg, dimensions, ds.iswritable, ds.maskingvalue)
4951
end
@@ -59,9 +61,12 @@ CDM.iswritable(ds::ZarrDataset) = ds.iswritable
5961
CDM.maskingvalue(ds::ZarrDataset) = ds.maskingvalue
6062

6163
"""
62-
ZarrDataset(url::AbstractString, mode = "r"; kw...)
63-
ZarrDataset(zg::Zarr.ZGroup; kw...)
64-
ZarrDataset(f::Function, url::AbstractString, mode = "r"; kw...)
64+
ds = ZarrDataset(url::AbstractString,mode = "r";
65+
_omitcode = [404,403],
66+
maskingvalue = missing)
67+
ZarrDataset(zg::Zarr.ZGroup; _omitcode, maskingvalue)
68+
ZarrDataset(f::Function,url::AbstractString,mode = "r";
69+
maskingvalue = missing)
6570
6671
Open the zarr dataset at the url or path `url`. The mode can be `"r"` (read-only),
6772
`"w"` (write), or `"c"` (create). `ds` supports the API of the
@@ -108,51 +113,59 @@ zos1 = ZarrDataset(url) do ds
108113
end # implicit call to close(ds)
109114
```
110115
"""
111-
112-
function ZarrDataset(url::AbstractString, mode = "r";
113-
parentdataset = nothing,
114-
_omitcode = [404,403],
115-
maskingvalue = missing,
116-
attrib = Dict(),
117-
)
118-
116+
function ZarrDataset(
117+
url::AbstractString,
118+
mode="r";
119+
parentdataset=nothing,
120+
_omitcode=[404, 403],
121+
maskingvalue=missing,
122+
attrib=Dict(),
123+
)
119124
dimensions = OrderedDict{Symbol,Int}()
120125

121126
zg = if mode in ("w", "r")
122127
zg = Zarr.zopen(url, mode)
123128
elseif mode == "c"
124129
store = Zarr.DirectoryStore(url)
125-
zg = zgroup(store, "", attrs = Dict{String,Any}(attrib))
130+
zg = zgroup(store, ""; attrs=Dict{String,Any}(attrib))
126131
else
127132
throw(ArgumentError("mode must be \"r\", \"w\" or \"c\", got $mode"))
128133
end
129134
ZarrDataset(zg; mode, parentdataset, _omitcode, maskingvalue, attrib)
130135
end
131136

132-
function ZarrDataset(store::Zarr.AbstractStore, mode = "r";
133-
parentdataset = nothing,
134-
_omitcode = [404,403],
135-
maskingvalue = missing,
136-
attrib = Dict(),
137-
)
138-
return ZarrDataset(zopen(store, mode); mode, parentdataset, _omitcode, maskingvalue, attrib)
137+
function ZarrDataset(
138+
store::Zarr.AbstractStore,
139+
mode="r";
140+
parentdataset=nothing,
141+
_omitcode=[404, 403],
142+
maskingvalue=missing,
143+
attrib=Dict(),
144+
)
145+
return ZarrDataset(
146+
zopen(store, mode); mode, parentdataset, _omitcode, maskingvalue, attrib
147+
)
139148
end
140-
function ZarrDataset(zg::Zarr.ZGroup;
149+
150+
function ZarrDataset(
151+
zg::Zarr.ZGroup;
141152
mode="r",
142153
parentdataset=nothing,
143154
_omitcode=[404, 403],
144155
maskingvalue=missing,
145156
attrib=Dict(),
146157
)
147158
dimensions = ZarrDatasets.OrderedDict{Symbol,Int}()
159+
iswritable = false
148160
if (zg.storage isa Zarr.HTTPStore) ||
149-
(zg.storage isa Zarr.ConsolidatedStore{Zarr.HTTPStore})
161+
(zg.storage isa Zarr.ConsolidatedStore{Zarr.HTTPStore})
150162
@debug "omit chunks on HTTP error" _omitcode
151163
Zarr.missing_chunk_return_code!(zg.storage, _omitcode)
152164
end
153165

154166
for (varname, zarray) in zg.arrays
155-
for (dimname, dimlen) in zip(reverse(zarray.attrs["_ARRAY_DIMENSIONS"]), size(zarray))
167+
for (dimname, dimlen) in
168+
zip(reverse(zarray.attrs["_ARRAY_DIMENSIONS"]), size(zarray))
156169
dn = Symbol(dimname)
157170
if haskey(dimensions, dn)
158171
@assert dimensions[dn] == dimlen
@@ -162,11 +175,17 @@ function ZarrDataset(zg::Zarr.ZGroup;
162175
end
163176
end
164177

165-
return ZarrDataset(parentdataset, zg, dimensions, mode == "r" ? false : zg.writeable, maskingvalue)
166-
178+
return ZarrDataset(
179+
parentdataset, zg, dimensions, mode == "r" ? false : zg.writeable, maskingvalue
180+
)
167181
end
168-
ZarrDataset(fnames::AbstractArray{<:AbstractString,N}, args...; kwargs...) where {N} =
182+
183+
function ZarrDataset(
184+
fnames::AbstractArray{<:AbstractString,N}, args...; kwargs...
185+
) where {N}
169186
MFDataset(ZarrDataset, fnames, args...; kwargs...)
187+
end
188+
170189
function ZarrDataset(f::Function, args...; kwargs...)
171190
ds = ZarrDataset(args...; kwargs...)
172191
try
@@ -176,6 +195,8 @@ function ZarrDataset(f::Function, args...; kwargs...)
176195
end
177196
end
178197

198+
# Utility functions
199+
179200
function _dim(ds::ZarrDataset, dimname::SymbolOrString)
180201
dimlen = get(ds.dimensions, Symbol(dimname), nothing)
181202

@@ -188,4 +209,4 @@ function _dim(ds::ZarrDataset, dimname::SymbolOrString)
188209
end
189210

190211
error("dimension $dimname is not defined")
191-
end
212+
end

src/types.jl

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11

2-
struct ZarrVariable{T,N,TZA <: AbstractArray{T,N},TZG} <: CDM.AbstractVariable{T,N}
2+
"""
3+
ZarrVariable <: CDM.AbstractVariable
4+
5+
ZarrVariable(zarray, parentdataset)
6+
7+
A CommonDataModel.jl compatible zarr variable.
8+
9+
Usually generated with `CommonDataModel.defvar(::ZarrDataset, args...; kw...)`
10+
"""
11+
struct ZarrVariable{T,N,TZA<:AbstractArray{T,N},TZG} <: CDM.AbstractVariable{T,N}
312
zarray::TZA
413
parentdataset::TZG
514
end
615

7-
struct ZarrDataset{TDS <: Union{CDM.AbstractDataset,Nothing},Tmaskingvalue,TZ} <: CDM.AbstractDataset
16+
# Documented in dataset.jl
17+
struct ZarrDataset{TDS<:Union{CDM.AbstractDataset,Nothing},Tmaskingvalue,TZ} <:
18+
CDM.AbstractDataset
819
parentdataset::TDS
920
zgroup::TZ
1021
dimensions::OrderedDict{Symbol,Int}

src/variable.jl

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,41 @@
1+
# Base interface methods
12

2-
Base.getindex(v::ZarrVariable,ij::Union{Integer,Colon,AbstractVector{<:Integer}}...) = parent(v)[ij...]
3-
function Base.setindex!(v::ZarrVariable,data,ij::Union{Integer,Colon,AbstractVector{<:Integer}}...)
3+
function Base.getindex(
4+
v::ZarrVariable, ij::Union{Integer,Colon,AbstractVector{<:Integer}}...
5+
)
6+
parent(v)[ij...]
7+
end
8+
function Base.setindex!(
9+
v::ZarrVariable, data, ij::Union{Integer,Colon,AbstractVector{<:Integer}}...
10+
)
411
parent(v)[ij...] = data
512
end
613
Base.size(v::ZarrVariable) = size(parent(v))
714
Base.parent(v::ZarrVariable) = v.zarray
815

16+
# DiskArrays.jl interface methods
917

10-
CDM.load!(v::ZarrVariable,buffer,ij...) = buffer .= view(parent(v),ij...)
18+
eachchunk(v::ZarrVariable) = eachchunk(parent(v))
19+
haschunks(v::ZarrVariable) = haschunks(parent(v))
20+
eachchunk(v::CFVariable{T,N,<:ZarrVariable}) where {T,N} = eachchunk(v.var)
21+
haschunks(v::CFVariable{T,N,<:ZarrVariable}) where {T,N} = haschunks(v.var)
22+
23+
# CommonDataModel.jl interface methods
24+
25+
CDM.load!(v::ZarrVariable, buffer, ij...) = buffer .= view(parent(v), ij...)
1126
CDM.name(v::ZarrVariable) = Zarr.zname(parent(v))
1227
CDM.dimnames(v::ZarrVariable) = Tuple(reverse(parent(v).attrs["_ARRAY_DIMENSIONS"]))
13-
1428
CDM.dataset(v::ZarrVariable) = v.parentdataset
1529

1630
function CDM.attribnames(v::ZarrVariable)
17-
names = filter(!=("_ARRAY_DIMENSIONS"),keys(parent(v).attrs))
31+
names = filter(!=("_ARRAY_DIMENSIONS"), keys(parent(v).attrs))
1832
if !isnothing(parent(v).metadata.fill_value) && !_iscoordvar(v)
19-
push!(names,"_FillValue")
33+
push!(names, "_FillValue")
2034
end
2135
return names
2236
end
2337

24-
function CDM.attrib(v::ZarrVariable{T},name::SymbolOrString) where T
38+
function CDM.attrib(v::ZarrVariable{T}, name::SymbolOrString) where {T}
2539
if String(name) == "_FillValue" && !isnothing(parent(v).metadata.fill_value)
2640
return T(parent(v).metadata.fill_value)
2741
end
@@ -38,16 +52,9 @@ function CDM.defAttrib(v::ZarrVariable, name::SymbolOrString, value)
3852
io = IOBuffer()
3953

4054
JSON.print(io, parent(v).attrs)
41-
storage[parent(v).path,".zattrs"] = take!(io)
55+
storage[parent(v).path, ".zattrs"] = take!(io)
4256
end
4357

44-
45-
# DiskArray methods
46-
eachchunk(v::ZarrVariable) = eachchunk(parent(v))
47-
haschunks(v::ZarrVariable) = haschunks(parent(v))
48-
eachchunk(v::CFVariable{T,N,<:ZarrVariable}) where {T,N} = eachchunk(v.var)
49-
haschunks(v::CFVariable{T,N,<:ZarrVariable}) where {T,N} = haschunks(v.var)
50-
5158
"""
5259
defVar(ds::ZarrDataset, name::SymbolOrString, vtype::DataType, dimensionnames;
5360
chunksizes=nothing, attrib=Dict(), fillvalue=nothing)
@@ -62,8 +69,15 @@ does not necessarily indicate a missing value.
6269
6370
See also `CommonDataModel.defVar` for more information.
6471
"""
65-
function CDM.defVar(ds::ZarrDataset, name::SymbolOrString, vtype::DataType, dimensionnames;
66-
chunksizes=nothing, attrib=Dict(), fillvalue=nothing, kwargs...
72+
function CDM.defVar(
73+
ds::ZarrDataset,
74+
name::SymbolOrString,
75+
vtype::DataType,
76+
dimensionnames;
77+
chunksizes=nothing,
78+
attrib=Dict(),
79+
fillvalue=nothing,
80+
kwargs...,
6781
)
6882
@assert iswritable(ds)
6983

@@ -83,15 +97,25 @@ function CDM.defVar(ds::ZarrDataset, name::SymbolOrString, vtype::DataType, dime
8397
end
8498

8599
zarray = zcreate(
86-
vtype, ds.zgroup, name, _size...;
100+
vtype,
101+
ds.zgroup,
102+
name,
103+
_size...;
87104
chunks=chunksizes,
88105
attrs=_attrib,
89106
fill_value=fillvalue,
90-
kwargs...
107+
kwargs...,
91108
)
92109

93-
# TODO zv is not used?
94-
zv = ZarrVariable{vtype,ndims(zarray),typeof(zarray),typeof(ds)}(zarray, ds)
95-
96110
return ds[name]
97-
end
111+
end
112+
113+
# Utility functions
114+
115+
function _iscoordvar(v)
116+
dn = dimnames(v)
117+
if length(dn) == 0
118+
return false
119+
end
120+
return name(v) == first(dn)
121+
end

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ using ZarrDatasets
99
include("test_fillvalue.jl")
1010
include("test_preexisting.jl")
1111
include("test_aqua.jl")
12-
end
12+
end

test/test_aqua.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ using ZarrDatasets
33

44
Aqua.test_ambiguities(ZarrDatasets)
55
# some internal ambiguities in DiskArray 0.3 probably fixed in 0.4
6-
Aqua.test_all(ZarrDatasets, ambiguities=false)
6+
Aqua.test_all(ZarrDatasets; ambiguities=false)

0 commit comments

Comments
 (0)