Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Fixup DashBasePlotsExt #9

Merged
merged 4 commits into from
Aug 24, 2023
Merged

Fixup DashBasePlotsExt #9

merged 4 commits into from
Aug 24, 2023

Conversation

etpinard
Copy link
Contributor

From the Dash.jl callback source, DashBase.to_dash is called once and is not part of a custom JSON3.StructTypes.lower definition.

So, DashBase.to_dash is expected to return the same type after one call for all its methods.

If not, JSON3.write can run into infinite loops. Consider

using Dash
using Plots
plotlyjs()

app = dash()
app.layout = html_div() do
    dcc_graph(id = "graph", figure = plot((1:10, 1:10))),
    html_button("draw", id = "draw"),
    html_div("", id = "status")
end

callback!(app,
          Output("graph", "figure"),
          Output("status", "children"),
          Input("draw", "n_clicks")) do nclicks
    return if isnothing(nclicks)
        no_update(), "first"
    else
        plot([(1:10, 1:10), (1:10, 1:2:20)]), "second"
    end
end

run_server(app)

with Dash@1.3.0 and the current DashBase#master (with the #4 merge commit as HEAD), we get

image

- add tests for `DashBasePlotlyBaseExt` and
  `DashBasePlotlyJSExt`

- all `DashBase.to_dash` method
  should return the same object after one call
  as `to_dash` is not called recursively.
  See <https://github.com/plotly/Dash.jl/blob/d01ce73b4667991f3441e167816fd00a24a35a54/src/handler/processors/callback.jl#L29>

- these new tests currently fail for both the
  `Plots`'s `plotly()` and `plotlyjs()` renderers.
so that they return `Dict`s,
fixing potential infinite loop
within `JSON3.write` calls
@etpinard
Copy link
Contributor Author

Hmm, not sure why Julia 1.8 doesn't like PlotlyBase as test dep ... 🤔

@etpinard
Copy link
Contributor Author

etpinard commented Aug 23, 2023

I think it might be a problem with the latest PackageExtensionCompat release

with

diff --git a/Project.toml b/Project.toml
index 51efcbe..e65541f 100644
--- a/Project.toml
+++ b/Project.toml
@@ -23,7 +23,7 @@ Plots = "1"
 julia = "1.6"
 PlotlyBase = "0.8"
 PlotlyJS = "0.18"
-PackageExtensionCompat = "1"
+PackageExtensionCompat = "=1.0.0"

the tests are passing fine with Julia 1.8.5

see test logs
$ julia +1.8
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.8.5 (2023-01-08)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

