diff --git a/docker/py-dsci-100/.gitconfig b/docker/py-dsci-100/.gitconfig new file mode 100644 index 0000000..713f029 --- /dev/null +++ b/docker/py-dsci-100/.gitconfig @@ -0,0 +1,2 @@ +[pull] + rebase = false \ No newline at end of file diff --git a/docker/py-dsci-100/Dockerfile b/docker/py-dsci-100/Dockerfile index d018c32..106c7f8 100644 --- a/docker/py-dsci-100/Dockerfile +++ b/docker/py-dsci-100/Dockerfile @@ -15,11 +15,6 @@ WORKDIR "${HOME}/work" # https://discourse.jupyter.org/t/debugger-warning-it-seems-that-frozen-modules-are-being-used-python-3-11-0/16544/12 ENV PYDEVD_DISABLE_FILE_VALIDATION=1 -# update scikit-learn to the current @main (July 20, 2023) -# to get this merged PR: https://github.com/scikit-learn/scikit-learn/pull/26772 -# which fixes this issue: https://github.com/scikit-learn/scikit-learn/issues/26768 -RUN pip install --upgrade git+https://github.com/scikit-learn/scikit-learn@7de59b2017f39048880a3858d32c8caef9308954 - # Install Python packages RUN mamba install --quiet --yes \ 'numpy' \ @@ -29,6 +24,7 @@ RUN mamba install --quiet --yes \ 'ibis-framework' \ 'nodejs' \ 'psycopg2' \ + 'jupyter-resource-usage' \ && mamba clean --all -f -y \ && fix-permissions "${CONDA_DIR}" \ && fix-permissions "/home/${NB_USER}" @@ -36,8 +32,8 @@ RUN mamba install --quiet --yes \ # Install some recent python package that might not be on conda yet RUN pip install pandas"<2.1" altair"==5.0.1" "vegafusion[embed]" vl-convert-python -# Install nbgitpuller, jlab-git -RUN pip install nbgitpuller jupyterlab-git \ +# Install nbgitpuller, jlab-git, newest pexpect 4.9.0 +RUN pip install nbgitpuller jupyterlab-git==0.50.0 pexpect==4.9.0 \ && jupyter lab build # Disable the cell toolbar (which ignores metadata and students often accidentally click + delete grading cells) @@ -46,7 +42,20 @@ RUN jupyter labextension disable @jupyterlab/cell-toolbar-extension # Install the extension to remove the shift+M merge shortcut COPY shortcuts.jupyterlab-settings /home/${NB_USER}/.jupyter/lab/user-settings/\@jupyterlab/shortcuts-extension/shortcuts.jupyterlab-settings -# Make sure everything in the home folder is owned by NB_USER +# Copy jupyter_server_config.py which allows students to see and delete hidden files +COPY jupyter_server_config.py /home/${NB_USER}/.jupyter + +# Copy gitconfig that sets global default pull strategy to merge +COPY .gitconfig /home/${NB_USER}/ + USER root +# Install zip package +RUN apt install zip + +# Make sure everything in the home folder is owned by NB_USER RUN chown -R ${NB_USER} /home/${NB_USER} + USER ${NB_UID} + +# Disable healthcheck for performance reasons +HEALTHCHECK NONE \ No newline at end of file diff --git a/docker/py-dsci-100/jupyter_server_config.py b/docker/py-dsci-100/jupyter_server_config.py new file mode 100644 index 0000000..40ad408 --- /dev/null +++ b/docker/py-dsci-100/jupyter_server_config.py @@ -0,0 +1,49 @@ +# Configuration file for jupyter-server. + +c = get_config() #noqa + +#------------------------------------------------------------------------------ +# ContentsManager(LoggingConfigurable) configuration +#------------------------------------------------------------------------------ +## Base class for serving files and directories. +# +# This serves any text or binary file, +# as well as directories, +# with special handling for JSON notebook documents. +# +# Most APIs take a path argument, +# which is always an API-style unicode path, +# and always refers to a directory. +# +# - unicode, not url-escaped +# - '/'-separated +# - leading and trailing '/' will be stripped +# - if unspecified, path defaults to '', +# indicating the root path. + +## Allow access to hidden files +# Default: False +c.ContentsManager.allow_hidden = True + +#------------------------------------------------------------------------------ +# FileContentsManager(FileManagerMixin, ContentsManager) configuration +#------------------------------------------------------------------------------ +## Allow access to hidden files +# See also: ContentsManager.allow_hidden +c.FileContentsManager.allow_hidden = True + +#------------------------------------------------------------------------------ +# AsyncContentsManager(ContentsManager) configuration +#------------------------------------------------------------------------------ +## Base class for serving files and directories asynchronously. + +## Allow access to hidden files +# See also: ContentsManager.allow_hidden +c.AsyncContentsManager.allow_hidden = True + +#------------------------------------------------------------------------------ +# AsyncFileContentsManager(FileContentsManager, AsyncFileManagerMixin, AsyncContentsManager) configuration +#------------------------------------------------------------------------------ +## Allow access to hidden files +# See also: ContentsManager.allow_hidden +c.AsyncFileContentsManager.allow_hidden = True diff --git a/docker/r-dsci-100/.gitconfig b/docker/r-dsci-100/.gitconfig new file mode 100644 index 0000000..713f029 --- /dev/null +++ b/docker/r-dsci-100/.gitconfig @@ -0,0 +1,2 @@ +[pull] + rebase = false \ No newline at end of file diff --git a/docker/r-dsci-100/Dockerfile b/docker/r-dsci-100/Dockerfile index ea40ef5..b103660 100644 --- a/docker/r-dsci-100/Dockerfile +++ b/docker/r-dsci-100/Dockerfile @@ -24,6 +24,7 @@ RUN mamba install --quiet --yes \ 'r-kknn' \ 'r-testthat' \ 'r-rpostgres' \ + 'jupyter-resource-usage' \ && mamba clean --all -f -y \ && fix-permissions "${CONDA_DIR}" \ && fix-permissions "/home/${NB_USER}" \ @@ -32,8 +33,8 @@ RUN mamba install --quiet --yes \ && Rscript -e "install.packages('tidyclust', repos='http://cran.us.r-project.org')" \ && Rscript -e "install.packages('janitor', repos='http://cran.us.r-project.org')" -# Install nbgitpuller, jlab-git -RUN pip install nbgitpuller jupyterlab-git \ +# Install nbgitpuller, jlab-git, newest pexpect 4.9.0 +RUN pip install nbgitpuller jupyterlab-git pexpect==4.9.0 \ && jupyter lab build # Disable the cell toolbar (which ignores metadata and students often accidentally click + delete grading cells) @@ -42,8 +43,16 @@ RUN jupyter labextension disable @jupyterlab/cell-toolbar-extension # Install the extension to remove the shift+M merge shortcut COPY shortcuts.jupyterlab-settings /home/${NB_USER}/.jupyter/lab/user-settings/\@jupyterlab/shortcuts-extension/shortcuts.jupyterlab-settings +# Copy jupyter_server_config.py which allows students to see and delete hidden files +COPY jupyter_server_config.py /home/${NB_USER}/.jupyter + +# Copy gitconfig that sets global default pull strategy to merge +COPY .gitconfig /home/${NB_USER}/ + # Make sure everything in the home folder is owned by NB_USER USER root RUN chown -R ${NB_USER} /home/${NB_USER} USER ${NB_UID} +# Disable healthcheck for performance reasons +HEALTHCHECK NONE \ No newline at end of file diff --git a/docker/r-dsci-100/jupyter_server_config.py b/docker/r-dsci-100/jupyter_server_config.py new file mode 100644 index 0000000..40ad408 --- /dev/null +++ b/docker/r-dsci-100/jupyter_server_config.py @@ -0,0 +1,49 @@ +# Configuration file for jupyter-server. + +c = get_config() #noqa + +#------------------------------------------------------------------------------ +# ContentsManager(LoggingConfigurable) configuration +#------------------------------------------------------------------------------ +## Base class for serving files and directories. +# +# This serves any text or binary file, +# as well as directories, +# with special handling for JSON notebook documents. +# +# Most APIs take a path argument, +# which is always an API-style unicode path, +# and always refers to a directory. +# +# - unicode, not url-escaped +# - '/'-separated +# - leading and trailing '/' will be stripped +# - if unspecified, path defaults to '', +# indicating the root path. + +## Allow access to hidden files +# Default: False +c.ContentsManager.allow_hidden = True + +#------------------------------------------------------------------------------ +# FileContentsManager(FileManagerMixin, ContentsManager) configuration +#------------------------------------------------------------------------------ +## Allow access to hidden files +# See also: ContentsManager.allow_hidden +c.FileContentsManager.allow_hidden = True + +#------------------------------------------------------------------------------ +# AsyncContentsManager(ContentsManager) configuration +#------------------------------------------------------------------------------ +## Base class for serving files and directories asynchronously. + +## Allow access to hidden files +# See also: ContentsManager.allow_hidden +c.AsyncContentsManager.allow_hidden = True + +#------------------------------------------------------------------------------ +# AsyncFileContentsManager(FileContentsManager, AsyncFileManagerMixin, AsyncContentsManager) configuration +#------------------------------------------------------------------------------ +## Allow access to hidden files +# See also: ContentsManager.allow_hidden +c.AsyncFileContentsManager.allow_hidden = True