Skip to content
Snippets Groups Projects
Commit d839965d authored by Alexandre Strube's avatar Alexandre Strube
Browse files

Merge branch '2020' of...

parents cef89839 53b29ada
No related branches found
No related tags found
No related merge requests found
Showing
with 2387 additions and 2 deletions
easyblock = 'PackedBinary'
name = 'HDFView'
version = '3.1.1'
homepage = 'https://www.hdfgroup.org/products/java/'
description = """The HDF Java Products consist of HDFView (a Java browser for HDF4 and HDF5 files) and the HDF-Java wrappers.
"""
site_contacts = 'j.goebbert@fz-juelich.de'
toolchain = {'name': 'GCC', 'version': '9.3.0'}
source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/hdfview-%(version)s/src/']
sources = ['%(namelower)s-%(version)s.tar.gz']
builddependencies = [
('ant', '1.10.9', '-Java-%(javaver)s', SYSTEM),
]
dependencies = [
('Java', '15', '', SYSTEM),
('HDF', '4.2.15'),
('HDF5', '1.10.6', '-serial'),
]
install_cmd = (
# build HDFView
'export HDFLIBS=$EBROOTHDF && '
'export HDF5LIBS=$EBROOTHDF5 && '
'cd %(builddir)s/hdfview-%(version)s && '
'ant run && '
'ant package && '
'tar -xzf build/dist/HDFView-%(version)s-Linux-x86_64.tar.gz && '
# install HDFView
'cd %(installdir)s && '
'%(builddir)s/hdfview-%(version)s/build/dist/HDFView-%(version)s-Linux.sh --skip-license && '
'mv %(installdir)s/HDFView/%(version)s/* %(installdir)s && '
'mkdir %(installdir)s/bin && '
'mv %(installdir)s/hdfview.sh %(installdir)s/bin/ && '
'ln -s %(installdir)s/bin/hdfview.sh %(installdir)s/bin/hdfview && '
"sed -i 's#JAVABIN=.*#JAVABIN=$JAVA_HOME/bin#g' %(installdir)s/bin/hdfview.sh && "
'sed -i "s#INSTALLDIR=.*#INSTALLDIR=%(installdir)s#g" %(installdir)s/bin/hdfview.sh '
)
moduleclass = 'vis'
# on juwels booster, one needs to call "export UCX_LOG_LEVEL=FATAL ebw ...
easyblock = 'PythonBundle'
name = 'Horovod'
version = '0.20.3'
local_tf_version = '2.3.1'
versionsuffix = '-Python-%(pyver)s'
homepage = 'https://github.com/uber/horovod'
description = "Horovod is a distributed training framework for TensorFlow and PyTorch."
toolchain = {'name': 'gomkl', 'version': '2020'}
toolchainopts = {'usempi': True, 'pic': True}
site_contacts = 'a.strube@fz-juelich.de'
builddependencies = [
('CMake', '3.18.0'),
]
dependencies = [
('Python', '3.8.5'),
('TensorFlow', local_tf_version, '-Python-%(pyver)s', ('gcccoremkl', '9.3.0-2020.2.254')),
('UCX', '1.9.0', '', SYSTEM), # Forced because default was 1.8.1. If the default is 1.9.0, this can go away
('PyTorch', '1.7.0', '-Python-%(pyver)s', ('gcccoremkl', '9.3.0-2020.2.254')),
('NCCL', '2.8.3-1', '-CUDA-11.0'),
]
use_pip = True
sanity_pip_check = True
# possible vars:
# HOROVOD_BUILD_ARCH_FLAGS - additional C++ compilation flags to pass in for your build architecture.
# HOROVOD_CUDA_HOME - path where CUDA include and lib directories can be found.
# HOROVOD_BUILD_CUDA_CC_LIST - List of compute capabilities to build Horovod CUDA
# kernels for (example: HOROVOD_BUILD_CUDA_CC_LIST=60,70,75)
# HOROVOD_ROCM_HOME - path where ROCm include and lib directories can be found.
# HOROVOD_NCCL_HOME - path where NCCL include and lib directories can be found.
# HOROVOD_NCCL_INCLUDE - path to NCCL include directory.
# HOROVOD_NCCL_LIB - path to NCCL lib directory.
# HOROVOD_NCCL_LINK - {SHARED, STATIC}. Mode to link NCCL library. Defaults to STATIC for CUDA, SHARED for ROCm.
# HOROVOD_WITH_GLOO - {1}. Require that Horovod is built with Gloo support enabled.
# HOROVOD_WITHOUT_GLOO - {1}. Skip building with Gloo support.
# HOROVOD_WITH_MPI - {1}. Require that Horovod is built with MPI support enabled.
# HOROVOD_WITHOUT_MPI - {1}. Skip building with MPI support.
# HOROVOD_GPU - {CUDA, ROCM}. Framework to use for GPU operations.
# HOROVOD_GPU_OPERATIONS - {NCCL, MPI}. Framework to use for GPU tensor allreduce, allgather, and broadcast.
# HOROVOD_GPU_ALLREDUCE - {NCCL, MPI}. Framework to use for GPU tensor allreduce.
# HOROVOD_GPU_ALLGATHER - {NCCL, MPI}. Framework to use for GPU tensor allgather.
# HOROVOD_GPU_BROADCAST - {NCCL, MPI}. Framework to use for GPU tensor broadcast.
# HOROVOD_ALLOW_MIXED_GPU_IMPL - {1}. Allow Horovod to install with NCCL allreduce and MPI GPU allgather /
# broadcast. Not recommended due to a possible deadlock.
# HOROVOD_CPU_OPERATIONS - {MPI, GLOO, CCL}. Framework to use for CPU tensor allreduce, allgather, and broadcast.
# HOROVOD_CMAKE - path to the CMake binary used to build Gloo (not required when using MPI).
# HOROVOD_WITH_TENSORFLOW - {1}. Require Horovod to install with TensorFlow support enabled.
# HOROVOD_WITHOUT_TENSORFLOW - {1}. Skip installing TensorFlow support.
# HOROVOD_WITH_PYTORCH - {1}. Require Horovod to install with PyTorch support enabled.
# HOROVOD_WITHOUT_PYTORCH - {1}. Skip installing PyTorch support.
# HOROVOD_WITH_MXNET - {1}. Require Horovod to install with MXNet support enabled.
# HOROVOD_WITHOUT_MXNET - {1}. Skip installing MXNet support.
# prebuildopts = 'export LDSHARED="$CC -shared" && '
# prebuildopts += ' HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITHOUT_PYTORCH=1 HOROVOD_WITHOUT_MXNET=1 '
# prebuildopts += ' HOROVOD_NCCL_LINK=SHARED HOROVOD_NCCL_HOME=$EBROOTNCCL '
# prebuildopts += ' HOROVOD_GPU_OPERATIONS=NCCL '
# prebuildopts += ' HOROVOD_CPU_OPERATIONS=MPI '
# prebuildopts += ' HOROVOD_GPU_ALLREDUCE=NCCL '
# prebuildopts += ' HOROVOD_GPU_BROADCAST=NCCL '
# prebuildopts += ' HOROVOD_WITH_MPI=1 '
prebuildopts = 'export LDSHARED="$CC -shared" && '
prebuildopts += ' HOROVOD_NCCL_LINK=SHARED HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_NCCL_HOME=$EBROOTNCCL '
prebuildopts += ' HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITH_PYTORCH=1'
prebuildopts += ' NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 \
-gencode=arch=compute_75,code=sm_75 \
-gencode=arch=compute_80,code=sm_80"'
preinstallopts = prebuildopts
exts_default_options = {'source_urls': [PYPI_SOURCE]}
exts_list = [
('horovod', version, {
'checksums': ['6ebc90d627af486d44335ed48489e1e8dc190607574758867c52e4e17d75a247'],
'cuda_compute_capabilities': ['7.0', '7.5', '8.0'],
}),
]
sanity_check_paths = {
'files': ['bin/horovodrun'],
'dirs': ['lib/python%(pyshortver)s/site-packages'],
}
# This makes openmpi work. It's up to the sysadmins to correct me here.
modextravars = {'HOROVOD_MPI_THREADS_DISABLE': '1'}
modloadmsg = 'Setting HOROVOD_MPI_THREADS_DISABLE=1. '
moduleclass = 'tools'
......@@ -16,6 +16,7 @@ toolchainopts = {'opt': True, 'pic': True}
builddependencies = [
('flex', '2.6.4'),
('Bison', '3.6.4'),
('Java', '15', '', SYSTEM),
]
dependencies = [
......@@ -28,7 +29,8 @@ dependencies = [
sources = [SOURCELOWER_TAR_GZ]
source_urls = ['http://www.hdfgroup.org/ftp/HDF/releases/HDF%s/src/' % version.split('-')[0]]
configopts = '--with-szlib=$EBROOTSZIP --with-zlib=$EBROOTZLIB --includedir=%(installdir)s/include/%(namelower)s'
configopts = '--with-szlib=$EBROOTSZIP --with-zlib=$EBROOTZLIB --enable-java '
configopts += '--includedir=%(installdir)s/include/%(namelower)s '
sanity_check_paths = {
'files': ['lib/libdf.a', 'lib/libhdf4.settings', 'lib/libmfhdf.a'],
......
......@@ -16,6 +16,7 @@ toolchainopts = {'opt': True, 'pic': True}
builddependencies = [
('flex', '2.6.4'),
('Bison', '3.6.4'),
('Java', '15', '', SYSTEM),
]
dependencies = [
......@@ -28,7 +29,8 @@ dependencies = [
sources = [SOURCELOWER_TAR_GZ]
source_urls = ['http://www.hdfgroup.org/ftp/HDF/releases/HDF%s/src/' % version.split('-')[0]]
configopts = '--with-szlib=$EBROOTSZIP --with-zlib=$EBROOTZLIB --includedir=%(installdir)s/include/%(namelower)s'
configopts = '--with-szlib=$EBROOTSZIP --with-zlib=$EBROOTZLIB --enable-java '
configopts += '--includedir=%(installdir)s/include/%(namelower)s '
sanity_check_paths = {
'files': ['lib/libdf.a', 'lib/libhdf4.settings', 'lib/libmfhdf.a'],
......
......@@ -85,6 +85,15 @@ JSON-C
JSON-GLib
JsonCpp
JUnit
JupyterKernel-Bash
JupyterKernel-Cling
JupyterKernel-JavaScript
JupyterKernel-Julia
JupyterKernel-Octave
JupyterKernel-PyParaView
JupyterKernel-R
JupyterKernel-Ruby
JupyterProxy-XpraHTML5
kbproto
LAME
LevelDB
......
easyblock = 'CMakeMake'
name = 'ITK'
version = '5.1.2'
versionsuffix = '-nompi-Python-%(pyver)s'
homepage = 'https://itk.org'
description = """Insight Segmentation and Registration Toolkit (ITK) provides
an extensive suite of software tools for registering and segmenting
multidimensional imaging data."""
site_contacts = 'j.goebbert@fz-juelich.de'
toolchain = {'name': 'GCCcore', 'version': '9.3.0'}
toolchainopts = {'pic': True}
source_urls = ['https://github.com/InsightSoftwareConsortium/ITK/archive/']
sources = ['v%(version)s.tar.gz']
checksums = ['651284ce6f68e8bd31db176a6b53f5679209a8ed5b6b5480c3591d66c6e10b60']
builddependencies = [
('binutils', '2.34'),
('CMake', '3.18.0'),
('Bison', '3.6.4'),
('pkg-config', '0.29.2'),
('Perl', '5.32.0'),
]
dependencies = [
('Python', '3.8.5'),
('HDF5', '1.10.6', '-serial'),
('SWIG', '3.0.12', '-Python-%(pyver)s'),
('libpng', '1.6.37'),
('LibTIFF', '4.1.0'),
('expat', '2.2.9'),
('Eigen', '3.3.7'),
# ('ParaView', '5.8.1', '-Python-%(pyver)s'),
('tbb', '2020.3'),
('Qt5', '5.14.2'),
('OpenGL', '2020'),
('X11', '20200222'),
]
separate_build_dir = True
configopts = "-DCMAKE_BUILD_TYPE=Release "
configopts += "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON "
configopts += "-DBUILD_SHARED_LIBS=ON "
configopts += "-DBUILD_TESTING=OFF "
# configopts += "-DITK_FORBID_DOWNLOADS=ON "
configopts += "-DITKV4_COMPATIBILITY=ON "
configopts += "-DITK_LEGACY_SILENT=ON "
configopts += "-DITK_USE_SYSTEM_SWIG=ON "
configopts += "-DSWIG_EXECUTABLE=${EBROOTSWIG}/bin/swig "
configopts += "-DSWIG_DIR=${EBROOTSWIG} "
configopts += "-DITK_USE_SYSTEM_EIGEN=ON "
configopts += "-DEigen3_DIR=$EBROOTEIGEN/share/eigen3/cmake "
configopts += "-DITK_USE_SYSTEM_HDF5=ON "
configopts += "-DHDF5_DIR=$EBROOTHDF5 "
configopts += "-DITK_WRAP_PYTHON=ON "
configopts += "-DModule_ITKReview=ON "
# fails with ITK_WRAP_PYTON=ON, error, because vtkImage*.h cannot be found
# read: https://discourse.itk.org/t/problem-with-building-itk-with-module-itkvtkglue-on/2315
# code: https://github.com/InsightSoftwareConsortium/ITKVtkGlue/blob/itk-5.0.1/CMakeLists.txt#L81
# configopts="-DModule_ITKVtkGlue=ON ${configopts} "
# configopts="-DVTK_DIR=$EBROOTPARAVIEW/lib64/cmake/paraview-5.8/vtk ${configopts} "
# configopts="-DVTK_INCLUDE_DIRS=$EBROOTPARAVIEW/include/paraview-5.8 ${configopts} "
# configopts="-DVTK_LIBRARIES=$EBROOTPARAVIEW/lib64 ${configopts} "
preinstallopts = "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && "
modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']}
sanity_check_paths = {
'files': ['bin/itkTestDriver',
'lib/libITKVTK-%(version_major_minor)s.so',
'lib/libITKIOJPEG-%(version_major_minor)s.so',
'lib/libITKCommon-%(version_major_minor)s.so'],
'dirs': ['include/ITK-%(version_major_minor)s',
'lib/python%(pyshortver)s/site-packages',
'share'],
}
sanity_check_commands = [('python', "-c 'import %(namelower)s'")]
moduleclass = 'vis'
easyblock = 'CMakeMake'
name = 'ITK'
version = '5.1.2'
versionsuffix = '-Python-%(pyver)s'
homepage = 'https://itk.org'
description = """Insight Segmentation and Registration Toolkit (ITK) provides
an extensive suite of software tools for registering and segmenting
multidimensional imaging data."""
site_contacts = 'j.goebbert@fz-juelich.de'
toolchain = {'name': 'gompi', 'version': '2020'}
toolchainopts = {'pic': True, 'usempi': False}
source_urls = ['https://github.com/InsightSoftwareConsortium/ITK/archive/']
sources = ['v%(version)s.tar.gz']
checksums = ['651284ce6f68e8bd31db176a6b53f5679209a8ed5b6b5480c3591d66c6e10b60']
builddependencies = [
('binutils', '2.34'),
('CMake', '3.18.0'),
('Bison', '3.6.4'),
('pkg-config', '0.29.2'),
('Perl', '5.32.0'),
]
dependencies = [
('Python', '3.8.5'),
('HDF5', '1.10.6', '-serial'),
('SWIG', '3.0.12', '-Python-%(pyver)s'),
('libpng', '1.6.37'),
('LibTIFF', '4.1.0'),
('expat', '2.2.9'),
('Eigen', '3.3.7'),
# ('ParaView', '5.8.1', '-Python-%(pyver)s'),
('tbb', '2020.3'),
('Qt5', '5.14.2'),
('OpenGL', '2020'),
('X11', '20200222'),
]
separate_build_dir = True
configopts = "-DCMAKE_BUILD_TYPE=Release "
configopts += "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON "
configopts += "-DBUILD_SHARED_LIBS=ON "
configopts += "-DBUILD_TESTING=OFF "
# configopts += "-DITK_FORBID_DOWNLOADS=ON "
configopts += "-DITKV4_COMPATIBILITY=ON "
configopts += "-DITK_LEGACY_SILENT=ON "
configopts += "-DITK_USE_SYSTEM_SWIG=ON "
configopts += "-DSWIG_EXECUTABLE=${EBROOTSWIG}/bin/swig "
configopts += "-DSWIG_DIR=${EBROOTSWIG} "
configopts += "-DITK_USE_SYSTEM_EIGEN=ON "
configopts += "-DEigen3_DIR=$EBROOTEIGEN/share/eigen3/cmake "
configopts += "-DITK_USE_SYSTEM_HDF5=ON "
configopts += "-DHDF5_DIR=$EBROOTHDF5 "
configopts += "-DITK_WRAP_PYTHON=ON "
configopts += "-DModule_ITKReview=ON "
# fails with ITK_WRAP_PYTON=ON, error, because vtkImage*.h cannot be found
# read: https://discourse.itk.org/t/problem-with-building-itk-with-module-itkvtkglue-on/2315
# code: https://github.com/InsightSoftwareConsortium/ITKVtkGlue/blob/itk-5.0.1/CMakeLists.txt#L81
# configopts="-DModule_ITKVtkGlue=ON ${configopts} "
# configopts="-DVTK_DIR=$EBROOTPARAVIEW/lib64/cmake/paraview-5.8/vtk ${configopts} "
# configopts="-DVTK_INCLUDE_DIRS=$EBROOTPARAVIEW/include/paraview-5.8 ${configopts} "
# configopts="-DVTK_LIBRARIES=$EBROOTPARAVIEW/lib64 ${configopts} "
preinstallopts = "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && "
modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']}
sanity_check_paths = {
'files': ['bin/itkTestDriver',
'lib/libITKVTK-%(version_major_minor)s.so',
'lib/libITKIOJPEG-%(version_major_minor)s.so',
'lib/libITKCommon-%(version_major_minor)s.so'],
'dirs': ['include/ITK-%(version_major_minor)s',
'lib/python%(pyshortver)s/site-packages',
'share'],
}
sanity_check_commands = [('python', "-c 'import %(namelower)s'")]
moduleclass = 'vis'
easyblock = 'CMakeMake'
name = 'ITK'
version = '5.1.2'
versionsuffix = '-Python-%(pyver)s'
homepage = 'https://itk.org'
description = """Insight Segmentation and Registration Toolkit (ITK) provides
an extensive suite of software tools for registering and segmenting
multidimensional imaging data."""
site_contacts = 'j.goebbert@fz-juelich.de'
toolchain = {'name': 'gpsmpi', 'version': '2020'}
toolchainopts = {'pic': True, 'usempi': False}
source_urls = ['https://github.com/InsightSoftwareConsortium/ITK/archive/']
sources = ['v%(version)s.tar.gz']
checksums = ['651284ce6f68e8bd31db176a6b53f5679209a8ed5b6b5480c3591d66c6e10b60']
builddependencies = [
('binutils', '2.34'),
('CMake', '3.18.0'),
('Bison', '3.6.4'),
('pkg-config', '0.29.2'),
('Perl', '5.32.0'),
]
dependencies = [
('Python', '3.8.5'),
('HDF5', '1.10.6', '-serial'),
('SWIG', '3.0.12', '-Python-%(pyver)s'),
('libpng', '1.6.37'),
('LibTIFF', '4.1.0'),
('expat', '2.2.9'),
('Eigen', '3.3.7'),
# ('ParaView', '5.8.1', '-Python-%(pyver)s'),
('tbb', '2020.3'),
('Qt5', '5.14.2'),
('OpenGL', '2020'),
('X11', '20200222'),
]
separate_build_dir = True
configopts = "-DCMAKE_BUILD_TYPE=Release "
configopts += "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON "
configopts += "-DBUILD_SHARED_LIBS=ON "
configopts += "-DBUILD_TESTING=OFF "
# configopts += "-DITK_FORBID_DOWNLOADS=ON "
configopts += "-DITKV4_COMPATIBILITY=ON "
configopts += "-DITK_LEGACY_SILENT=ON "
configopts += "-DITK_USE_SYSTEM_SWIG=ON "
configopts += "-DSWIG_EXECUTABLE=${EBROOTSWIG}/bin/swig "
configopts += "-DSWIG_DIR=${EBROOTSWIG} "
configopts += "-DITK_USE_SYSTEM_EIGEN=ON "
configopts += "-DEigen3_DIR=$EBROOTEIGEN/share/eigen3/cmake "
configopts += "-DITK_USE_SYSTEM_HDF5=ON "
configopts += "-DHDF5_DIR=$EBROOTHDF5 "
configopts += "-DITK_WRAP_PYTHON=ON "
configopts += "-DModule_ITKReview=ON "
# fails with ITK_WRAP_PYTON=ON, error, because vtkImage*.h cannot be found
# read: https://discourse.itk.org/t/problem-with-building-itk-with-module-itkvtkglue-on/2315
# code: https://github.com/InsightSoftwareConsortium/ITKVtkGlue/blob/itk-5.0.1/CMakeLists.txt#L81
# configopts="-DModule_ITKVtkGlue=ON ${configopts} "
# configopts="-DVTK_DIR=$EBROOTPARAVIEW/lib64/cmake/paraview-5.8/vtk ${configopts} "
# configopts="-DVTK_INCLUDE_DIRS=$EBROOTPARAVIEW/include/paraview-5.8 ${configopts} "
# configopts="-DVTK_LIBRARIES=$EBROOTPARAVIEW/lib64 ${configopts} "
preinstallopts = "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && "
modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']}
sanity_check_paths = {
'files': ['bin/itkTestDriver',
'lib/libITKVTK-%(version_major_minor)s.so',
'lib/libITKIOJPEG-%(version_major_minor)s.so',
'lib/libITKCommon-%(version_major_minor)s.so'],
'dirs': ['include/ITK-%(version_major_minor)s',
'lib/python%(pyshortver)s/site-packages',
'share'],
}
sanity_check_commands = [('python', "-c 'import %(namelower)s'")]
moduleclass = 'vis'
name = 'Java'
version = '15.0.1'
homepage = 'http://openjdk.java.net'
description = """Java Platform, Standard Edition (Java SE) lets you develop and deploy
Java applications on desktops and servers."""
site_contacts = 'j.goebbert@fz-juelich.de'
toolchain = SYSTEM
source_urls = ['https://download.java.net/java/GA/jdk%(version)s/51f4f36ad4ef43e39d0dfdbaf6549e32/9/GPL/']
sources = ['openjdk-%(version)s_linux-x64_bin.tar.gz']
checksums = ['83ec3a7b1649a6b31e021cde1e58ab447b07fb8173489f27f427e731c89ed84a']
moduleclass = 'lang'
easyblock = 'ModuleRC'
name = 'Java'
version = '15'
homepage = 'https://java.com/'
description = """Java Platform, Standard Edition (Java SE) lets you develop and deploy
Java applications on desktops and servers."""
toolchain = SYSTEM
dependencies = [('Java', '%(version)s.0.1')]
moduleclass = 'lang'
diff -Naur jupyterlab-2.2.9.orig/401.html jupyterlab-2.2.9/401.html
--- jupyterlab-2.2.9.orig/401.html 1970-01-01 01:00:00.000000000 +0100
+++ jupyterlab-2.2.9/401.html 2020-12-11 23:24:45.301738818 +0100
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+ <meta http-equiv="Refresh" content="0; url=https://jupyter-jsc.fz-juelich.de/hub/logout?stopall=false&alldevices=false" />
+
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ <meta charset="utf-8">
+
+ <title>jupyter-jsc</title>
+ <meta http-equiv="X-UA-Compatible" content="chrome=1">
+ <meta property="og:image" content="/hub/static/images/mini_website.jpg">
+ <meta property="og:locale" content="en_US">
+ <meta property="og:site_name" content="jupyter-jsc">
+ <meta property="og:title" content="jupyter-jsc">
+ <meta property="og:type" content="website">
+ <meta property="og:url" content="https://jupyter-jsc.fz-juelich.de/">
+
+ <link rel="stylesheet" href="/hub/static/css/style.min.css" type="text/css">
+ <link rel="stylesheet" href="/hub/static/css/j4j_font.min.htm" type="text/css">
+ <link rel="stylesheet" href="/hub/static/css/j4j_base.min.css" type="text/css">
+ <link rel="stylesheet" href="/hub/static/css/j4j_base_header.min.css" type="text/css">
+ <link rel="stylesheet" href="/hub/static/css/j4j_base_footer.min.css" type="text/css">
+ <link rel="icon" href="/hub//static/images/favicon.svg" type="jpg/png">
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.css">
+ <link rel="stylesheet" href="/hub/static/css/j4j_page_home.min.css" type="text/css">
+ <link rel="stylesheet" href="/hub/static/css/spawn_style.css" type="text/css">
+
+<body>
+
+<div id="container">
+
+ <div id="header-background">
+ <div id="header">
+ <nav class="navbar navbar-default">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <span id="jupyterhub-logo" class="pull-left"><a href="https://www.fz-juelich.de/jsc" target="_blank"><img src="/hub/static/images/jsc.png" alt="JupyterHub" class="jpy-logo" title="Home"></a></span>
+ </div>
+
+ <div id="thenavbar">
+ <ul class="nav navbar-nav">
+
+ <li><a href="https://jupyter-jsc.fz-juelich.de/hub/start">Start</a></li>
+
+ <li id="navbarbtn-links" class="main-menu-btn menu-btn"><a>Links</a>
+ <div id="navbarmenu-links" class="menu-box">
+ <ul>
+ <li id="navbarbtn-links-1" class="menu-btn"><a>jupyter-jsc</a>
+ <div id="navbarmenu-links-1" class="menu-box menu-sub-box show-sub-header" style="">
+ <ul>
+ <li class=""><a href="https://jupyter-jsc.fz-juelich.de/nbviewer/github/kreuzert/Jupyter-JSC/blob/master/Extensions.ipynb">Extensions at jupyter-jsc</a></li>
+ <li class=""><a href="https://jupyter-jsc.fz-juelich.de/nbviewer/github/kreuzert/Jupyter-JSC/blob/master/FAQ.ipynb">HDFCloud FAQ</a></li>
+ <li class=""><a href="https://jupyter-jsc.fz-juelich.de/static/files/projects.html">Link Projects to Home</a></li>
+ <li class=""><a href="https://jupyter-jsc.fz-juelich.de/static/files/kernel.html">Setup your own kernel</a></li>
+ <li class=""><a target="_blank" href="https://www.unicore.eu/about-unicore/case-studies/jupyter-at-jsc/">jupyter-jsc at unicore.eu</a></li>
+ </ul>
+ </div>
+ </li>
+ <li id="navbarbtn-links-2" class="menu-btn"><a>Jupyter</a>
+ <div id="navbarmenu-links-2" class="menu-box menu-sub-box show-sub-header" style="">
+ <ul>
+ <li class=""><a target="_blank" href="https://www-jupyter.org/">Home</a></li>
+ <li class=""><a target="_blank" href="https://newsletter.jupyter.org/">Newsletter</a></li>
+ <li class=""><a target="_blank" href="https://www.youtube.com/watch?v=HW29067qVWk">Introduction Video</a></li>
+ <li class=""><a target="_blank" href="https://blog.jupyter.org/">Blog</a></li>
+ <li class=""><a target="_blank" href="https://jupyter.org/documentation.html">Documentation</a></li>
+ <li class=""><a target="_blank" href="https://www.oreilly.com/topics/jupyter">O'Reilly on Jupyter</a></li>
+ <li class=""><a target="_blank" href="https://twitter.com/projectjupyter">Twitter</a></li>
+ <li class=""><a target="_blank" href="https://github.com/trending/jupyter-notebook">Jupyter-Notebooks</a></li>
+ </ul>
+ </div>
+ </li>
+ <li id="navbarbtn-links-3" class="menu-btn"><a>JSC</a>
+ <div id="navbarmenu-links-3" class="menu-box menu-sub-box show-sub-header" style="">
+ <ul>
+ <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/Expertise/Supercomputers/JUWELS/JUWELS_node.html">JUWELS</a></li>
+ <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/Expertise/Supercomputers/JURECA/JURECA_node.html">JURECA</a></li>
+ <li class=""><a target="_blank" href="https://hbp-hpc-platform.fz-juelich.de/?page_id=1073">JURON</a></li>
+ <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/News/Newsletter/newsletter_node.html">Newsletter</a></li>
+ <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/News/Events/events_node.html">Events</a></li>
+ <li class=""><a target="_blank" href="https://twitter.com/fzj_jsc">Twitter</a></li>
+ </ul>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </li>
+
+ </ul>
+ </div>
+ </div>
+ </nav>
+ </div>
+ </div>
+
+<div id="body">
+<div class="background-wrapper">
+ <div class="content" id="JupyterLabs-div">
+
+ <!--<center><h2 style="color:red">jupyter-jsc maintenance: 25-02-2020 - 26-02-2020</h2></center>-->
+ <h2>
+ The access token of your browser session to the running JupyterLab has expired.
+ </h2>
+ <p>
+ Unfortunately you have to log out and log in again from the Jupyter-JSC to regain access permission.<br>
+ <a href="https://jupyter-jsc.fz-juelich.de/hub/logout?stopall=false&alldevices=false"> Logout now </a>
+ </p>
+
+ </div>
+</div>
+</div>
+
+<div class="footer">
+ <div class="footer-top-background">
+ </div>
+ <div class="footer-bottom-background">
+ <div class="footer-bottom">
+ <div class="footer-links">
+ <span>© Forschungszentrum Jülich</span>
+ <a href="https://jupyter-jsc.fz-juelich.de/hub/imprint">Imprint</a>
+ <a href="https://jupyter-jsc.fz-juelich.de/hub/privacy">Privacy Policy</a>
+ <a href="mailto:ds-support@fz-juelich.de?subject=jupyter-jsc Support&amp;body=Please describe your problem here. (english or german)">Support</a>
+ <a href="https://jupyter-jsc.fz-juelich.de/hub/terms">Terms of Service</a>
+ </div>
+ <a href="https://www.helmholtz.de/en/" target="_blank"><img class="helmholtz-logo" src="/hub/static/images/helmholtz.png"></a>
+ </div>
+ </div>
+</div>
+
+</div> <!-- container -->
+
+</body></html>
diff -Naur jupyter_contrib_nbextensions.orig/CHANGELOG.md jupyter_contrib_nbextensions/CHANGELOG.md
--- jupyter_contrib_nbextensions.orig/CHANGELOG.md 2020-11-22 12:43:10.086824740 +0100
+++ jupyter_contrib_nbextensions/CHANGELOG.md 2020-11-22 12:47:11.839564000 +0100
@@ -21,6 +21,9 @@
This is where each new PR to the project should add a summary of its changes,
which makes it much easier to fill in each release's changelog :)
+- Replace `template_path` with `template_paths` [#1532](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/pull/1532). Nbconvert 6.0 replaced `template_path` with `template_paths` (see https://nbconvert.readthedocs.io/en/latest/changelog.html#significant-changes). This change in Nbconvert 6.0 causes errors in jupyter_latex_envs and in jupyter_contrib_nbextensions (see [#1529](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/issues/1529).
+- Update `install_requires` list in `setup.py` with 'nbconvert >=6.0'
+
0.5.1
-----
diff -Naur jupyter_contrib_nbextensions.orig/setup.py jupyter_contrib_nbextensions/setup.py
--- jupyter_contrib_nbextensions.orig/setup.py 2020-11-22 12:43:10.325780000 +0100
+++ jupyter_contrib_nbextensions/setup.py 2020-11-22 12:47:11.842264000 +0100
@@ -67,7 +67,7 @@
'jupyter_highlight_selected_word >=0.1.1',
'jupyter_latex_envs >=1.3.8',
'jupyter_nbextensions_configurator >=0.4.0',
- 'nbconvert >=4.2',
+ 'nbconvert >=6.0',
'notebook >=4.0',
'pyyaml',
'tornado',
@@ -81,7 +81,7 @@
'pip',
'requests',
],
- 'test:python_version == "2.7"': [
+ 'test:python_version == "3.8"': [
'mock',
],
},
diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/config_scripts/highlight_html_cfg.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/config_scripts/highlight_html_cfg.py
--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/config_scripts/highlight_html_cfg.py 2020-11-22 12:43:10.330209000 +0100
+++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/config_scripts/highlight_html_cfg.py 2020-11-22 12:47:11.799365000 +0100
@@ -7,7 +7,7 @@
c = get_config() # noqa
c.NbConvertApp.export_format = "html"
-c.Exporter.template_path = [
+c.Exporter.template_paths = [
'.',
jupyter_contrib_nbextensions.nbconvert_support.templates_directory(),
os.path.join(jcnbe_dir, 'nbextensions', 'highlighter')
diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/config_scripts/highlight_latex_cfg.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/config_scripts/highlight_latex_cfg.py
--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/config_scripts/highlight_latex_cfg.py 2020-11-22 12:43:10.331124000 +0100
+++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/config_scripts/highlight_latex_cfg.py 2020-11-22 12:47:11.801863000 +0100
@@ -7,7 +7,7 @@
c = get_config() # noqa
c.NbConvertApp.export_format = "latex"
-c.Exporter.template_path = [
+c.Exporter.template_paths = [
'.',
jupyter_contrib_nbextensions.nbconvert_support.templates_directory(),
os.path.join(jcnbe_dir, 'nbextensions', 'highlighter')
diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/install.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/install.py
--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/install.py 2020-11-22 12:43:10.332127000 +0100
+++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/install.py 2020-11-22 12:47:11.804683000 +0100
@@ -124,7 +124,7 @@
if logger:
logger.info('-- Configuring nbconvert template path')
# our templates directory
- _update_config_list(config, 'Exporter.template_path', [
+ _update_config_list(config, 'Exporter.template_paths', [
'.',
jupyter_contrib_nbextensions.nbconvert_support.templates_directory(),
], install)
diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/migrate.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/migrate.py
--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/migrate.py 2020-11-22 12:43:10.333126000 +0100
+++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/migrate.py 2020-11-22 12:47:11.807881000 +0100
@@ -128,7 +128,7 @@
config = Config(cm.get(config_basename))
if config and logger:
logger.info('- Removing old config values from {}'.format(config_path))
- _update_config_list(config, 'Exporter.template_path', [
+ _update_config_list(config, 'Exporter.template_paths', [
'.', os.path.join(jupyter_data_dir(), 'templates'),
], False)
_update_config_list(config, 'Exporter.preprocessors', [
diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbconvert_support/exporter_inliner.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbconvert_support/exporter_inliner.py
--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbconvert_support/exporter_inliner.py 2020-11-22 12:43:10.337543000 +0100
+++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbconvert_support/exporter_inliner.py 2020-11-22 12:47:11.811491000 +0100
@@ -39,8 +39,8 @@
templates_directory)
contrib_templates_dir = templates_directory()
- template_path = c.TemplateExporter.setdefault('template_path', [])
- if contrib_templates_dir not in template_path:
- template_path.append(contrib_templates_dir)
+ template_paths = c.TemplateExporter.setdefault('template_paths', [])
+ if contrib_templates_dir not in template_paths:
+ template_paths.append(contrib_templates_dir)
return c
diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbconvert_support/toc2.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbconvert_support/toc2.py
--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbconvert_support/toc2.py 2020-11-22 12:45:58.854592000 +0100
+++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbconvert_support/toc2.py 2020-11-22 12:47:11.814530000 +0100
@@ -52,7 +52,7 @@
templates_directory)
c.merge(super(TocExporter, self).default_config)
- c.TemplateExporter.template_path = [
+ c.TemplateExporter.template_paths = [
'.',
templates_directory(),
]
diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbextensions/runtools/readme.md jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbextensions/runtools/readme.md
--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbextensions/runtools/readme.md 2020-11-22 12:43:10.871469000 +0100
+++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbextensions/runtools/readme.md 2020-11-22 12:47:11.816660000 +0100
@@ -78,7 +78,7 @@
```
The template needs to be in a path where nbconvert can find it. This can be your local path or specified in
-`jupyter_nbconvert_config` or `jupyter_notebook_config` as `c.Exporter.template_path`, see [Jupyter docs](https://jupyter-notebook.readthedocs.io/en/latest/config.html).
+`jupyter_nbconvert_config` or `jupyter_notebook_config` as `c.Exporter.template_paths`, see [Jupyter docs](https://jupyter-notebook.readthedocs.io/en/latest/config.html).
For HTML export a template is provided as `nbextensions.tpl` in the `jupyter_contrib_nbextensions` templates directory. Alternatively you can create your own template:
```
diff -Naur jupyter_latex_envs.orig/src/latex_envs/latex_envs.py jupyter_latex_envs/src/latex_envs/latex_envs.py
--- jupyter_latex_envs.orig/src/latex_envs/latex_envs.py 2020-11-22 17:04:43.617982112 +0100
+++ jupyter_latex_envs/src/latex_envs/latex_envs.py 2020-11-22 17:05:35.063217000 +0100
@@ -301,12 +301,12 @@
)
c.merge(super(LenvsHTMLExporter, self).default_config)
if os.path.isdir(os.path.join(os.path.dirname(__file__), 'templates')):
- c.TemplateExporter.template_path = ['.',
+ c.TemplateExporter.template_paths = ['.',
os.path.join(os.path.dirname(__file__), 'templates')]
else:
from jupyter_contrib_nbextensions.nbconvert_support import (
templates_directory)
- c.TemplateExporter.template_path = ['.', templates_directory()]
+ c.TemplateExporter.template_paths = ['.', templates_directory()]
return c
@@ -364,12 +364,12 @@
)
c.merge(super(LenvsSlidesExporter, self).default_config)
if os.path.isdir(os.path.join(os.path.dirname(__file__), 'templates')):
- c.TemplateExporter.template_path = ['.',
+ c.TemplateExporter.template_paths = ['.',
os.path.join(os.path.dirname(__file__), 'templates')]
else:
from jupyter_contrib_nbextensions.nbconvert_support import (
templates_directory)
- c.TemplateExporter.template_path = ['.', templates_directory()]
+ c.TemplateExporter.template_paths = ['.', templates_directory()]
return c
@@ -483,12 +483,12 @@
c.merge(super(LenvsLatexExporter, self).default_config)
if os.path.isdir(os.path.join(os.path.dirname(__file__), 'templates')):
- c.TemplateExporter.template_path = ['.',
+ c.TemplateExporter.template_paths = ['.',
os.path.join(os.path.dirname(__file__), 'templates')]
else:
from jupyter_contrib_nbextensions.nbconvert_support import (
templates_directory)
- c.TemplateExporter.template_path = ['.', templates_directory()]
+ c.TemplateExporter.template_paths = ['.', templates_directory()]
return c
def tocrefrm(self, text):
diff -Naur jupyterhub-1.1.0.orig/jupyterhub/services/auth.py jupyterhub-1.1.0/jupyterhub/services/auth.py
--- jupyterhub-1.1.0.orig/jupyterhub/services/auth.py 2019-12-03 10:13:48.000000000 +0100
+++ jupyterhub-1.1.0/jupyterhub/services/auth.py 2020-12-23 08:24:38.868452725 +0100
@@ -28,6 +28,7 @@
from tornado.log import app_log
from tornado.web import HTTPError
from tornado.web import RequestHandler
+from traitlets import Bool
from traitlets import default
from traitlets import Dict
from traitlets import Instance
@@ -191,6 +192,29 @@
""",
).tag(config=True)
+ session_id_required = Bool(
+ os.getenv('JUPYTERHUB_SESSION_ID_REQUIRED', 'false').lower()=="true",
+ help="""
+ Blocks any requests, if there's no jupyterhub-session-id cookie.
+ """,
+ ).tag(config=True)
+
+ session_id_required_user = Bool(
+ os.getenv('JUPYTERHUB_SESSION_ID_REQUIRED_USER', 'false').lower()=="true",
+ help="""
+ Blocks any requests to /user, if there's no jupyterhub-session-id cookie.
+ """,
+ ).tag(config=True)
+
+ last_session_id_validation = 0
+ last_session_id_validation_result = None
+
+ last_session_id_validation_cache_time = Integer(
+ int(os.getenv('JUPYTERHUB_SESSION_ID_CACHE_TIME', "10")),
+ help="""The maximum time (in seconds) to cache the Hub's responses for session_id verification. Default is 10.
+ """,
+ ).tag(config=True)
+
hub_prefix = Unicode(
'/hub/',
help="""The URL prefix for the Hub itself.
@@ -461,6 +485,18 @@
"""
return handler.get_cookie('jupyterhub-session-id', '')
+ def validate_session_id(self, username, session_id):
+ if time.time() - self.last_session_id_validation > self.last_session_id_validation_cache_time:
+ self.last_session_id_validation = int(time.time())
+ url = url_path_join(
+ self.api_url, "authorizations/sessionid", quote(username, safe=''),
+ )
+ headers = {"sessionid": session_id}
+ self.last_session_id_validation_result = self._api_request(
+ 'GET', url, allow_404=True, headers=headers
+ )
+ return self.last_session_id_validation_result
+
def get_user(self, handler):
"""Get the Hub user for a given tornado handler.
@@ -484,16 +520,33 @@
handler._cached_hub_user = user_model = None
session_id = self.get_session_id(handler)
- # check token first
- token = self.get_token(handler)
- if token:
- user_model = self.user_for_token(token, session_id=session_id)
+ if self.session_id_required and not session_id:
+ app_log.info("Unauthorized access. Only users with a session id are allowed.")
+ return {'name': '<session_id_required>', 'kind': 'User'}
+ elif self.session_id_required_user and not session_id and handler.request.uri.startswith('/user'):
+ app_log.info("Unauthorized access. Only users with a session id are allowed to access /user.")
+ return {'name': '<session_id_required>', 'kind': 'User'}
+ elif self.session_id_required or ( self.session_id_required_user and handler.request.uri.startswith('/user')):
+ token = self.get_token(handler)
+ if token:
+ user_model = self.user_for_token(token)
+ if user_model:
+ handler._token_authenticated = True
+ if user_model is None:
+ user_model = self._get_user_cookie(handler)
if user_model:
- handler._token_authenticated = True
+ user_model = self.validate_session_id(user_model.get('name', ''), session_id)
+ else:
+ # check token first
+ token = self.get_token(handler)
+ if token:
+ user_model = self.user_for_token(token, session_id=session_id)
+ if user_model:
+ handler._token_authenticated = True
- # no token, check cookie
- if user_model is None:
- user_model = self._get_user_cookie(handler)
+ # no token, check cookie
+ if user_model is None:
+ user_model = self._get_user_cookie(handler)
# cache result
handler._cached_hub_user = user_model
@@ -904,10 +957,16 @@
# tries to redirect to login URL, 403 will be raised instead.
# This is not the best, but avoids problems that can be caused
# when get_current_user is allowed to raise.
- def raise_on_redirect(*args, **kwargs):
- raise HTTPError(
- 403, "{kind} {name} is not allowed.".format(**user_model)
- )
+ if user_model.get('name', '') == '<session_id_required>':
+ def raise_on_redirect(*args, **kwargs):
+ raise HTTPError(
+ 401, "Please login to proceed."
+ )
+ else:
+ def raise_on_redirect(*args, **kwargs):
+ raise HTTPError(
+ 403, "{kind} {name} is not allowed.".format(**user_model)
+ )
self.redirect = raise_on_redirect
return
diff
--- jupyterlab-gitlab-2.0.0.orig/schema/drive.json 2019-05-02 08:22:45.219143000 +0200
+++ jupyterlab-gitlab-2.0.0/schema/drive.json 2019-05-02 08:25:15.392631000 +0200
@@ -6,8 +6,8 @@
"properties": {
"baseUrl": {
"type": "string",
- "title": "The GitLab Base URL",
- "default": "https://gitlab.com"
+ "title": "JSC GitLab Base URL",
+ "default": "https://gitlab.version.fz-juelich.de"
},
"accessToken": {
"type": "string",
@@ -18,7 +18,7 @@
"defaultRepo": {
"type": "string",
"title": "Default Repository",
- "default": ""
+ "default": "jupyter4jsc/j4j_notebooks"
}
},
"type": "object"
diff
--- jupyterlab-github-2.0.0.orig/schema/drive.json 2018-10-10 21:14:53.986184891 +0200
+++ jupyterlab_github-2.0.0/schema/drive.json 2018-10-11 00:28:34.846777384 +0200
@@ -18,7 +18,7 @@
"defaultRepo": {
"type": "string",
"title": "Default Repository",
- "default": ""
+ "default": "FZJ-JSC/jupyter-jsc-notebooks"
}
},
"type": "object"
diff -Naur jupyter-lmod-2.0.2.orig/jupyterlab/package.json jupyter-lmod-2.0.2/jupyterlab/package.json
--- jupyter-lmod-2.0.2.orig/jupyterlab/package.json 2020-11-25 16:19:57.000000000 +0100
+++ jupyter-lmod-2.0.2/jupyterlab/package.json 2020-12-29 16:50:58.803504000 +0100
@@ -31,10 +31,12 @@
"prepare": "npm run clean && npm run build"
},
"dependencies": {
- "@jupyterlab/application": ">=2.0.0",
+ "@jupyterlab/application": "^2.0.0",
+ "@jupyterlab/apputils": "^2.1.0",
"@jupyterlab/launcher": "^2.1.0"
},
"devDependencies": {
+ "@types/react": "^16.9.16",
"rimraf": "~2.6.2",
"typescript": "~3.7.3"
},
diff -Naur jupyter-lmod-2.0.1/jupyterlab/src/index.ts jupyter-lmod-2.0.1_devel/jupyterlab/src/index.ts
--- jupyter-lmod-2.0.1/jupyterlab/src/index.ts 2020-10-05 17:08:01.000000000 +0200
+++ jupyter-lmod-2.0.1_devel/jupyterlab/src/index.ts 2020-11-25 11:55:24.000000000 +0100
@@ -244,7 +244,13 @@
const namespace = 'server-proxy';
const command = namespace + ':' + 'open';
for (let server_process of data.server_processes) {
- const url = PageConfig.getBaseUrl() + server_process.name + '/';
+
+ let urlfile = '';
+ if (server_process.launcher_entry.urlfile) {
+ urlfile = server_process.launcher_entry.urlfile;
+ }
+ const url = PageConfig.getBaseUrl() + server_process.name + '/' + urlfile;
+
const title = server_process.launcher_entry.title;
const newBrowserTab = server_process.new_browser_tab;
const id = namespace + ':' + server_process.name;
diff -Naur jupyter-lmod-2.0.1/jupyterlmod/static/main.js jupyter-lmod-2.0.1_devel/jupyterlmod/static/main.js
--- jupyter-lmod-2.0.1/jupyterlmod/static/main.js 2020-10-05 17:08:01.000000000 +0200
+++ jupyter-lmod-2.0.1_devel/jupyterlmod/static/main.js 2020-11-25 11:55:24.000000000 +0100
@@ -316,10 +316,14 @@
.addClass('new-' + server_process.name);
/* create our list item's link */
+ let urlfile = '';
+ if (server_process.launcher_entry.urlfile) {
+ urlfile = server_process.launcher_entry.urlfile;
+ }
let entry_link = $('<a>')
.attr('role', 'menuitem')
.attr('tabindex', '-1')
- .attr('href', base_url + server_process.name + '/')
+ .attr('href', base_url + server_process.name + '/' + urlfile)
.attr('target', '_blank')
.text(server_process.launcher_entry.title);
diff -Naur jupyter-server-proxy.orig/jupyterlab-server-proxy/src/index.ts jupyter-server-proxy/jupyterlab-server-proxy/src/index.ts
--- jupyter-server-proxy.orig/jupyterlab-server-proxy/src/index.ts 2020-11-19 06:40:34.521630000 +0100
+++ jupyter-server-proxy/jupyterlab-server-proxy/src/index.ts 2020-11-19 06:41:35.023864000 +0100
@@ -79,8 +79,11 @@
if (!server_process.launcher_entry.enabled) {
continue;
}
-
- const url = PageConfig.getBaseUrl() + server_process.name + '/';
+ var urlfile = '';
+ if (server_process.launcher_entry.urlfile) {
+ urlfile = server_process.launcher_entry.urlfile;
+ }
+ const url = PageConfig.getBaseUrl() + server_process.name + '/' + urlfile;
const title = server_process.launcher_entry.title;
const newBrowserTab = server_process.new_browser_tab;
const id = namespace + ':' + server_process.name;
diff -Naur jupyter-server-proxy.orig/jupyter_server_proxy/api.py jupyter-server-proxy/jupyter_server_proxy/api.py
--- jupyter-server-proxy.orig/jupyter_server_proxy/api.py 2020-11-19 06:40:34.516286000 +0100
+++ jupyter-server-proxy/jupyter_server_proxy/api.py 2020-11-19 06:41:35.015090000 +0100
@@ -19,7 +19,8 @@
'name': sp.name,
'launcher_entry': {
'enabled': sp.launcher_entry.enabled,
- 'title': sp.launcher_entry.title
+ 'title': sp.launcher_entry.title,
+ 'urlfile': sp.launcher_entry.urlfile,
},
'new_browser_tab' : sp.new_browser_tab
}
diff -Naur jupyter-server-proxy.orig/jupyter_server_proxy/config.py jupyter-server-proxy/jupyter_server_proxy/config.py
--- jupyter-server-proxy.orig/jupyter_server_proxy/config.py 2020-11-19 06:40:34.516753000 +0100
+++ jupyter-server-proxy/jupyter_server_proxy/config.py 2020-11-19 06:41:35.016181000 +0100
@@ -99,7 +99,7 @@
))
return handlers
-LauncherEntry = namedtuple('LauncherEntry', ['enabled', 'icon_path', 'title'])
+LauncherEntry = namedtuple('LauncherEntry', ['enabled', 'icon_path', 'title', 'urlfile'])
ServerProcess = namedtuple('ServerProcess', [
'name', 'command', 'environment', 'timeout', 'absolute_url', 'port', 'mappath', 'launcher_entry', 'new_browser_tab'])
@@ -116,7 +116,8 @@
launcher_entry=LauncherEntry(
enabled=le.get('enabled', True),
icon_path=le.get('icon_path'),
- title=le.get('title', name)
+ title=le.get('title', name),
+ urlfile=le.get('urlfile', ''),
),
new_browser_tab=server_process_config.get('new_browser_tab', True)
)
@@ -175,6 +176,10 @@
title
Title to be used for the launcher entry. Defaults to the name of the server if missing.
+ urlfile
+ URL file name and URL parameters to be added to the base URL of the launcher entry.
+ Default is none.
+
new_browser_tab
Set to True (default) to make the proxied server interface opened as a new browser tab. Set to False
to have it open a new JupyterLab tab. This has no effect in classic notebook.
diff -Naur jupyter-server-proxy.orig/jupyter_server_proxy/static/tree.js jupyter-server-proxy/jupyter_server_proxy/static/tree.js
--- jupyter-server-proxy.orig/jupyter_server_proxy/static/tree.js 2020-11-19 06:40:34.519694000 +0100
+++ jupyter-server-proxy/jupyter_server_proxy/static/tree.js 2020-11-19 06:41:35.020051000 +0100
@@ -33,10 +33,14 @@
.addClass('new-' + server_process.name);
/* create our list item's link */
+ var urlfile = '';
+ if (server_process.launcher_entry.urlfile) {
+ urlfile = server_process.launcher_entry.urlfile;
+ }
var $entry_link = $('<a>')
.attr('role', 'menuitem')
.attr('tabindex', '-1')
- .attr('href', base_url + server_process.name + '/')
+ .attr('href', base_url + server_process.name + '/' + urlfile)
.attr('target', '_blank')
.text(server_process.launcher_entry.title);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment