diff --git a/scipy-notebook/Dockerfile b/scipy-notebook/Dockerfile index 8e36c706..7ca8d9e7 100644 --- a/scipy-notebook/Dockerfile +++ b/scipy-notebook/Dockerfile @@ -8,9 +8,15 @@ LABEL maintainer="Jupyter Project " USER root -# ffmpeg for matplotlib anim & dvipng+cm-super for latex labels RUN apt-get update --yes && \ - apt-get install --yes --no-install-recommends ffmpeg dvipng cm-super && \ + apt-get install --yes --no-install-recommends \ + # for cython: https://cython.readthedocs.io/en/latest/src/quickstart/install.html + build-essential \ + # for latex labels + cm-super \ + dvipng \ + # for matplotlib anim + ffmpeg && \ apt-get clean && rm -rf /var/lib/apt/lists/* USER ${NB_UID} diff --git a/tests/scipy-notebook/data/cython/helloworld.pyx b/tests/scipy-notebook/data/cython/helloworld.pyx new file mode 100644 index 00000000..ad35e5ae --- /dev/null +++ b/tests/scipy-notebook/data/cython/helloworld.pyx @@ -0,0 +1 @@ +print("Hello World") diff --git a/tests/scipy-notebook/data/cython/setup.py b/tests/scipy-notebook/data/cython/setup.py new file mode 100644 index 00000000..3065be3b --- /dev/null +++ b/tests/scipy-notebook/data/cython/setup.py @@ -0,0 +1,9 @@ +from setuptools import setup +from Cython.Build import cythonize +from pathlib import Path + + +THIS_DIR = Path(__file__).parent.resolve() + + +setup(ext_modules=cythonize(str(THIS_DIR / "helloworld.pyx"))) diff --git a/tests/scipy-notebook/test_cython.py b/tests/scipy-notebook/test_cython.py new file mode 100644 index 00000000..31c92cf2 --- /dev/null +++ b/tests/scipy-notebook/test_cython.py @@ -0,0 +1,36 @@ +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +import logging +from pathlib import Path +import shutil +import tempfile + +from conftest import TrackedContainer + +LOGGER = logging.getLogger(__name__) +THIS_DIR = Path(__file__).parent.resolve() + + +def test_cython(container: TrackedContainer) -> None: + data_dir = THIS_DIR / "data/cython" + + with tempfile.TemporaryDirectory() as host_data_dir: + """We create temporary dir with the same content to mount it as a writeable folder + This allows to run this test in parallel many times + """ + shutil.copy(data_dir / "helloworld.pyx", host_data_dir) + shutil.copy(data_dir / "setup.py", host_data_dir) + + cont_data_dir = "/home/jovyan/data" + command = "sleep infinity" + + running_container = container.run_detached( + volumes={str(host_data_dir): {"bind": cont_data_dir, "mode": "rw"}}, + tty=True, + command=["start.sh", "bash", "-c", command], + ) + command = f"python {cont_data_dir}/setup.py build_ext --inplace" + cmd = running_container.exec_run(command) + LOGGER.debug(cmd.output.decode("utf-8")) + assert cmd.exit_code == 0, f"Command {command} failed"