Git Product home page Git Product logo

cfgrib.jl's People

Contributors

github-actions[bot] avatar robertrosca avatar stephansiemen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cfgrib.jl's Issues

Complete Documentation

Documentation infrastructure added by PR #7 and merged to dev.

First steps:

  • Set up working documentation build pipeline
  • Use GitHub Actions to run pipeline
  • Deploy to gh-pages branch to build a GitHub Page for the docs

Need to add in:

  • Better index page
    • Currently docs index and readme are the same, this should probably change
  • Introduction
  • Tutorials (probably ipynb converted to md via Documenter.jl or Literate.jl)

Docstrings:

  • backends
    • backend - AxisArrays
    • backend - DimensionalData
  • cfmessage
  • constants - (fix formatting)
  • dataset
  • indexing

Misc:

  • Fix doctests

Use DiskArrays to boost OnDiskArray type

Currently a Variable has its data represented as an OnDiskArray which implements a convenient getindex method. However, this method does not follow all of Julia's getindex rules (e.g. a[1:1,:,:] returns a 2d instead of 3d array), is not type stable, because the element type and array dimensionality are not encoded and does not allow for simple operations like sums, maxima, minima etc. All this would be solved by making OnDiskArray a subtype of AbstractDiskArray from DiskArrays.jl.

Currently NetCDF.jl Zarr.jl and ArchGDAL use the DIskArrays interface to provide an interface for indexing into arrays that live on Disk. If package maintainers think this might be an option, I can prepare a PR.

FileIO integration

The backends file adds in fileio function dispatch for GRIB files, when this package is published a PR should be made to FileIO.jl to add this in to their registry.

The AxisArrays backend does not extend Base.haskeys correctly

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.

Unable to install

What happened?

Trying to install following the instructions. I have DimensionalData and AxisArrays alredy installed on my system.
julia> VERSION
v"1.10.2"

What are the steps to reproduce the bug?

I type:
(CfGRIB) pkg> activate .
(CfGRIB) pkg> instantiate
Then backslash and:
using CfGRIB
and get
Precompiling CfGRIB
Info Given CfGRIB was explicitly requested, output will be shown live
ERROR: LoadError: UndefVarError: _extrema_dims not defined
and a long Stacktrace.

Version

0.1.0

Platform (OS and architecture)

Linux ryzen-casa 6.5.0-25-generic #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

Relevant log output

(@v1.10) pkg> activate .
  Activating project at `~/Documentos/codigo/cfgrib.jl`

(CfGRIB) pkg> instantiate

julia> using CfGRIB
Precompiling CfGRIB
        Info Given CfGRIB was explicitly requested, output will be shown live 
ERROR: LoadError: UndefVarError: `_extrema_dims` not defined
Stacktrace:
 [1] getproperty(x::Module, f::Symbol)
   @ Base ./Base.jl:31
 [2] top-level scope
   @ ~/.julia/packages/DimensionalData/Z5pRw/src/methods.jl:59
 [3] include(mod::Module, _path::String)
   @ Base ./Base.jl:495
 [4] include(x::String)
   @ DimensionalData ~/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:1
 [5] top-level scope
   @ ~/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:58
 [6] include
   @ ./Base.jl:495 [inlined]
 [7] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
   @ Base ./loading.jl:2222
 [8] top-level scope
   @ stdin:3
in expression starting at /home/antonio/.julia/packages/DimensionalData/Z5pRw/src/methods.jl:59
in expression starting at /home/antonio/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:1
in expression starting at stdin:3
ERROR: LoadError: Failed to precompile DimensionalData [0703355e-b756-11e9-17c0-8b28908087d0] to "/home/antonio/.julia/compiled/v1.10/DimensionalData/jl_Nppgv0".Data
Stacktrace:
 [1] top-level scope
   @ ~/Documentos/codigo/cfgrib.jl/src/backends.jl:46
 [2] include(mod::Module, _path::String)
   @ Base ./Base.jl:495
 [3] include(x::String)
   @ CfGRIB ~/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:4
 [4] top-level scope
   @ ~/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:43
 [5] include
   @ ./Base.jl:495 [inlined]
 [6] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
   @ Base ./loading.jl:2222
 [7] top-level scope
   @ stdin:3
in expression starting at /home/antonio/Documentos/codigo/cfgrib.jl/src/backends.jl:39
in expression starting at /home/antonio/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:1
in expression starting at stdin:3

caused by: Failed to precompile DimensionalData [0703355e-b756-11e9-17c0-8b28908087d0] to "/home/antonio/.julia/compiled/v1.10/DimensionalData/jl_Nppgv0".
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
    @ Base ./loading.jl:2468
  [3] compilecache
    @ ./loading.jl:2340 [inlined]
  [4] (::Base.var"#968#969"{Base.PkgId})()
    @ Base ./loading.jl:1974
  [5] mkpidlock(f::Base.var"#968#969"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool})
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:93
  [6] #mkpidlock#6
    @ ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:88 [inlined]
  [7] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64})
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:111
  [8] #invokelatest#2
    @ ./essentials.jl:894 [inlined]
  [9] invokelatest
    @ ./essentials.jl:889 [inlined]
 [10] maybe_cachefile_lock(f::Base.var"#968#969"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64)
    @ Base ./loading.jl:2983
 [11] maybe_cachefile_lock
    @ ./loading.jl:2980 [inlined]
 [12] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:1970
 [13] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1812
 [14] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [15] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [16] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1803
 [17] macro expansion
    @ ./loading.jl:1790 [inlined]
 [18] macro expansion
    @ ./lock.jl:267 [inlined]
 [19] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1753
 [20] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [21] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [22] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1746
 [23] top-level scope
    @ ~/Documentos/codigo/cfgrib.jl/src/backends.jl:40
 [24] include(mod::Module, _path::String)
    @ Base ./Base.jl:495
 [25] include(x::String)
    @ CfGRIB ~/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:4
 [26] top-level scope
    @ ~/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:43
 [27] include
    @ ./Base.jl:495 [inlined]
 [28] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
    @ Base ./loading.jl:2222
 [29] top-level scope
    @ stdin:3
  ✗ DimensionalData
  ✗ CfGRIB
  0 dependencies successfully precompiled in 3 seconds. 38 already precompiled.

ERROR: The following 2 direct dependencies failed to precompile:

CfGRIB [b476ad61-2aff-463c-b862-1d4433a0d503]

Failed to precompile CfGRIB [b476ad61-2aff-463c-b862-1d4433a0d503] to "/home/antonio/.julia/compiled/v1.10/CfGRIB/jl_iMRNEH".
ERROR: LoadError: UndefVarError: `_extrema_dims` not defined
Stacktrace:
 [1] getproperty(x::Module, f::Symbol)
   @ Base ./Base.jl:31
 [2] top-level scope
   @ ~/.julia/packages/DimensionalData/Z5pRw/src/methods.jl:59
 [3] include(mod::Module, _path::String)
   @ Base ./Base.jl:495
 [4] include(x::String)
   @ DimensionalData ~/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:1
 [5] top-level scope
   @ ~/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:58
 [6] include
   @ ./Base.jl:495 [inlined]
 [7] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
   @ Base ./loading.jl:2222
 [8] top-level scope
   @ stdin:3
in expression starting at /home/antonio/.julia/packages/DimensionalData/Z5pRw/src/methods.jl:59
in expression starting at /home/antonio/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:1
in expression starting at stdin:3
ERROR: LoadError: Failed to precompile DimensionalData [0703355e-b756-11e9-17c0-8b28908087d0] to "/home/antonio/.julia/compiled/v1.10/DimensionalData/jl_Nppgv0".
Stacktrace:
 [1] top-level scope
   @ ~/Documentos/codigo/cfgrib.jl/src/backends.jl:46
 [2] include(mod::Module, _path::String)
   @ Base ./Base.jl:495
 [3] include(x::String)
   @ CfGRIB ~/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:4
 [4] top-level scope
   @ ~/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:43
 [5] include
   @ ./Base.jl:495 [inlined]
 [6] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
   @ Base ./loading.jl:2222
 [7] top-level scope
   @ stdin:3
in expression starting at /home/antonio/Documentos/codigo/cfgrib.jl/src/backends.jl:39
in expression starting at /home/antonio/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:1
in expression starting at stdin:3

caused by: Failed to precompile DimensionalData [0703355e-b756-11e9-17c0-8b28908087d0] to "/home/antonio/.julia/compiled/v1.10/DimensionalData/jl_Nppgv0".
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
    @ Base ./loading.jl:2468
  [3] compilecache
    @ ./loading.jl:2340 [inlined]
  [4] (::Base.var"#968#969"{Base.PkgId})()
    @ Base ./loading.jl:1974
  [5] mkpidlock(f::Base.var"#968#969"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool})
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:93
  [6] #mkpidlock#6
    @ ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:88 [inlined]
  [7] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64})
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:111
  [8] #invokelatest#2
    @ ./essentials.jl:894 [inlined]
  [9] invokelatest
    @ ./essentials.jl:889 [inlined]
 [10] maybe_cachefile_lock(f::Base.var"#968#969"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64)
    @ Base ./loading.jl:2983
 [11] maybe_cachefile_lock
    @ ./loading.jl:2980 [inlined]
 [12] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:1970
 [13] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1812
 [14] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [15] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [16] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1803
 [17] macro expansion
    @ ./loading.jl:1790 [inlined]
 [18] macro expansion
    @ ./lock.jl:267 [inlined]
 [19] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1753
 [20] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [21] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [22] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1746
 [23] top-level scope
    @ ~/Documentos/codigo/cfgrib.jl/src/backends.jl:40
 [24] include(mod::Module, _path::String)
    @ Base ./Base.jl:495
 [25] include(x::String)
    @ CfGRIB ~/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:4
 [26] top-level scope
    @ ~/Documentos/codigo/cfgrib.jl/src/CfGRIB.jl:43
 [27] include
    @ ./Base.jl:495 [inlined]
 [28] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
    @ Base ./loading.jl:2222
 [29] top-level scope
    @ stdin:3