[ Info: Activating project in /home/etienne/Documents/repos/DashBase.jl
  Activating project at `~/Documents/repos/DashBase.jl`
[ Info: Turning on Revise
Project DashBase v0.2.0
No Matches in `~/Documents/repos/DashBase.jl/Project.toml`
Warning The project dependencies or compat requirements have changed since the manifest was last resolved. It is recommended to `Pkg.resolve()` or consider `Pkg.update()` if necessary.
(DashBase) pkg> up
    Updating registry at `~/.julia/registries/General.toml`
    Updating `~/Documents/repos/DashBase.jl/Project.toml`
⌅ [65ce6f38] ↓ PackageExtensionCompat v1.0.1 ⇒ v1.0.0
    Updating `~/Documents/repos/DashBase.jl/Manifest.toml`
⌅ [65ce6f38] ↓ PackageExtensionCompat v1.0.1 ⇒ v1.0.0
        Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`

(DashBase) pkg> test
     Testing DashBase
      Status `/tmp/jl_PFa6ZJ/Project.toml`
  [03207cf0] DashBase v0.2.0 `~/Documents/repos/DashBase.jl`
  [0f8b85d8] JSON3 v1.13.2
⌅ [65ce6f38] PackageExtensionCompat v1.0.0
  [a03496cd] PlotlyBase v0.8.19
  [f0f68f2c] PlotlyJS v0.18.10
  [f2990250] PlotlyKaleido v2.1.0
  [91a5bcdd] Plots v1.38.17
  [8dfed614] Test `@stdlib/Test`
      Status `/tmp/jl_PFa6ZJ/Manifest.toml`
  [bf4720bc] AssetRegistry v0.1.0
  [d1d4a3ce] BitFlags v0.1.7
  [ad839575] Blink v0.12.8
  [d360d2e6] ChainRulesCore v1.16.0
  [9e997f8a] ChangesOfVariables v0.1.8
  [944b1d66] CodecZlib v0.7.2
  [35d6a980] ColorSchemes v3.23.0
  [3da002f7] ColorTypes v0.11.4
  [c3611d14] ColorVectorSpace v0.10.0
  [5ae59095] Colors v0.12.10
  [34da2185] Compat v4.9.0
  [f0e56b4a] ConcurrentUtilities v2.2.1
  [187b0558] ConstructionBase v1.5.3
  [d38c429a] Contour v0.6.2
  [03207cf0] DashBase v0.2.0 `~/Documents/repos/DashBase.jl`
  [9a962f9c] DataAPI v1.15.0
  [864edb3b] DataStructures v0.18.15
  [e2d170a0] DataValueInterfaces v1.0.0
  [ffbed154] DocStringExtensions v0.9.3
  [460bff9d] ExceptionUnwrapping v0.1.9
  [c87230d0] FFMPEG v0.4.1
  [53c48c17] FixedPointNumbers v0.8.4
  [59287772] Formatting v0.4.2
  [de31a74c] FunctionalCollections v0.5.0
  [28b8d3ca] GR v0.72.9
  [42e2da0e] Grisu v1.0.2
  [cd3eb016] HTTP v1.9.14
  [9fb69e20] Hiccup v0.2.2
  [3587e190] InverseFunctions v0.1.12
  [92d709cd] IrrationalConstants v0.2.2
  [82899510] IteratorInterfaceExtensions v1.0.0
  [1019f520] JLFzf v0.1.5
  [692b3bcd] JLLWrappers v1.5.0
  [97c1335a] JSExpr v0.5.4
  [682c06a0] JSON v0.21.4
  [0f8b85d8] JSON3 v1.13.2
  [b964fa9f] LaTeXStrings v1.3.0
  [23fbe1c1] Latexify v0.16.1
  [50d2b5c4] Lazy v0.15.1
  [2ab3a3ac] LogExpFunctions v0.3.26
  [e6f89c97] LoggingExtras v1.0.1
  [1914dd2f] MacroTools v0.5.11
  [739be429] MbedTLS v1.1.7
  [442fdcdd] Measures v0.3.2
  [e1d29d7a] Missings v1.1.0
  [ffc61752] Mustache v1.0.17
  [a975b10e] Mux v1.0.1
  [77ba4419] NaNMath v1.0.2
  [510215fc] Observables v0.5.4
  [4d8831e6] OpenSSL v1.4.1
  [bac558e1] OrderedCollections v1.6.2
⌅ [65ce6f38] PackageExtensionCompat v1.0.0
  [d96e819e] Parameters v0.12.3
  [69de0a69] Parsers v2.7.2
  [fa939f87] Pidfile v1.3.0
  [b98c9c47] Pipe v1.3.0
  [ccf2f8ad] PlotThemes v3.1.0
  [995b91a9] PlotUtils v1.3.5
  [a03496cd] PlotlyBase v0.8.19
  [f0f68f2c] PlotlyJS v0.18.10
  [f2990250] PlotlyKaleido v2.1.0
  [91a5bcdd] Plots v1.38.17
  [aea7be01] PrecompileTools v1.2.0
  [21216c6a] Preferences v1.4.0
  [3cdcf5f2] RecipesBase v1.3.4
  [01d81517] RecipesPipeline v0.6.12
  [189a3867] Reexport v1.2.2
  [05181044] RelocatableFolders v1.0.0
  [ae029012] Requires v1.3.0
  [6c6a2e73] Scratch v1.2.0
  [992d4aef] Showoff v1.0.3
  [777ac1f9] SimpleBufferStream v1.1.0
  [a2af1166] SortingAlgorithms v1.1.1
  [82ae8749] StatsAPI v1.6.0
  [2913bbd2] StatsBase v0.34.0
  [856f2bd8] StructTypes v1.10.0
  [3783bdb8] TableTraits v1.0.1
  [bd369af6] Tables v1.10.1
  [62fd8b95] TensorCore v0.1.1
  [3bb67fe8] TranscodingStreams v0.9.13
  [5c2747f8] URIs v1.5.0
  [3a884ed6] UnPack v1.0.2
  [1cfade01] UnicodeFun v0.4.1
  [1986cc42] Unitful v1.16.3
  [45397f5d] UnitfulLatexify v1.6.3
  [41fe7b60] Unzip v0.2.0
  [0f1e0344] WebIO v0.8.21
  [104b5d7c] WebSockets v1.6.0
  [cc8bc4a8] Widgets v0.6.6
  [6e34b625] Bzip2_jll v1.0.8+0
  [83423d85] Cairo_jll v1.16.1+1
  [2e619515] Expat_jll v2.5.0+0
⌃ [b22a6f82] FFMPEG_jll v4.4.2+2
  [a3f928ae] Fontconfig_jll v2.13.93+0
  [d7e528f0] FreeType2_jll v2.13.1+0
  [559328eb] FriBidi_jll v1.0.10+0
  [0656b61e] GLFW_jll v3.3.8+0
  [d2c73de3] GR_jll v0.72.9+1
  [78b55507] Gettext_jll v0.21.0+0
  [7746bdde] Glib_jll v2.74.0+2
  [3b182d85] Graphite2_jll v1.3.14+0
  [2e76f6c2] HarfBuzz_jll v2.8.1+1
  [aacddb02] JpegTurbo_jll v2.1.91+0
  [f7e6163d] Kaleido_jll v0.2.1+0
  [c1c5ebd0] LAME_jll v3.100.1+0
  [88015f11] LERC_jll v3.0.0+1
  [1d63c593] LLVMOpenMP_jll v15.0.4+0
  [dd4b983a] LZO_jll v2.10.1+0
⌅ [e9f186c6] Libffi_jll v3.2.2+1
  [d4300ac3] Libgcrypt_jll v1.8.7+0
  [7e76a0d4] Libglvnd_jll v1.6.0+0
  [7add5ba3] Libgpg_error_jll v1.42.0+0
  [94ce4f54] Libiconv_jll v1.16.1+2
  [4b2f31a3] Libmount_jll v2.35.0+0
  [89763e89] Libtiff_jll v4.5.1+1
  [38a345b3] Libuuid_jll v2.36.0+0
  [e7412a2a] Ogg_jll v1.3.5+1
⌅ [458c3c95] OpenSSL_jll v1.1.22+0
  [91d4177d] Opus_jll v1.3.2+0
  [30392449] Pixman_jll v0.42.2+0
  [c0090381] Qt6Base_jll v6.4.2+3
  [a2964d1f] Wayland_jll v1.21.0+0
  [2381bf8a] Wayland_protocols_jll v1.25.0+0
  [02c8fc9c] XML2_jll v2.10.3+0
  [aed1982a] XSLT_jll v1.1.34+0
  [ffd25f8a] XZ_jll v5.4.4+0
  [4f6342f7] Xorg_libX11_jll v1.8.6+0
  [0c0b7dd1] Xorg_libXau_jll v1.0.11+0
  [935fb764] Xorg_libXcursor_jll v1.2.0+4
  [a3789734] Xorg_libXdmcp_jll v1.1.4+0
  [1082639a] Xorg_libXext_jll v1.3.4+4
  [d091e8ba] Xorg_libXfixes_jll v5.0.3+4
  [a51aa0fd] Xorg_libXi_jll v1.7.10+4
  [d1454406] Xorg_libXinerama_jll v1.1.4+4
  [ec84b674] Xorg_libXrandr_jll v1.5.2+4
  [ea2f1a96] Xorg_libXrender_jll v0.9.10+4
  [14d82f49] Xorg_libpthread_stubs_jll v0.1.1+0
  [c7cfdc94] Xorg_libxcb_jll v1.15.0+0
  [cc61e674] Xorg_libxkbfile_jll v1.1.2+0
  [12413925] Xorg_xcb_util_image_jll v0.4.0+1
  [2def613f] Xorg_xcb_util_jll v0.4.0+1
  [975044d2] Xorg_xcb_util_keysyms_jll v0.4.0+1
  [0d47668e] Xorg_xcb_util_renderutil_jll v0.3.9+1
  [c22f9ab0] Xorg_xcb_util_wm_jll v0.4.1+1
  [35661453] Xorg_xkbcomp_jll v1.4.6+0
  [33bec58e] Xorg_xkeyboard_config_jll v2.39.0+0
  [c5fb5394] Xorg_xtrans_jll v1.5.0+0
  [3161d3a3] Zstd_jll v1.5.5+0
⌅ [214eeab7] fzf_jll v0.29.0+0
  [a4ae2306] libaom_jll v3.4.0+0
  [0ac62f75] libass_jll v0.15.1+0
  [f638f0a6] libfdk_aac_jll v2.0.2+0
  [b53b4c65] libpng_jll v1.6.38+0
  [f27f6e37] libvorbis_jll v1.3.7+1
  [1270edf5] x264_jll v2021.5.5+0
  [dfaa095f] x265_jll v3.5.0+0
  [d8fb68d0] xkbcommon_jll v1.4.1+0
  [0dad84c5] ArgTools v1.1.1 `@stdlib/ArgTools`
  [56f22d72] Artifacts `@stdlib/Artifacts`
  [2a0f44e3] Base64 `@stdlib/Base64`
  [ade2ca70] Dates `@stdlib/Dates`
  [8bb1440f] DelimitedFiles `@stdlib/DelimitedFiles`
  [8ba89e20] Distributed `@stdlib/Distributed`
  [f43a241f] Downloads v1.6.0 `@stdlib/Downloads`
  [7b1f6079] FileWatching `@stdlib/FileWatching`
  [b77e0a4c] InteractiveUtils `@stdlib/InteractiveUtils`
  [b27032c2] LibCURL v0.6.3 `@stdlib/LibCURL`
  [76f85450] LibGit2 `@stdlib/LibGit2`
  [8f399da3] Libdl `@stdlib/Libdl`
  [37e2e46d] LinearAlgebra `@stdlib/LinearAlgebra`
  [56ddb016] Logging `@stdlib/Logging`
  [d6f4376e] Markdown `@stdlib/Markdown`
  [a63ad114] Mmap `@stdlib/Mmap`
  [ca575930] NetworkOptions v1.2.0 `@stdlib/NetworkOptions`
  [44cfe95a] Pkg v1.8.0 `@stdlib/Pkg`
  [de0858da] Printf `@stdlib/Printf`
  [3fa0cd96] REPL `@stdlib/REPL`
  [9a3f8284] Random `@stdlib/Random`
  [ea8e919c] SHA v0.7.0 `@stdlib/SHA`
  [9e88b42a] Serialization `@stdlib/Serialization`
  [6462fe0b] Sockets `@stdlib/Sockets`
  [2f01184e] SparseArrays `@stdlib/SparseArrays`
  [10745b16] Statistics `@stdlib/Statistics`
  [fa267f1f] TOML v1.0.0 `@stdlib/TOML`
  [a4e569a6] Tar v1.10.1 `@stdlib/Tar`
  [8dfed614] Test `@stdlib/Test`
  [cf7118a7] UUIDs `@stdlib/UUIDs`
  [4ec0a83e] Unicode `@stdlib/Unicode`
  [e66e0078] CompilerSupportLibraries_jll v1.0.1+0 `@stdlib/CompilerSupportLibraries_jll`
  [deac9b47] LibCURL_jll v7.84.0+0 `@stdlib/LibCURL_jll`
  [29816b5a] LibSSH2_jll v1.10.2+0 `@stdlib/LibSSH2_jll`
  [c8ffd9c3] MbedTLS_jll v2.28.0+0 `@stdlib/MbedTLS_jll`
  [14a3606d] MozillaCACerts_jll v2022.2.1 `@stdlib/MozillaCACerts_jll`
  [4536629a] OpenBLAS_jll v0.3.20+0 `@stdlib/OpenBLAS_jll`
  [05823500] OpenLibm_jll v0.8.1+0 `@stdlib/OpenLibm_jll`
  [efcefdf7] PCRE2_jll v10.40.0+0 `@stdlib/PCRE2_jll`
  [83775a58] Zlib_jll v1.2.12+3 `@stdlib/Zlib_jll`
  [8e850b90] libblastrampoline_jll v5.1.1+0 `@stdlib/libblastrampoline_jll`
  [8e850ede] nghttp2_jll v1.48.0+0 `@stdlib/nghttp2_jll`
  [3f19e933] p7zip_jll v17.4.0+0 `@stdlib/p7zip_jll`
        Info Packages marked with ⌃ and ⌅ have new versions available, but those with ⌅ are restricted by compatibility constraints from upgrading.
Precompiling project...
  1 dependency successfully precompiled in 1 seconds. 164 already precompiled.
     Testing Running tests...
Test Summary:       | Pass  Total  Time
components creation |   16     16  2.1s
Test Summary: | Pass  Total  Time
empty wilds   |    7      7  0.0s
Test Summary: | Pass  Total  Time
Index by id   |    2      2  0.5s
Test Summary:         | Pass  Total  Time
DashBasePlotlyBaseExt |    6      6  3.9s
Test Summary:      | Pass  Total  Time
DashBasePlotsJSExt |    6      6  2.6s
Test Summary:                 | Pass  Total  Time
DashBasePlotsExt + plotlyjs() |    6      6  7.7s
┌ Warning: `PlotlyKaleido` 2.1.0 is not compatible with this version of `Plots`. The declared compatibility is 1.
└ @ Plots ~/.julia/packages/Plots/3BCH5/src/backends.jl:55
Test Summary:               | Pass  Total  Time
DashBasePlotsExt + plotly() |    6      6  1.8s
Test Summary:  | Pass  Total  Time
lazy + dynamic |   13     13  0.1s
Test Summary: | Pass  Total  Time
register      |    1      1  0.1s
     Testing DashBase tests passed

Replace with `PackageExtensionCompat`
@etpinard etpinard merged commit bcccaf9 into master Aug 24, 2023
@etpinard etpinard deleted the fixup-plots-to_dash branch August 24, 2023 17:38
@etpinard etpinard added this to the v1 milestone Aug 24, 2023
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant