Skip to content

Potential bug when using wildcard in API filter functionality #65

@jonalm

Description

@jonalm

I run into an error in the code generated by OpenAPI.jl. The API I'm trying to use accepts a "returning" input string (https://docs.benchling.com/docs/getting-started-1#returning-query-parameter) which is a comma separated list of (potentially nested) return values (e.g. "a.b.c"), which can be used to limit the returning payload. This keyword accepts a wildcard to return all values at that level, but when I use the wildcard I get an error.

I don't know where to start debugging this as the code is autogenerated by OpenAPI. Moreover, the API needs authentication so it is hard to cook up a reproducible example.

Here is the auto generated code https://github.com/jonalm/BenchlingRestApi.jl

And this line https://github.com/jonalm/BenchlingRestApi.jl/blob/0294435467c1d57124d2d85956d383839fc3dd21/codegen/src/models/model_WellOrInaccessibleResource.jl#L17 errors:

ERROR: KeyError: key "resourceType" not found

The following code triggers the error

api_return, http_resp = get_plate(
    PlatesApi(client), 
    arrayspecsubplateid,
    returning="wells.*.webURL" # should limit the payload
)
ERROR: KeyError: key "resourceType" not found
Stacktrace:
  [1] getindex
    @ ./dict.jl:498 [inlined]
  [2] property_type(::Type{BioMe.Benchling.RestApi.WellOrInaccessibleResource}, name::Symbol, json::Dict{String, Any})
    @ BioMe.Benchling.RestApi ~/dev/BioMe.jl/src/Benchling/RestApi/src/models/model_WellOrInaccessibleResource.jl:17
  [3] from_json(o::BioMe.Benchling.RestApi.WellOrInaccessibleResource, name::Symbol, json::Dict{String, Any})
    @ OpenAPI ~/.julia/packages/OpenAPI/p5UeR/src/json.jl:64
  [4] from_json
    @ OpenAPI ~/.julia/packages/OpenAPI/p5UeR/src/json.jl:46 [inlined]
  [5] from_json
    @ OpenAPI ~/.julia/packages/OpenAPI/p5UeR/src/json.jl:40 [inlined]
  [6] convert
    @ ~/.julia/packages/OpenAPI/p5UeR/src/client.jl:712 [inlined]
  [7] setindex!(h::Dict{String, BioMe.Benchling.RestApi.WellOrInaccessibleResource}, v0::Dict{String, Any}, key::String)
    @ Base ./dict.jl:376
  [8] Dict{String, BioMe.Benchling.RestApi.WellOrInaccessibleResource}(kv::Dict{String, Any})
    @ Base ./dict.jl:84
  [9] convert
    @ Base ./abstractdict.jl:568 [inlined]
 [10] from_json
    @ OpenAPI ~/.julia/packages/OpenAPI/p5UeR/src/json.jl:41 [inlined]
 [11] from_json(::Type{Union{Nothing, Dict{…}}}, json::Dict{String, Any})
    @ OpenAPI ~/.julia/packages/OpenAPI/p5UeR/src/json.jl:39
 [12] from_json(o::BioMe.Benchling.RestApi.Plate, name::Symbol, json::Dict{String, Any})
    @ OpenAPI ~/.julia/packages/OpenAPI/p5UeR/src/json.jl:65
 [13] from_json(o::BioMe.Benchling.RestApi.Plate, json::Dict{String, Any})
    @ OpenAPI ~/.julia/packages/OpenAPI/p5UeR/src/json.jl:58
 [14] from_json(o::T, json::Dict{String, Any}) where T<:OpenAPI.APIModel
    @ OpenAPI ~/.julia/packages/OpenAPI/p5UeR/src/json.jl:40 [inlined]
 [15] response
    @ ~/.julia/packages/OpenAPI/p5UeR/src/client.jl:422 [inlined]
 [16] response(::Type{BioMe.Benchling.RestApi.Plate}, is_json::Bool, body::Vector{UInt8})
    @ OpenAPI.Clients ~/.julia/packages/OpenAPI/p5UeR/src/client.jl:411
 [17] response(::Type{BioMe.Benchling.RestApi.Plate}, resp::Downloads.Response, body::Vector{UInt8})
    @ OpenAPI.Clients ~/.julia/packages/OpenAPI/p5UeR/src/client.jl:406
 [18] exec(ctx::OpenAPI.Clients.Ctx, stream_to::Nothing)
    @ OpenAPI.Clients ~/.julia/packages/OpenAPI/p5UeR/src/client.jl:628
 [19] exec
    @ OpenAPI.Clients ~/.julia/packages/OpenAPI/p5UeR/src/client.jl:608 [inlined]
 [20] #get_plate#1549
    @ BioMe.Benchling.RestApi ~/dev/BioMe.jl/src/Benchling/RestApi/src/apis/api_PlatesApi.jl:143 [inlined]
 [21] top-level scope
    @ ~/dev/BioMe.jl/scratch/scratch3.jl:77
Some type information was truncated. Use `show(err)` to see complete types.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions