From 87eb47da3f8acc926162310c33590f468d55a1e6 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Thu, 31 Jan 2019 00:15:09 -0800 Subject: [PATCH] Bugfix for IJulia.display_dict (#54) * Call IJulia.display_dict with invokelatest This is required for using printing methods defined in the notebook. * Remove invokelatest from IJulia.limitstringmime --- src/IJulia.jl | 6 ++---- src/Literate.jl | 2 +- test/runtests.jl | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/IJulia.jl b/src/IJulia.jl index 8f928c9..75ec946 100644 --- a/src/IJulia.jl +++ b/src/IJulia.jl @@ -56,16 +56,14 @@ function limitstringmime(mime::MIME, x) if israwtext(mime, x) return String(x) else - # show(IOContext(buf, :limit=>true, :color=>true), mime, x) - Base.invokelatest(show, IOContext(buf, :limit=>true, :color=>true), mime, x) + show(IOContext(buf, :limit=>true, :color=>true), mime, x) end else b64 = Base64EncodePipe(buf) if isa(x, Vector{UInt8}) write(b64, x) # x assumed to be raw binary data else - # show(IOContext(b64, :limit=>true, :color=>true), mime, x) - Base.invokelatest(show, IOContext(b64, :limit=>true, :color=>true), mime, x) + show(IOContext(b64, :limit=>true, :color=>true), mime, x) end close(b64) end diff --git a/src/Literate.jl b/src/Literate.jl index b3c753b..3f88641 100644 --- a/src/Literate.jl +++ b/src/Literate.jl @@ -561,7 +561,7 @@ function execute_notebook(nb) execute_result["output_type"] = "execute_result" execute_result["metadata"] = Dict() execute_result["execution_count"] = execution_count - dd = IJulia.display_dict(r) + dd = Base.invokelatest(IJulia.display_dict, r) # we need to split some mime types into vectors of lines instead of a single string for mime in ("image/svg+xml", "text/html") if haskey(dd, mime) diff --git a/test/runtests.jl b/test/runtests.jl index 48df58e..cfb39e3 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -647,6 +647,20 @@ end # verify that inputfile exists @test_throws ArgumentError Literate.notebook("nonexistent.jl", outdir) + + # world time problem with `IJulia.display_dict` + write(inputfile, """ + struct VegaLiteRenderable end + Base.show(io::IO, ::MIME"application/vnd.vegalite.v2+json", ::VegaLiteRenderable) = + write(io, \"\"\" + {"encoding":{"x":{"field":"x","type":"quantitative"},"y":{"field":"y","type":"quantitative"}},"data":{"values":[{"x":1,"y":1},{"x":2,"y":3},{"x":3,"y":2}]},"mark":"point"} + \"\"\") + Base.Multimedia.istextmime(::MIME{Symbol("application/vnd.vegalite.v2+json")}) = true + VegaLiteRenderable() + """) + Literate.notebook(inputfile, outdir) + notebook = read(joinpath(outdir, "inputfile.ipynb"), String) + @test occursin("\"application/vnd.vegalite.v2+json\":", notebook) end end end