jupyverse 0.4.2__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jupyverse-0.4.2 → jupyverse-0.5.1}/.github/workflows/check-release.yml +1 -1
- {jupyverse-0.4.2 → jupyverse-0.5.1}/.github/workflows/test.yml +5 -5
- {jupyverse-0.4.2 → jupyverse-0.5.1}/.pre-commit-config.yaml +2 -2
- {jupyverse-0.4.2 → jupyverse-0.5.1}/CHANGELOG.md +36 -2
- {jupyverse-0.4.2 → jupyverse-0.5.1}/CONTRIBUTING.md +1 -1
- {jupyverse-0.4.2 → jupyverse-0.5.1}/PKG-INFO +9 -9
- {jupyverse-0.4.2 → jupyverse-0.5.1}/README.md +3 -3
- jupyverse-0.5.1/binder/jupyter_notebook_config.py +44 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/binder/postBuild +1 -1
- {jupyverse-0.4.2 → jupyverse-0.5.1}/config.yaml +2 -2
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/install.md +9 -9
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/lab.md +1 -1
- jupyverse-0.5.1/docs/plugins/notebook.md +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/usage/single_user.md +1 -1
- jupyverse-0.5.1/jupyverse/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/__init__.py +1 -1
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/cli.py +7 -2
- {jupyverse-0.4.2/jupyverse_api/jupyverse_api/retrolab → jupyverse-0.5.1/jupyverse_api/jupyverse_api/notebook}/__init__.py +6 -6
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/pyproject.toml +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/mkdocs.yml +1 -1
- jupyverse-0.5.1/plugins/auth/fps_auth/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/fps_auth/routes.py +9 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/pyproject.toml +1 -1
- jupyverse-0.5.1/plugins/auth_fief/fps_auth_fief/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +1 -1
- jupyverse-0.5.1/plugins/contents/fps_contents/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/contents/fps_contents/fileid.py +10 -8
- jupyverse-0.5.1/plugins/frontend/fps_frontend/__init__.py +1 -0
- jupyverse-0.5.1/plugins/jupyterlab/fps_jupyterlab/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/jupyterlab/fps_jupyterlab/routes.py +2 -2
- jupyverse-0.5.1/plugins/kernels/fps_kernels/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_driver/driver.py +5 -2
- jupyverse-0.5.1/plugins/lab/README.md +3 -0
- jupyverse-0.5.1/plugins/lab/fps_lab/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/lab/fps_lab/routes.py +9 -4
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/lab/pyproject.toml +2 -1
- jupyverse-0.5.1/plugins/login/fps_login/__init__.py +1 -0
- jupyverse-0.5.1/plugins/nbconvert/fps_nbconvert/__init__.py +1 -0
- jupyverse-0.5.1/plugins/noauth/fps_noauth/__init__.py +1 -0
- jupyverse-0.5.1/plugins/notebook/README.md +3 -0
- jupyverse-0.5.1/plugins/notebook/fps_notebook/__init__.py +1 -0
- {jupyverse-0.4.2/plugins/retrolab/fps_retrolab → jupyverse-0.5.1/plugins/notebook/fps_notebook}/main.py +5 -5
- {jupyverse-0.4.2/plugins/retrolab/fps_retrolab → jupyverse-0.5.1/plugins/notebook/fps_notebook}/routes.py +47 -46
- {jupyverse-0.4.2/plugins/retrolab → jupyverse-0.5.1/plugins/notebook}/pyproject.toml +6 -6
- jupyverse-0.5.1/plugins/resource_usage/fps_resource_usage/__init__.py +1 -0
- jupyverse-0.5.1/plugins/terminals/fps_terminals/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/terminals/fps_terminals/server.py +2 -1
- jupyverse-0.5.1/plugins/webdav/fps_webdav/__init__.py +1 -0
- jupyverse-0.5.1/plugins/yjs/fps_yjs/__init__.py +1 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ydocs/ybasedoc.py +2 -2
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywidgets/widgets.py +7 -2
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/pyproject.toml +2 -1
- {jupyverse-0.4.2 → jupyverse-0.5.1}/pyproject.toml +12 -12
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/test_server.py +1 -1
- jupyverse-0.4.2/binder/jupyter_notebook_config.py +0 -44
- jupyverse-0.4.2/docs/plugins/retrolab.md +0 -1
- jupyverse-0.4.2/jupyverse/__init__.py +0 -1
- jupyverse-0.4.2/plugins/auth/fps_auth/__init__.py +0 -1
- jupyverse-0.4.2/plugins/auth_fief/fps_auth_fief/__init__.py +0 -1
- jupyverse-0.4.2/plugins/contents/fps_contents/__init__.py +0 -1
- jupyverse-0.4.2/plugins/frontend/fps_frontend/__init__.py +0 -1
- jupyverse-0.4.2/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -1
- jupyverse-0.4.2/plugins/kernels/fps_kernels/__init__.py +0 -1
- jupyverse-0.4.2/plugins/lab/README.md +0 -3
- jupyverse-0.4.2/plugins/lab/fps_lab/__init__.py +0 -1
- jupyverse-0.4.2/plugins/login/fps_login/__init__.py +0 -1
- jupyverse-0.4.2/plugins/nbconvert/fps_nbconvert/__init__.py +0 -1
- jupyverse-0.4.2/plugins/noauth/fps_noauth/__init__.py +0 -1
- jupyverse-0.4.2/plugins/resource_usage/fps_resource_usage/__init__.py +0 -1
- jupyverse-0.4.2/plugins/retrolab/README.md +0 -3
- jupyverse-0.4.2/plugins/retrolab/fps_retrolab/__init__.py +0 -1
- jupyverse-0.4.2/plugins/terminals/fps_terminals/__init__.py +0 -1
- jupyverse-0.4.2/plugins/webdav/fps_webdav/__init__.py +0 -1
- jupyverse-0.4.2/plugins/yjs/fps_yjs/__init__.py +0 -1
- {jupyverse-0.4.2 → jupyverse-0.5.1}/.devcontainer/devcontainer.json +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/.devcontainer/requirements.txt +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/.gitignore +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/binder/environment.yml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/binder/start +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/index.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/jupyter.svg +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/auth.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/contents.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/frontend.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/jupyterlab.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/kernels.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/login.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/nbconvert.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/resource_usage.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/terminals.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/plugins/yjs.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/usage/microservices.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/docs/usage/multi_user.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/app/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/auth/models.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/contents/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/contents/models.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/kernels/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/kernels/models.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/lab/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/login/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/main/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/terminals/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/yjs/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/notebooks/admin_users.ipynb +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/notebooks/admin_users.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/fps_auth/backends.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/fps_auth/config.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/fps_auth/db.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/fps_auth/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/fps_auth/models.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth/fps_auth/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_fief/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_fief/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_fief/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_fief/fps_auth_fief/backend.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_fief/fps_auth_fief/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_fief/fps_auth_fief/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_fief/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/auth_jupyterhub/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/contents/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/contents/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/contents/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/contents/fps_contents/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/contents/fps_contents/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/contents/fps_contents/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/contents/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/frontend/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/frontend/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/frontend/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/frontend/fps_frontend/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/frontend/fps_frontend/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/frontend/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/jupyterlab/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/jupyterlab/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/jupyterlab/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/jupyterlab/fps_jupyterlab/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/jupyterlab/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_driver/connect.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_driver/message.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_server/message.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/kernel_server/server.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/fps_kernels/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/kernels/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/lab/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/lab/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/lab/fps_lab/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/lab/fps_lab/static/favicon.ico +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/index.html +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/logo/github.svg +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/logo/logo.png +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/fps_login/static/style/index.css +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/login/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/nbconvert/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/nbconvert/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/nbconvert/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/nbconvert/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/noauth/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/noauth/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/noauth/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/noauth/fps_noauth/backends.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/noauth/fps_noauth/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/noauth/fps_noauth/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/noauth/pyproject.toml +0 -0
- {jupyverse-0.4.2/plugins/retrolab → jupyverse-0.5.1/plugins/notebook}/COPYING.md +0 -0
- {jupyverse-0.4.2/plugins/retrolab → jupyverse-0.5.1/plugins/notebook}/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/resource_usage/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/resource_usage/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/resource_usage/fps_resource_usage/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/resource_usage/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/terminals/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/terminals/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/terminals/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/terminals/fps_terminals/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/terminals/fps_terminals/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/terminals/fps_terminals/win_server.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/terminals/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/webdav/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/webdav/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/webdav/fps_webdav/config.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/webdav/fps_webdav/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/webdav/fps_webdav/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/webdav/fps_webdav/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/webdav/pyproject.toml +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/webdav/tests/test_webdav.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/COPYING.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/MANIFEST.in +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/README.md +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/main.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/py.typed +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/routes.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ydocs/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ydocs/utils.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ydocs/yblob.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ydocs/yfile.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ydocs/ynotebook.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ydocs/yunicode.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/pytest.ini +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/conftest.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/data/notebook0.ipynb +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/data/notebook1.ipynb +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/test_app.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/test_auth.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/test_contents.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/test_execute.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/test_kernels.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/test_settings.py +0 -0
- {jupyverse-0.4.2 → jupyverse-0.5.1}/tests/utils.py +0 -0
@@ -47,7 +47,7 @@ jobs:
|
|
47
47
|
pip install -e jupyverse_api
|
48
48
|
pip install -e plugins/frontend
|
49
49
|
pip install -e plugins/jupyterlab
|
50
|
-
pip install -e plugins/
|
50
|
+
pip install -e plugins/notebook
|
51
51
|
pip install -e plugins/contents
|
52
52
|
pip install -e plugins/kernels
|
53
53
|
pip install -e plugins/terminals
|
@@ -21,7 +21,7 @@ jobs:
|
|
21
21
|
uses: actions/checkout@v3
|
22
22
|
- uses: actions/setup-python@v4
|
23
23
|
with:
|
24
|
-
python-version: '3.
|
24
|
+
python-version: '3.12'
|
25
25
|
cache: 'pip'
|
26
26
|
- name: Install hatch
|
27
27
|
run: |
|
@@ -32,9 +32,9 @@ jobs:
|
|
32
32
|
hatch run dev.jupyterlab-noauth:typecheck
|
33
33
|
hatch run dev.jupyterlab-auth:typecheck
|
34
34
|
hatch run dev.jupyterlab-auth_fief:typecheck
|
35
|
-
hatch run dev.
|
36
|
-
hatch run dev.
|
37
|
-
hatch run dev.
|
35
|
+
hatch run dev.notebook-noauth:typecheck
|
36
|
+
hatch run dev.notebook-auth:typecheck
|
37
|
+
hatch run dev.notebook-auth_fief:typecheck
|
38
38
|
|
39
39
|
test:
|
40
40
|
name: Tests
|
@@ -43,7 +43,7 @@ jobs:
|
|
43
43
|
fail-fast: false
|
44
44
|
matrix:
|
45
45
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
46
|
-
python-version: [ '3.8', '3.9', '3.10', '3.11' ]
|
46
|
+
python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ]
|
47
47
|
|
48
48
|
steps:
|
49
49
|
- name: Checkout
|
@@ -1,6 +1,6 @@
|
|
1
1
|
repos:
|
2
2
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
3
|
-
rev: v4.
|
3
|
+
rev: v4.6.0
|
4
4
|
hooks:
|
5
5
|
- id: end-of-file-fixer
|
6
6
|
- id: check-case-conflict
|
@@ -16,7 +16,7 @@ repos:
|
|
16
16
|
- id: trailing-whitespace
|
17
17
|
|
18
18
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
19
|
-
rev: v0.1
|
19
|
+
rev: v0.4.1
|
20
20
|
hooks:
|
21
21
|
- id: ruff
|
22
22
|
args: ["--fix"]
|
@@ -2,6 +2,42 @@
|
|
2
2
|
|
3
3
|
<!-- <START NEW CHANGELOG ENTRY> -->
|
4
4
|
|
5
|
+
## 0.5.1
|
6
|
+
|
7
|
+
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.5.0...4ddd9ab118c9ed47340d44b6eb57b68894b1bcc5))
|
8
|
+
|
9
|
+
### Merged PRs
|
10
|
+
|
11
|
+
- Check terminal websocket before removing it [#405](https://github.com/jupyter-server/jupyverse/pull/405) ([@davidbrochart](https://github.com/davidbrochart))
|
12
|
+
- Update documentation URL [#404](https://github.com/jupyter-server/jupyverse/pull/404) ([@davidbrochart](https://github.com/davidbrochart))
|
13
|
+
- Set watchfiles log level to WARNING [#403](https://github.com/jupyter-server/jupyverse/pull/403) ([@davidbrochart](https://github.com/davidbrochart))
|
14
|
+
- Update ypywidgets v0.7.0 for tests [#400](https://github.com/jupyter-server/jupyverse/pull/400) ([@davidbrochart](https://github.com/davidbrochart))
|
15
|
+
- Remove output trailing newline [#399](https://github.com/jupyter-server/jupyverse/pull/399) ([@davidbrochart](https://github.com/davidbrochart))
|
16
|
+
- Save anonymous user info in database [#397](https://github.com/jupyter-server/jupyverse/pull/397) ([@davidbrochart](https://github.com/davidbrochart))
|
17
|
+
|
18
|
+
### Contributors to this release
|
19
|
+
|
20
|
+
([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2024-04-12&to=2024-04-29&type=c))
|
21
|
+
|
22
|
+
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2024-04-12..2024-04-29&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2024-04-12..2024-04-29&type=Issues)
|
23
|
+
|
24
|
+
<!-- <END NEW CHANGELOG ENTRY> -->
|
25
|
+
|
26
|
+
## 0.5.0
|
27
|
+
|
28
|
+
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.4.2...66aac71cf07cbc14c5196cc1c144b9965fec7d2c))
|
29
|
+
|
30
|
+
### Merged PRs
|
31
|
+
|
32
|
+
- Replace RetroLab with Notebook [#396](https://github.com/jupyter-server/jupyverse/pull/396) ([@davidbrochart](https://github.com/davidbrochart))
|
33
|
+
- Update FastAPI-Users v13.0.0 [#395](https://github.com/jupyter-server/jupyverse/pull/395) ([@davidbrochart](https://github.com/davidbrochart))
|
34
|
+
|
35
|
+
### Contributors to this release
|
36
|
+
|
37
|
+
([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2024-01-02&to=2024-04-12&type=c))
|
38
|
+
|
39
|
+
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2024-01-02..2024-04-12&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2024-01-02..2024-04-12&type=Issues)
|
40
|
+
|
5
41
|
## 0.4.2
|
6
42
|
|
7
43
|
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.4.1...2f084c7c744bb2d2865bdad223c680eca5c8a2cb))
|
@@ -16,8 +52,6 @@
|
|
16
52
|
|
17
53
|
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2023-12-18..2024-01-02&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2023-12-18..2024-01-02&type=Issues)
|
18
54
|
|
19
|
-
<!-- <END NEW CHANGELOG ENTRY> -->
|
20
|
-
|
21
55
|
## 0.4.1
|
22
56
|
|
23
57
|
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.4.0...8321cf2a280ebe5e4bb4b09571a5b11855db649a))
|
@@ -6,7 +6,7 @@ cd plugins/auth ; rm -rf dist && python setup.py sdist bdist_wheel ; cp di
|
|
6
6
|
cd plugins/contents ; rm -rf dist && python setup.py sdist bdist_wheel ; cp dist/* ../../dist/ ; cd ../..
|
7
7
|
cd plugins/lab ; rm -rf dist && python setup.py sdist bdist_wheel ; cp dist/* ../../dist/ ; cd ../..
|
8
8
|
cd plugins/jupyterlab ; rm -rf dist && python setup.py sdist bdist_wheel ; cp dist/* ../../dist/ ; cd ../..
|
9
|
-
cd plugins/
|
9
|
+
cd plugins/notebook ; rm -rf dist && python setup.py sdist bdist_wheel ; cp dist/* ../../dist/ ; cd ../..
|
10
10
|
cd plugins/kernels ; rm -rf dist && python setup.py sdist bdist_wheel ; cp dist/* ../../dist/ ; cd ../..
|
11
11
|
cd plugins/nbconvert ; rm -rf dist && python setup.py sdist bdist_wheel ; cp dist/* ../../dist/ ; cd ../..
|
12
12
|
cd plugins/terminals ; rm -rf dist && python setup.py sdist bdist_wheel ; cp dist/* ../../dist/ ; cd ../..
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.3
|
2
2
|
Name: jupyverse
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.5.1
|
4
4
|
Summary: A set of FPS plugins implementing a Jupyter server
|
5
5
|
Project-URL: Homepage, https://jupyter.org
|
6
6
|
Author-email: Jupyter Development Team <jupyter@googlegroups.com>
|
@@ -30,8 +30,8 @@ Provides-Extra: jupyterlab
|
|
30
30
|
Requires-Dist: fps-jupyterlab<1,>=0.1.2; extra == 'jupyterlab'
|
31
31
|
Provides-Extra: noauth
|
32
32
|
Requires-Dist: fps-noauth<1,>=0.1.2; extra == 'noauth'
|
33
|
-
Provides-Extra:
|
34
|
-
Requires-Dist: fps-
|
33
|
+
Provides-Extra: notebook
|
34
|
+
Requires-Dist: fps-notebook<1,>=0.1.2; extra == 'notebook'
|
35
35
|
Provides-Extra: test
|
36
36
|
Requires-Dist: httpx; extra == 'test'
|
37
37
|
Requires-Dist: httpx-ws>=0.4.1; extra == 'test'
|
@@ -46,8 +46,8 @@ Requires-Dist: requests; extra == 'test'
|
|
46
46
|
Requires-Dist: ruff>=0.1.2; extra == 'test'
|
47
47
|
Requires-Dist: types-setuptools; extra == 'test'
|
48
48
|
Requires-Dist: websockets; extra == 'test'
|
49
|
-
Requires-Dist: ypywidgets-textual<0.
|
50
|
-
Requires-Dist: ypywidgets<0.
|
49
|
+
Requires-Dist: ypywidgets-textual<0.5.0,>=0.4.0; extra == 'test'
|
50
|
+
Requires-Dist: ypywidgets<0.8.0,>=0.7.0; extra == 'test'
|
51
51
|
Description-Content-Type: text/markdown
|
52
52
|
|
53
53
|
[](https://github.com/jupyter-server/jupyverse/actions)
|
@@ -57,10 +57,10 @@ Description-Content-Type: text/markdown
|
|
57
57
|
A set of [Asphalt](https://asphalt.readthedocs.io) components implementing a Jupyter server.
|
58
58
|
|
59
59
|
Try it online:
|
60
|
-
- JupyterLab frontend: [](https://mybinder.org/v2/gh/jupyter-server/jupyverse/HEAD?urlpath=jupyverse-
|
61
|
-
-
|
60
|
+
- JupyterLab frontend: [](https://mybinder.org/v2/gh/jupyter-server/jupyverse/HEAD?urlpath=jupyverse-jupyterlab)
|
61
|
+
- Jupyter Notebook frontend: [](https://mybinder.org/v2/gh/jupyter-server/jupyverse/HEAD?urlpath=jupyverse-notebook)
|
62
62
|
|
63
|
-
Documentation is available [here](https://
|
63
|
+
Documentation is available [here](https://jupyter-server.github.io/jupyverse).
|
64
64
|
|
65
65
|
## Motivation
|
66
66
|
|
@@ -5,10 +5,10 @@
|
|
5
5
|
A set of [Asphalt](https://asphalt.readthedocs.io) components implementing a Jupyter server.
|
6
6
|
|
7
7
|
Try it online:
|
8
|
-
- JupyterLab frontend: [](https://mybinder.org/v2/gh/jupyter-server/jupyverse/HEAD?urlpath=jupyverse-
|
9
|
-
-
|
8
|
+
- JupyterLab frontend: [](https://mybinder.org/v2/gh/jupyter-server/jupyverse/HEAD?urlpath=jupyverse-jupyterlab)
|
9
|
+
- Jupyter Notebook frontend: [](https://mybinder.org/v2/gh/jupyter-server/jupyverse/HEAD?urlpath=jupyverse-notebook)
|
10
10
|
|
11
|
-
Documentation is available [here](https://
|
11
|
+
Documentation is available [here](https://jupyter-server.github.io/jupyverse).
|
12
12
|
|
13
13
|
## Motivation
|
14
14
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
jupyverse_jupyterlab_command = " ".join(
|
2
|
+
[
|
3
|
+
"jupyverse",
|
4
|
+
"--set auth.mode=noauth",
|
5
|
+
"--set frontend.collaborative=true",
|
6
|
+
"--set frontend.base_url={base_url}jupyverse-jupyterlab/",
|
7
|
+
"--disable notebook",
|
8
|
+
"--port={port}",
|
9
|
+
]
|
10
|
+
+ [">jupyverse_jupyterlab.log 2>&1"]
|
11
|
+
)
|
12
|
+
|
13
|
+
|
14
|
+
jupyverse_notebook_command = " ".join(
|
15
|
+
[
|
16
|
+
"jupyverse",
|
17
|
+
"--set auth.mode=noauth",
|
18
|
+
"--set frontend.collaborative=true",
|
19
|
+
"--set frontend.base_url={base_url}jupyverse-notebook/",
|
20
|
+
"--disable jupyterlab",
|
21
|
+
"--port={port}",
|
22
|
+
]
|
23
|
+
+ [">jupyverse_notebook.log 2>&1"]
|
24
|
+
)
|
25
|
+
|
26
|
+
|
27
|
+
c.ServerProxy.servers = {
|
28
|
+
"jupyverse-jupyterlab": {
|
29
|
+
"command": ["/bin/bash", "-c", jupyverse_jupyterlab_command],
|
30
|
+
"timeout": 60,
|
31
|
+
"absolute_url": False,
|
32
|
+
},
|
33
|
+
"jupyverse-notebook": {
|
34
|
+
"command": ["/bin/bash", "-c", jupyverse_notebook_command],
|
35
|
+
"timeout": 60,
|
36
|
+
"absolute_url": False,
|
37
|
+
},
|
38
|
+
}
|
39
|
+
|
40
|
+
c.NotebookApp.default_url = "/jupyverse-jupyterlab"
|
41
|
+
|
42
|
+
import logging
|
43
|
+
|
44
|
+
c.NotebookApp.log_level = logging.DEBUG
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
python -m pip install -e plugins/lab
|
4
4
|
python -m pip install -e plugins/jupyterlab
|
5
|
-
python -m pip install -e plugins/
|
5
|
+
python -m pip install -e plugins/notebook
|
6
6
|
python -m pip install -e plugins/contents
|
7
7
|
python -m pip install -e plugins/kernels
|
8
8
|
python -m pip install -e plugins/terminals
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Jupyverse can be installed to run either [JupyterLab](https://jupyterlab.readthedocs.io) or [
|
1
|
+
Jupyverse can be installed to run either [JupyterLab](https://jupyterlab.readthedocs.io) or [Jupyter Notebook](https://jupyter-notebook.readthedocs.io).
|
2
2
|
|
3
3
|
## With `pip`
|
4
4
|
|
@@ -6,9 +6,9 @@ For the JupyterLab frontend:
|
|
6
6
|
```bash
|
7
7
|
pip install "jupyverse[jupyterlab,auth]"
|
8
8
|
```
|
9
|
-
Or for the
|
9
|
+
Or for the Jupyter Notebook frontend:
|
10
10
|
```bash
|
11
|
-
pip install "jupyverse[
|
11
|
+
pip install "jupyverse[notebook,auth]"
|
12
12
|
```
|
13
13
|
|
14
14
|
## With `micromamba`
|
@@ -27,9 +27,9 @@ For the JupyterLab frontend:
|
|
27
27
|
```bash
|
28
28
|
micromamba install -c conda-forge jupyverse fps-jupyterlab fps-auth
|
29
29
|
```
|
30
|
-
Or for the
|
30
|
+
Or for the Jupyter Notebook frontend:
|
31
31
|
```bash
|
32
|
-
micromamba install -c conda-forge jupyverse fps-
|
32
|
+
micromamba install -c conda-forge jupyverse fps-notebook fps-auth
|
33
33
|
```
|
34
34
|
|
35
35
|
## Development install
|
@@ -69,9 +69,9 @@ Entering `hatch env show` will show the available environments:
|
|
69
69
|
│ dev │ virtual │ dev.jupyterlab-noauth │ test │ lint │
|
70
70
|
│ │ │ dev.jupyterlab-auth │ │ test │
|
71
71
|
│ │ │ dev.jupyterlab-auth_fief │ │ typecheck │
|
72
|
-
│ │ │ dev.
|
73
|
-
│ │ │ dev.
|
74
|
-
│ │ │ dev.
|
72
|
+
│ │ │ dev.notebook-noauth │ │ │
|
73
|
+
│ │ │ dev.notebook-auth │ │ │
|
74
|
+
│ │ │ dev.notebook-auth_fief │ │ │
|
75
75
|
└──────┴─────────┴──────────────────────────┴──────────┴───────────┘
|
76
76
|
```
|
77
77
|
!!! note
|
@@ -80,7 +80,7 @@ Entering `hatch env show` will show the available environments:
|
|
80
80
|
from your local repository. So you want to use the `dev` environment.
|
81
81
|
|
82
82
|
Currently, the `dev` environment matrix consists of all combinations of frontends
|
83
|
-
(`jupyterlab`, `
|
83
|
+
(`jupyterlab`, `notebook`) and authentication methods (`noauth`, `auth`, `auth_fief`),
|
84
84
|
which leads to six environments.
|
85
85
|
|
86
86
|
A number of scripts are available in the `dev` environments. They can be
|
@@ -1 +1 @@
|
|
1
|
-
`fps-lab` implements everything that is common to JupyterLab and
|
1
|
+
`fps-lab` implements everything that is common to JupyterLab and Jupyter Notebook.
|
@@ -0,0 +1 @@
|
|
1
|
+
`fps-notebook` implements the Notebook API.
|
@@ -11,7 +11,7 @@ This is the default mode when launching Jupyverse, just enter in a terminal:
|
|
11
11
|
jupyverse --open-browser
|
12
12
|
# same as: jupyverse --set auth.mode=token --open-browser
|
13
13
|
```
|
14
|
-
This should open a new window in a browser, and load JupyterLab or
|
14
|
+
This should open a new window in a browser, and load JupyterLab or Jupyter Notebook, depending on the front-end you chose to install (see [Install](../../install)).
|
15
15
|
|
16
16
|
If you look at the terminal, you should see among other things:
|
17
17
|
```
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.5.1"
|
@@ -1,9 +1,14 @@
|
|
1
|
+
import sys
|
1
2
|
from typing import List, Tuple
|
2
3
|
|
3
|
-
import pkg_resources
|
4
4
|
import rich_click as click
|
5
5
|
from asphalt.core.cli import run
|
6
6
|
|
7
|
+
if sys.version_info < (3, 10):
|
8
|
+
from importlib_metadata import entry_points
|
9
|
+
else:
|
10
|
+
from importlib.metadata import entry_points
|
11
|
+
|
7
12
|
|
8
13
|
@click.command() # type: ignore
|
9
14
|
@click.option(
|
@@ -72,7 +77,7 @@ def main(
|
|
72
77
|
def get_config(disable: Tuple[str, ...]) -> str:
|
73
78
|
jupyverse_components = [
|
74
79
|
ep.name
|
75
|
-
for ep in
|
80
|
+
for ep in entry_points(group="jupyverse.components")
|
76
81
|
if ep.name not in disable
|
77
82
|
]
|
78
83
|
|
@@ -10,40 +10,40 @@ from ..auth import Auth, User
|
|
10
10
|
from ..lab import Lab
|
11
11
|
|
12
12
|
|
13
|
-
class
|
13
|
+
class Notebook(Router, ABC):
|
14
14
|
def __init__(self, app: App, auth: Auth, lab: Lab):
|
15
15
|
super().__init__(app=app)
|
16
16
|
|
17
17
|
router = APIRouter()
|
18
18
|
|
19
|
-
@router.get("/
|
19
|
+
@router.get("/tree", response_class=HTMLResponse)
|
20
20
|
async def get_tree(
|
21
21
|
user: User = Depends(auth.current_user()),
|
22
22
|
):
|
23
23
|
return await self.get_tree(user)
|
24
24
|
|
25
|
-
@router.get("/
|
25
|
+
@router.get("/notebooks/{path:path}", response_class=HTMLResponse)
|
26
26
|
async def get_notebook(
|
27
27
|
path,
|
28
28
|
user: User = Depends(auth.current_user()),
|
29
29
|
):
|
30
30
|
return await self.get_notebook(path, user)
|
31
31
|
|
32
|
-
@router.get("/
|
32
|
+
@router.get("/edit/{path:path}", response_class=HTMLResponse)
|
33
33
|
async def edit_file(
|
34
34
|
path,
|
35
35
|
user: User = Depends(auth.current_user()),
|
36
36
|
):
|
37
37
|
return await self.edit_file(path, user)
|
38
38
|
|
39
|
-
@router.get("/
|
39
|
+
@router.get("/consoles/{path:path}", response_class=HTMLResponse)
|
40
40
|
async def get_console(
|
41
41
|
path,
|
42
42
|
user: User = Depends(auth.current_user()),
|
43
43
|
):
|
44
44
|
return await self.get_console(path, user)
|
45
45
|
|
46
|
-
@router.get("/
|
46
|
+
@router.get("/terminals/{name}", response_class=HTMLResponse)
|
47
47
|
async def get_terminal(
|
48
48
|
name: str,
|
49
49
|
user: User = Depends(auth.current_user()),
|
@@ -44,7 +44,7 @@ nav:
|
|
44
44
|
- 'frontend': plugins/frontend.md
|
45
45
|
- 'lab': plugins/lab.md
|
46
46
|
- 'jupyterlab': plugins/jupyterlab.md
|
47
|
-
- '
|
47
|
+
- 'notebook': plugins/notebook.md
|
48
48
|
- 'nbconvert': plugins/nbconvert.md
|
49
49
|
- 'login': plugins/login.md
|
50
50
|
- 'kernels': plugins/kernels.md
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.5.1"
|
@@ -72,6 +72,7 @@ def auth_factory(
|
|
72
72
|
async def get_api_me(
|
73
73
|
permissions: Optional[str] = None,
|
74
74
|
user: UserRead = Depends(backend.current_user()),
|
75
|
+
update_user = Depends(backend.update_user),
|
75
76
|
):
|
76
77
|
checked_permissions: Dict[str, List[str]] = {}
|
77
78
|
if permissions is None:
|
@@ -96,6 +97,14 @@ def auth_factory(
|
|
96
97
|
moon = get_anonymous_username()
|
97
98
|
identity["name"] = f"Anonymous {moon}"
|
98
99
|
identity["display_name"] = f"Anonymous {moon}"
|
100
|
+
identity["initials"] = f"A{moon[0]}"
|
101
|
+
await update_user(
|
102
|
+
dict(
|
103
|
+
name=identity["name"],
|
104
|
+
display_name=identity["display_name"],
|
105
|
+
permissions=checked_permissions,
|
106
|
+
)
|
107
|
+
)
|
99
108
|
return {
|
100
109
|
"identity": identity,
|
101
110
|
"permissions": checked_permissions,
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.5.1"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.5.1"
|
@@ -9,7 +9,9 @@ from watchfiles import Change, awatch
|
|
9
9
|
|
10
10
|
from jupyverse_api import Singleton
|
11
11
|
|
12
|
-
|
12
|
+
contents_logger = logging.getLogger("contents")
|
13
|
+
watchfiles_logger = logging.getLogger("watchfiles")
|
14
|
+
watchfiles_logger.setLevel(logging.WARNING)
|
13
15
|
|
14
16
|
|
15
17
|
class Watcher:
|
@@ -110,13 +112,13 @@ class FileIdManager(metaclass=Singleton):
|
|
110
112
|
changed_path_str = str(changed_path)
|
111
113
|
|
112
114
|
if change == Change.deleted:
|
113
|
-
|
115
|
+
contents_logger.debug("File %s was deleted", changed_path_str)
|
114
116
|
async with db.execute(
|
115
117
|
"SELECT COUNT(*) FROM fileids WHERE path = ?", (changed_path_str,)
|
116
118
|
) as cursor:
|
117
119
|
if not (await cursor.fetchone())[0]:
|
118
120
|
# path is not indexed, ignore
|
119
|
-
|
121
|
+
contents_logger.debug(
|
120
122
|
"File %s is not indexed, ignoring", changed_path_str
|
121
123
|
)
|
122
124
|
continue
|
@@ -125,12 +127,12 @@ class FileIdManager(metaclass=Singleton):
|
|
125
127
|
db, changed_path_str, deleted_paths, added_paths, False
|
126
128
|
)
|
127
129
|
elif change == Change.added:
|
128
|
-
|
130
|
+
contents_logger.debug("File %s was added", changed_path_str)
|
129
131
|
await maybe_rename(
|
130
132
|
db, changed_path_str, added_paths, deleted_paths, True
|
131
133
|
)
|
132
134
|
elif change == Change.modified:
|
133
|
-
|
135
|
+
contents_logger.debug("File %s was modified", changed_path_str)
|
134
136
|
if changed_path_str == self.db_path:
|
135
137
|
continue
|
136
138
|
async with db.execute(
|
@@ -138,7 +140,7 @@ class FileIdManager(metaclass=Singleton):
|
|
138
140
|
) as cursor:
|
139
141
|
if not (await cursor.fetchone())[0]:
|
140
142
|
# path is not indexed, ignore
|
141
|
-
|
143
|
+
contents_logger.debug(
|
142
144
|
"File %s is not indexed, ignoring", changed_path_str
|
143
145
|
)
|
144
146
|
continue
|
@@ -149,7 +151,7 @@ class FileIdManager(metaclass=Singleton):
|
|
149
151
|
)
|
150
152
|
|
151
153
|
for path in deleted_paths - added_paths:
|
152
|
-
|
154
|
+
contents_logger.debug("Unindexing file %s ", path)
|
153
155
|
await db.execute("DELETE FROM fileids WHERE path = ?", (path,))
|
154
156
|
await db.commit()
|
155
157
|
|
@@ -203,7 +205,7 @@ async def maybe_rename(
|
|
203
205
|
path1, path2 = changed_path, other_path
|
204
206
|
if is_added_path:
|
205
207
|
path1, path2 = path2, path1
|
206
|
-
|
208
|
+
contents_logger.debug("File %s was renamed to %s", path1, path2)
|
207
209
|
await db.execute("UPDATE fileids SET path = ? WHERE path = ?", (path2, path1))
|
208
210
|
other_paths.remove(other_path)
|
209
211
|
return
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.5.1"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.5.1"
|
@@ -34,7 +34,7 @@ class _JupyterLab(JupyterLab):
|
|
34
34
|
lab.redirect_after_root = "lab"
|
35
35
|
|
36
36
|
extensions_dir = lab.prefix_dir / "share" / "jupyter" / "labextensions"
|
37
|
-
self.federated_extensions, self.
|
37
|
+
self.federated_extensions, self.disabled_extensions = lab.get_federated_extensions(
|
38
38
|
extensions_dir
|
39
39
|
)
|
40
40
|
jupyterlab_dir = Path(jupyterlab_module.__file__).parents[1]
|
@@ -126,7 +126,7 @@ class _JupyterLab(JupyterLab):
|
|
126
126
|
"collaborative": collaborative,
|
127
127
|
"serverSideExecution": server_side_execution,
|
128
128
|
"devMode": dev_mode,
|
129
|
-
"disabledExtensions": self.
|
129
|
+
"disabledExtensions": self.disabled_extensions,
|
130
130
|
"exposeAppInBrowser": False,
|
131
131
|
"extraLabextensionsPath": [],
|
132
132
|
"federated_extensions": self.federated_extensions,
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.5.1"
|
@@ -223,6 +223,9 @@ class KernelDriver:
|
|
223
223
|
if msg_type == "stream":
|
224
224
|
with outputs.doc.transaction():
|
225
225
|
# TODO: uncomment when changes are made in jupyter-ydoc
|
226
|
+
text = content["text"]
|
227
|
+
if text.endswith((os.linesep, "\n")):
|
228
|
+
text = text[:-1]
|
226
229
|
if (not outputs) or (outputs[-1]["name"] != content["name"]): # type: ignore
|
227
230
|
outputs.append(
|
228
231
|
#Map(
|
@@ -235,13 +238,13 @@ class KernelDriver:
|
|
235
238
|
{
|
236
239
|
"name": content["name"],
|
237
240
|
"output_type": msg_type,
|
238
|
-
"text": [
|
241
|
+
"text": [text],
|
239
242
|
}
|
240
243
|
)
|
241
244
|
else:
|
242
245
|
#outputs[-1]["text"].append(content["text"]) # type: ignore
|
243
246
|
last_output = outputs[-1]
|
244
|
-
last_output["text"].append(
|
247
|
+
last_output["text"].append(text) # type: ignore
|
245
248
|
outputs[-1] = last_output
|
246
249
|
elif msg_type in ("display_data", "execute_result"):
|
247
250
|
if "application/vnd.jupyter.ywidget-view+json" in content["data"]:
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.5.1"
|