-
Couldn't load subscription status.
- Fork 7
Open
Description
I was getting this:
julia> CfGRIB.DataSet("./foo.grib")
[ Info: before haskey
# 1 method for generic function "haskey":
[1] haskey(obj::CfGRIB.AxisArrayWrapper, key) in CfGRIB at /home/tdunning/cfgrib.jl/src/backends/axisarrays.jl:36# 0 methods for generic function "haskey":[ Info: About to destroy {file}
[ Info: Done destroy
ERROR: MethodError: no method matching haskey(::GRIB.Message, ::String)
You may have intended to import Base.haskey
Closest candidates are:
haskey(::CfGRIB.AxisArrayWrapper, ::Any) at /home/tdunning/cfgrib.jl/src/backends/axisarrays.jl:36
Stacktrace:
[1] read_message(message::GRIB.Message, key::String)
@ CfGRIB ~/cfgrib.jl/src/cfmessage.jl:275
[2] (::CfGRIB.var"#16#17"{FileIndex, UnionAll, Int64, Vector{String}, Dict{Int64, Int64}, OrderedCollections.OrderedDict{NamedTuple, Int64}})(f::GRIB.GribFile)
@ CfGRIB ~/cfgrib.jl/src/indexing.jl:101
[3] GRIB.GribFile(f::CfGRIB.var"#16#17"{FileIndex, UnionAll, Int64, Vector{String}, Dict{Int64, Int64}, OrderedCollections.OrderedDict{NamedTuple, Int64}}, filename::String; mode::String)
@ GRIB ~/GRIB.jl/src/gribfile.jl:52
[4] GRIB.GribFile(f::Function, filename::String)
@ GRIB ~/GRIB.jl/src/gribfile.jl:50
[5] from_gribfile!(index::FileIndex)
@ CfGRIB ~/cfgrib.jl/src/indexing.jl:96
[6] FileIndex(grib_path::String, index_keys::Vector{String}; filter_by_keys::Dict{Any, Any})
@ CfGRIB ~/cfgrib.jl/src/indexing.jl:49
[7] FileIndex
@ ~/cfgrib.jl/src/indexing.jl:42 [inlined]
[8] DataSet(path::String; encode_cf::NTuple{4, String}, errors::String, filter_by_keys::Dict{Any, Any}, read_keys::Vector{String}, squeeze::Bool, time_dims::Tuple{String, String})
@ CfGRIB ~/cfgrib.jl/src/dataset.jl:154
[9] DataSet(path::String)
@ CfGRIB ~/cfgrib.jl/src/dataset.jl:153
This is strange because the REPL can see all the different definitions.
The issue is at line 36 of src/backends/axisarrays.jl:
getindex(obj::AxisArrayWrapper, key) = getfield(obj, :datasets)[key]
keys(obj::AxisArrayWrapper) = keys(getfield(obj, :datasets))
haskey(obj::AxisArrayWrapper, key) = key in keys(obj)
These should be:
Base.getindex(obj::AxisArrayWrapper, key) = getfield(obj, :datasets)[key]
Base.keys(obj::AxisArrayWrapper) = keys(getfield(obj, :datasets))
Base.haskey(obj::AxisArrayWrapper, key) = key in keys(obj)
I will send a pull request shortly.
I am surprised that this didn't get uncovered in testing. I would create a test if advised where and how.
Metadata
Metadata
Assignees
Labels
No labels