DimensionalData [0703355e-b756-11e9-17c0-8b28908087d0]

Failed to precompile DimensionalData [0703355e-b756-11e9-17c0-8b28908087d0] to "/home/antonio/.julia/compiled/v1.10/DimensionalData/jl_Thk7Y6".
ERROR: LoadError: UndefVarError: `_extrema_dims` not defined
Stacktrace:
 [1] getproperty(x::Module, f::Symbol)
   @ Base ./Base.jl:31
 [2] top-level scope
   @ ~/.julia/packages/DimensionalData/Z5pRw/src/methods.jl:59
 [3] include(mod::Module, _path::String)
   @ Base ./Base.jl:495
 [4] include(x::String)
   @ DimensionalData ~/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:1
 [5] top-level scope
   @ ~/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:58
 [6] include
   @ ./Base.jl:495 [inlined]
 [7] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
   @ Base ./loading.jl:2222
 [8] top-level scope
   @ stdin:3
in expression starting at /home/antonio/.julia/packages/DimensionalData/Z5pRw/src/methods.jl:59
in expression starting at /home/antonio/.julia/packages/DimensionalData/Z5pRw/src/DimensionalData.jl:1
in expression starting at stdin:3
Stacktrace:
  [1] pkgerror(msg::String)
    @ Pkg.Types ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/Pkg/src/Types.jl:70
  [2] precompile(ctx::Pkg.Types.Context, pkgs::Vector{…}; internal_call::Bool, strict::Bool, warn_loaded::Bool, already_instantiated::Bool, timing::Bool, _from_loading::Bool, kwargs::@Kwargs{…})
    @ Pkg.API ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/Pkg/src/API.jl:1659
  [3] precompile(pkgs::Vector{Pkg.Types.PackageSpec}; io::Base.TTY, kwargs::@Kwargs{_from_loading::Bool})
    @ Pkg.API ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/Pkg/src/API.jl:159
  [4] precompile
    @ ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/Pkg/src/API.jl:147 [inlined]
  [5] #precompile#114
    @ ~/.julia/juliaup/julia-1.10.2+0.x64.linux.gnu/share/julia/stdlib/v1.10/Pkg/src/API.jl:146 [inlined]
  [6] #invokelatest#2
    @ ./essentials.jl:894 [inlined]
  [7] invokelatest
    @ ./essentials.jl:889 [inlined]
  [8] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:1963
  [9] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1812
 [10] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [11] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [12] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1803
 [13] macro expansion
    @ ./loading.jl:1790 [inlined]
 [14] macro expansion
    @ ./lock.jl:267 [inlined]
 [15] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1753
 [16] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [17] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [18] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1746
Some type information was truncated. Use `show(err)` to see complete types.

Accompanying data

No response

Organisation

No response

Filter by keys functionality

filter_by_keys should propagate through many of the functions both when reading data and when creating the index, it currently does not.

  • Propagate user-provided filter_by_keys dict
  • Add tests for this, python implementation already has some

trying this out but quick intro link is broken!

I am more of an end user than knowledgeable in the code behind this package. Just to inform you that the link to get started is broken: a very simple example of accessing afile and extracting the info on the readme page would be super helpful!

Thanks

Rename Package?

The Julia package registry prefers (but this isn't a rule) packages that aren't all caps, or all lower-case.

cfgrib.jl doesn't conform to that, but it is the correct name as that the python package is called cfgrib.

CFGRIB.jl is 'correct', but also doesn't really follow the standard.

CfGRIB.jl looks nicest to me, and follows the standards, but doesn't really follow conventions on how to capitalise acronyms. "Climate and Forecast GRIB" -> CFGRIB, but I guess "Climate and forecast GRIB" does kind of make sense as well.

Not really an important issue either way, but one to think about.

[Security] Workflow Docs.yml is using vulnerable action actions/checkout

The workflow Docs.yml is referencing action actions/checkout using references v1.0.0. However this reference is missing the commit a6747255bd19d7a757dbdda8c654a9f84db19839 which may contain fix to the some vulnerability.
The vulnerability fix that is missing by actions version could be related to:
(1) CVE fix
(2) upgrade of vulnerable dependency
(3) fix to secret leak and others.
Please consider to update the reference to the action.

Improved logging functionality

Some logging is present but not much, should be improved and on-par with python implementation:

  • More points where logging is done

  • Appropriate logging levels

  • User control over log verbosity

  • Option to save logs to file

  • Use Memento.jl?

Add missing CFMessage conversion methods and tests

Should probably implement these two functions, although they're only used when saving data, which is not done yet:

  • to_grib_step
  • to_grib_date_time

Need to add:

  • Specific tests for these functions
    • Maybe parity tests with python implementation again?

Need to investigate:

  • from_grib_step application, the method seems correct however applying it results in different values from the python implementation
  • Is it actually worth doing the type-dispatch method for from_grib_date_time? It's not too important, and makes the code more difficult to read through
  • Better implementation of read_message? Not the most elegant solution, something better must be out there

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.