diff --git a/base-notebook/jupyter_server_config.py b/base-notebook/jupyter_server_config.py index ef0380bd..c95957cc 100644 --- a/base-notebook/jupyter_server_config.py +++ b/base-notebook/jupyter_server_config.py @@ -12,6 +12,9 @@ c.ServerApp.ip = "0.0.0.0" c.ServerApp.port = 8888 c.ServerApp.open_browser = False +# to output both image/svg+xml and application/pdf plot formats in the notebook file +c.InlineBackend.figure_formats = {"png", "jpeg", "svg", "pdf"} + # https://github.com/jupyter/notebook/issues/3130 c.FileContentsManager.delete_to_trash = False diff --git a/minimal-notebook/Dockerfile b/minimal-notebook/Dockerfile index f7b495f6..e421750e 100644 --- a/minimal-notebook/Dockerfile +++ b/minimal-notebook/Dockerfile @@ -21,8 +21,6 @@ RUN apt-get update --yes && \ tzdata \ unzip \ vim-tiny \ - # Inkscape is installed to be able to convert SVG files - inkscape \ # git-over-ssh openssh-client \ # less is needed to run help in R @@ -40,3 +38,6 @@ RUN update-alternatives --install /usr/bin/nano nano /bin/nano-tiny 10 # Switch back to jovyan to avoid accidental container runs as root USER ${NB_UID} + +# Add R mimetype option to specify how the plot returns from R to the browser +COPY --chown=${NB_UID}:${NB_GID} Rprofile.site /opt/conda/lib/R/etc/ diff --git a/minimal-notebook/Rprofile.site b/minimal-notebook/Rprofile.site new file mode 100644 index 00000000..3d6a93cc --- /dev/null +++ b/minimal-notebook/Rprofile.site @@ -0,0 +1,4 @@ +# Add R mimetype to specify how the plot returns from R to the browser. +# https://notebook.community/andrie/jupyter-notebook-samples/Changing%20R%20plot%20options%20in%20Jupyter + +options(jupyter.plot_mimetypes = c('text/plain', 'image/png', 'image/jpeg', 'image/svg+xml', 'application/pdf')) diff --git a/tests/R_mimetype_check.py b/tests/R_mimetype_check.py new file mode 100644 index 00000000..cc09d134 --- /dev/null +++ b/tests/R_mimetype_check.py @@ -0,0 +1,21 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import logging + +from tests.conftest import TrackedContainer + +LOGGER = logging.getLogger(__name__) + + +def check_r_mimetypes(container: TrackedContainer) -> None: + """Check if Rscript command can be executed""" + LOGGER.info("Test that R command can be executed ...") + Rcommand = 'if (length(getOption("jupyter.plot_mimetypes")) != 5) {stop("missing jupyter.plot_mimetypes")}' + logs = container.run_and_wait( + timeout=10, + tty=True, + command=["Rscript", "-e", Rcommand], + ) + LOGGER.debug(f"{logs=}") + assert len(logs) == 0, f"Command {Rcommand=} failed" diff --git a/tests/datascience-notebook/test_mimetypes.py b/tests/datascience-notebook/test_mimetypes.py new file mode 100644 index 00000000..a2ac55cf --- /dev/null +++ b/tests/datascience-notebook/test_mimetypes.py @@ -0,0 +1,10 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +from tests.conftest import TrackedContainer +from tests.R_mimetype_check import check_r_mimetypes + + +def test_mimetypes(container: TrackedContainer) -> None: + """Check if Rscript command for mimetypes can be executed""" + check_r_mimetypes(container) diff --git a/tests/minimal-notebook/test_inkscape.py b/tests/minimal-notebook/test_inkscape.py deleted file mode 100644 index 7cdcf277..00000000 --- a/tests/minimal-notebook/test_inkscape.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) Jupyter Development Team. -# Distributed under the terms of the Modified BSD License. - -import logging - -from tests.conftest import TrackedContainer - -LOGGER = logging.getLogger(__name__) - - -def test_inkscape(container: TrackedContainer) -> None: - """Inkscape shall be installed to be able to convert SVG files.""" - LOGGER.info("Test that inkscape is working by printing its version ...") - logs = container.run_and_wait( - timeout=10, - tty=True, - command=["start.sh", "bash", "-c", "inkscape --version"], - ) - assert "Inkscape" in logs, "Inkscape not installed or not working" diff --git a/tests/r-notebook/test_R_mimetypes.py b/tests/r-notebook/test_R_mimetypes.py new file mode 100644 index 00000000..a2ac55cf --- /dev/null +++ b/tests/r-notebook/test_R_mimetypes.py @@ -0,0 +1,10 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +from tests.conftest import TrackedContainer +from tests.R_mimetype_check import check_r_mimetypes + + +def test_mimetypes(container: TrackedContainer) -> None: + """Check if Rscript command for mimetypes can be executed""" + check_r_mimetypes(container)