Skip to content

ArgumentError: PlotlyJS.SyncPlot doesn't have a defined StructTypes.StructType #153

@bionicinnovations

Description

@bionicinnovations

Hi there,

I recently upgraded Dash.jl from v1.1.0 -> v1.0.0 which adds JSON3 v 1.9.2 and StructTypes v1.8.1. After upgrading, my Dash.jl app no longer works. If I downgrade back to 1.0.0, it works again.

The error message I get under v1.1.1 is as follows (note that PlotlyJS seems to work fine outside the Dash app):

[ Info: Listening on: 0.0.0.0:9151
┌ Error: error handling request
│   exception =
│    ArgumentError: PlotlyJS.SyncPlot doesn't have a defined `StructTypes.StructType`
│    Stacktrace:
│      [1] write(::StructTypes.NoStructType, buf::Vector{UInt8}, pos::Int64, len::Int64, ::PlotlyJS.SyncPlot; kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ JSON3 C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:91
│      [2] write(::StructTypes.NoStructType, buf::Vector{UInt8}, pos::Int64, len::Int64, ::PlotlyJS.SyncPlot)
│        @ JSON3 C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:91
│      [3] write(::StructTypes.DictType, buf::Vector{UInt8}, pos::Int64, len::Int64, x::Dict{Symbol, Any}; kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ JSON3 C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:155
│      [4] write
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:146 [inlined]
│      [5] #_#72
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:121 [inlined]
│      [6] WriteClosure
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:112 [inlined]
│      [7] foreachfield
│        @ C:\Users\zxxx\.julia\packages\StructTypes\Cmlkm\src\StructTypes.jl:640 [inlined]
│      [8] #write#73
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:132 [inlined]
│      [9] write
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:130 [inlined]
│     [10] write(::StructTypes.ArrayType, buf::Vector{UInt8}, pos::Int64, len::Int64, x::NTuple{48, Component}; kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ JSON3 C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:169
│     [11] write(::StructTypes.ArrayType, buf::Vector{UInt8}, pos::Int64, len::Int64, x::NTuple{48, Component})
│        @ JSON3 C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:165
│     [12] write(::StructTypes.DictType, buf::Vector{UInt8}, pos::Int64, len::Int64, x::Dict{Symbol, Any}; kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ JSON3 C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:155
│     [13] write
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:146 [inlined]
│     [14] #_#72
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:121 [inlined]
│     [15] WriteClosure
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:112 [inlined]
│     [16] foreachfield
│        @ C:\Users\zxxx\.julia\packages\StructTypes\Cmlkm\src\StructTypes.jl:640 [inlined]
│     [17] #write#73
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:132 [inlined]
│     [18] write
│        @ C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:130 [inlined]
│     [19] write(obj::Component; kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ JSON3 C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:39
│     [20] write(obj::Component)
│        @ JSON3 C:\Users\zxxx\.julia\packages\JSON3\tqMvg\src\write.jl:37
│     [21] process_layout(request::HTTP.Messages.Request, state::Dash.HandlerState)
│        @ Dash C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\handler\processors\layout.jl:4
│     [22] try_handle
│        @ C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\HttpHelpers\router.jl:51 [inlined]
│     [23] try_handle(route::Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.StaticRoute, typeof(Dash.process_layout)}}, path::SubString{String}, request::HTTP.Messages.Request, args::Dash.HandlerState)
│        @ Dash.HttpHelpers C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\HttpHelpers\router.jl:97       
│     [24] _handle
│        @ C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\HttpHelpers\router.jl:101 [inlined]
│     [25] handle(route_tuple::Tuple{Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.StaticRoute, typeof(Dash.process_layout)}}, Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.StaticRoute, typeof(Dash.process_dependencies)}}, Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.StaticRoute, typeof(Dash.process_reload_hash)}}, Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.StaticRoute, typeof(Dash.process_default_favicon)}}, Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.DynamicRoute{Tuple{Tuple{Int64, String}}, NamedTuple{(:path, :namespace), Tuple{Int64, Int64}}}, typeof(Dash.process_resource)}}, Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.DynamicRoute{Tuple{Tuple{Int64, String}}, NamedTuple{(:file_path,), Tuple{Int64}}}, typeof(Dash.process_assets)}}, Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.StaticRoute, typeof(Dash.process_callback)}}, Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.DynamicRoute{Tuple{}, NamedTuple{(), Tuple{}}}, typeof(Dash.process_index)}}, Dash.HttpHelpers.Route{Dash.HttpHelpers.RouteHandler{Dash.HttpHelpers.StaticRoute, typeof(Dash.process_index)}}}, path::SubString{String}, request::HTTP.Messages.Request, args::Dash.HandlerState)
│        @ Dash.HttpHelpers C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\HttpHelpers\router.jl:112      
│     [26] handle(router::Dash.HttpHelpers.Router, request::HTTP.Messages.Request, args::Dash.HandlerState) 
│        @ Dash.HttpHelpers C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\HttpHelpers\router.jl:129      
│     [27] (::Dash.HttpHelpers.var"#1#2"{Dash.HttpHelpers.Router, Dash.HandlerState})(::HTTP.Messages.Request)
│        @ Dash.HttpHelpers C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\HttpHelpers\handlers.jl:4      
│     [28] handle
│        @ C:\Users\zxxx\.julia\packages\HTTP\aTjcj\src\Handlers.jl:254 [inlined]
│     [29] (::Dash.HttpHelpers.var"#7#8"{Dash.var"#67#69"{Dash.DashApp}, HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#1#2"{Dash.HttpHelpers.Router, Dash.HandlerState}}})(::HTTP.Messages.Request)        
│        @ Dash.HttpHelpers C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\HttpHelpers\handlers.jl:48     
│     [30] handle
│        @ C:\Users\zxxx\.julia\packages\HTTP\aTjcj\src\Handlers.jl:254 [inlined]
│     [31] (::Dash.HttpHelpers.var"#4#5"{Vector{String}, Int64, HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#7#8"{Dash.var"#67#69"{Dash.DashApp}, HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#1#2"{Dash.HttpHelpers.Router, Dash.HandlerState}}}}})(::HTTP.Messages.Request)
│        @ Dash.HttpHelpers C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\HttpHelpers\handlers.jl:27     
│     [32] handle
│        @ C:\Users\zxxx\.julia\packages\HTTP\aTjcj\src\Handlers.jl:254 [inlined]
│     [33] handle(::HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#4#5"{Vector{String}, Int64, HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#7#8"{Dash.var"#67#69"{Dash.DashApp}, HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#1#2"{Dash.HttpHelpers.Router, Dash.HandlerState}}}}}}, ::HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}})
│        @ HTTP.Handlers C:\Users\zxxx\.julia\packages\HTTP\aTjcj\src\Handlers.jl:277
│     [34] #4
│        @ C:\Users\zxxx\.julia\packages\HTTP\aTjcj\src\Handlers.jl:351 [inlined]
│     [35] macro expansion
│        @ C:\Users\zxxx\.julia\packages\HTTP\aTjcj\src\Servers.jl:415 [inlined]
│     [36] (::HTTP.Servers.var"#13#14"{HTTP.Handlers.var"#4#5"{HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#4#5"{Vector{String}, Int64, HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#7#8"{Dash.var"#67#69"{Dash.DashApp}, HTTP.Handlers.RequestHandlerFunction{Dash.HttpHelpers.var"#1#2"{Dash.HttpHelpers.Router, Dash.HandlerState}}}}}}}, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}, HTTP.Servers.Server{Nothing, Sockets.TCPServer}, HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}}})()
│        @ HTTP.Servers .\task.jl:411
└ @ Dash C:\Users\zxxx\.julia\packages\Dash\soFjZ\src\handler\make_handler.jl:112

This same error occurred on julia v1.6.4:

julia> versioninfo()
Julia Version 1.6.4
Commit 35f0c911f4 (2021-11-19 03:54 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: AMD Ryzen Threadripper 1920X 12-Core Processor
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, znver1)
Environment:
  JULIA_EDITOR = code
  JULIA_NUM_THREADS =

And also on Dash v1.1.0 on Julia v1.7.0:

julia> versioninfo()
Julia Version 1.7.0
Commit 3bf9d17731 (2021-11-30 12:12 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: AMD Ryzen Threadripper 1920X 12-Core Processor
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, znver1)
Environment:
  JULIA_EDITOR = code
  JULIA_NUM_THREADS =

Thanks for all your hard work on this project!

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