jupyverse 0.10.0__tar.gz → 0.10.2__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.10.0 → jupyverse-0.10.2}/CHANGELOG.md +8 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/PKG-INFO +9 -9
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/kernel_server/server.py +2 -2
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/pyproject.toml +1 -1
- {jupyverse-0.10.0 → jupyverse-0.10.2}/pyproject.toml +8 -8
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/test_kernels.py +82 -75
- jupyverse-0.10.2/tests/utils.py +385 -0
- jupyverse-0.10.0/tests/utils.py +0 -141
- {jupyverse-0.10.0 → jupyverse-0.10.2}/.devcontainer/devcontainer.json +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/.devcontainer/requirements.txt +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/.github/workflows/publish-release.yml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/.github/workflows/test.yml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/.gitignore +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/.pre-commit-config.yaml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/binder/environment.yml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/binder/jupyter_notebook_config.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/binder/postBuild +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/binder/start +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/index.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/install.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/jupyter.svg +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/auth.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/contents.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/frontend.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/jupyterlab.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/kernels.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/lab.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/login.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/nbconvert.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/notebook.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/resource_usage.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/terminals.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/plugins/yjs.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/usage/microservices.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/usage/multi_user.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/docs/usage/single_user.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/app/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/auth/models.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/cli.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/contents/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/contents/models.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/file_id/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/kernel/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/kernels/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/kernels/models.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/lab/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/login/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/main/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/notebook/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/terminals/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/yjs/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/jupyverse_api/tests/test_resource_lock.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/mkdocs.yml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/notebooks/admin_users.ipynb +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/notebooks/admin_users.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/fps_auth/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/fps_auth/backends.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/fps_auth/config.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/fps_auth/db.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/fps_auth/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/fps_auth/models.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/fps_auth/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/fps_auth/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/fps_auth_fief/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/fps_auth_fief/backend.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/fps_auth_fief/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/fps_auth_fief/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_fief/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/auth_jupyterhub/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/contents/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/contents/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/contents/fps_contents/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/contents/fps_contents/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/contents/fps_contents/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/contents/fps_contents/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/contents/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/file_id/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/file_id/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/file_id/fps_file_id/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/file_id/fps_file_id/file_id.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/file_id/fps_file_id/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/file_id/fps_file_id/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/file_id/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/frontend/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/frontend/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/frontend/fps_frontend/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/frontend/fps_frontend/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/frontend/fps_frontend/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/frontend/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/jupyterlab/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/jupyterlab/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/jupyterlab/fps_jupyterlab/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/jupyterlab/fps_jupyterlab/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/jupyterlab/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernel_subprocess/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernel_subprocess/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernel_subprocess/fps_kernel_subprocess/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernel_subprocess/fps_kernel_subprocess/connect.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernel_subprocess/fps_kernel_subprocess/kernel_subprocess.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernel_subprocess/fps_kernel_subprocess/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernel_subprocess/fps_kernel_subprocess/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernel_subprocess/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/kernel_driver/driver.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/kernel_driver/message.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/kernel_server/message.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/fps_kernels/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/kernels/tests/test_kernel_launcher.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/lab/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/lab/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/lab/fps_lab/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/lab/fps_lab/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/lab/fps_lab/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/lab/fps_lab/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/lab/fps_lab/static/favicon.ico +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/lab/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/index.html +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/logo/github.svg +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/logo/logo.png +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/fps_login/static/style/index.css +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/login/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/nbconvert/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/nbconvert/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/nbconvert/fps_nbconvert/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/nbconvert/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/noauth/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/noauth/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/noauth/fps_noauth/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/noauth/fps_noauth/backends.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/noauth/fps_noauth/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/noauth/fps_noauth/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/noauth/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/notebook/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/notebook/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/notebook/fps_notebook/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/notebook/fps_notebook/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/notebook/fps_notebook/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/notebook/fps_notebook/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/notebook/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/resource_usage/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/resource_usage/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/resource_usage/fps_resource_usage/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/resource_usage/fps_resource_usage/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/resource_usage/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/fps_terminals/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/fps_terminals/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/fps_terminals/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/fps_terminals/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/fps_terminals/server.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/fps_terminals/win_server.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/terminals/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/fps_webdav/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/fps_webdav/config.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/fps_webdav/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/fps_webdav/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/fps_webdav/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/tests/conftest.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/webdav/tests/test_webdav.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/COPYING.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/README.md +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/main.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/py.typed +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/routes.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/plugins/yjs/pyproject.toml +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/pytest.ini +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/conftest.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/data/notebook0.ipynb +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/data/notebook1.ipynb +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/test_app.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/test_auth.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/test_contents.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/test_execute.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/test_server.py +0 -0
- {jupyverse-0.10.0 → jupyverse-0.10.2}/tests/test_settings.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jupyverse
|
3
|
-
Version: 0.10.
|
3
|
+
Version: 0.10.2
|
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>
|
@@ -13,7 +13,7 @@ Requires-Dist: fps-contents<0.11.0,>=0.10.0
|
|
13
13
|
Requires-Dist: fps-file-id<0.3.0,>=0.2.0
|
14
14
|
Requires-Dist: fps-frontend<0.10.0,>=0.9.0
|
15
15
|
Requires-Dist: fps-kernel-subprocess<0.2.0,>=0.1.0
|
16
|
-
Requires-Dist: fps-kernels<0.10.0,>=0.9.
|
16
|
+
Requires-Dist: fps-kernels<0.10.0,>=0.9.1
|
17
17
|
Requires-Dist: fps-lab<0.10.0,>=0.9.0
|
18
18
|
Requires-Dist: fps-nbconvert<0.10.0,>=0.9.0
|
19
19
|
Requires-Dist: fps-terminals<0.10.0,>=0.9.0
|
@@ -22,21 +22,21 @@ Requires-Dist: fps[anycorn,click,fastapi]<0.5.0,>=0.4.0
|
|
22
22
|
Requires-Dist: jupyverse-api<0.11.0,>=0.10.0
|
23
23
|
Requires-Dist: rich-click<2,>=1.6.1
|
24
24
|
Provides-Extra: auth
|
25
|
-
Requires-Dist: fps-auth<0.
|
26
|
-
Requires-Dist: fps-login<0.
|
25
|
+
Requires-Dist: fps-auth<0.10.0,>=0.9.0; extra == 'auth'
|
26
|
+
Requires-Dist: fps-login<0.10.0,>=0.9.0; extra == 'auth'
|
27
27
|
Provides-Extra: auth-fief
|
28
|
-
Requires-Dist: fps-auth-fief<0.
|
28
|
+
Requires-Dist: fps-auth-fief<0.10.0,>=0.9.0; extra == 'auth-fief'
|
29
29
|
Provides-Extra: auth-jupyterhub
|
30
|
-
Requires-Dist: fps-auth-jupyterhub<0.
|
30
|
+
Requires-Dist: fps-auth-jupyterhub<0.10.0,>=0.9.0; extra == 'auth-jupyterhub'
|
31
31
|
Provides-Extra: docs
|
32
32
|
Requires-Dist: mkdocs; extra == 'docs'
|
33
33
|
Requires-Dist: mkdocs-material; extra == 'docs'
|
34
34
|
Provides-Extra: jupyterlab
|
35
|
-
Requires-Dist: fps-jupyterlab<0.
|
35
|
+
Requires-Dist: fps-jupyterlab<0.10.0,>=0.9.0; extra == 'jupyterlab'
|
36
36
|
Provides-Extra: noauth
|
37
|
-
Requires-Dist: fps-noauth<0.
|
37
|
+
Requires-Dist: fps-noauth<0.10.0,>=0.9.0; extra == 'noauth'
|
38
38
|
Provides-Extra: notebook
|
39
|
-
Requires-Dist: fps-notebook<0.
|
39
|
+
Requires-Dist: fps-notebook<0.10.0,>=0.9.0; extra == 'notebook'
|
40
40
|
Provides-Extra: test
|
41
41
|
Requires-Dist: httpx; extra == 'test'
|
42
42
|
Requires-Dist: httpx-ws>=0.4.1; extra == 'test'
|
@@ -6,7 +6,7 @@ from datetime import datetime, timezone
|
|
6
6
|
|
7
7
|
from anyio import TASK_STATUS_IGNORED, Event, create_task_group, move_on_after
|
8
8
|
from anyio.abc import TaskStatus
|
9
|
-
from fastapi import WebSocket
|
9
|
+
from fastapi import WebSocket
|
10
10
|
from starlette.websockets import WebSocketState
|
11
11
|
|
12
12
|
from jupyverse_api.kernel import DefaultKernelFactory, KernelFactory
|
@@ -160,7 +160,7 @@ class KernelServer:
|
|
160
160
|
async def listen_web(self, websocket: AcceptedWebSocket, stop_event: Event):
|
161
161
|
try:
|
162
162
|
await self.send_to_kernel(websocket)
|
163
|
-
except
|
163
|
+
except BaseException:
|
164
164
|
pass
|
165
165
|
finally:
|
166
166
|
stop_event.set()
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "jupyverse"
|
7
|
-
version = "0.10.
|
7
|
+
version = "0.10.2"
|
8
8
|
description = "A set of FPS plugins implementing a Jupyter server"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
@@ -13,7 +13,7 @@ dependencies = [
|
|
13
13
|
"fps-contents >=0.10.0,<0.11.0",
|
14
14
|
"fps-file-id >=0.2.0,<0.3.0",
|
15
15
|
"fps-kernel-subprocess >=0.1.0,<0.2.0",
|
16
|
-
"fps-kernels >=0.9.
|
16
|
+
"fps-kernels >=0.9.1,<0.10.0",
|
17
17
|
"fps-terminals >=0.9.0,<0.10.0",
|
18
18
|
"fps-nbconvert >=0.9.0,<0.10.0",
|
19
19
|
"fps-yjs >=0.10.0,<0.11.0",
|
@@ -39,12 +39,12 @@ text = "BSD 3-Clause License"
|
|
39
39
|
Homepage = "https://jupyter.org"
|
40
40
|
|
41
41
|
[project.optional-dependencies]
|
42
|
-
jupyterlab = ["fps-jupyterlab >=0.
|
43
|
-
notebook = ["fps-notebook>=0.
|
44
|
-
auth = ["fps-auth >=0.
|
45
|
-
auth-fief = ["fps-auth-fief >=0.
|
46
|
-
auth-jupyterhub = ["fps-auth-jupyterhub >=0.
|
47
|
-
noauth = ["fps-noauth >=0.
|
42
|
+
jupyterlab = ["fps-jupyterlab >=0.9.0,<0.10.0"]
|
43
|
+
notebook = ["fps-notebook>=0.9.0,<0.10.0"]
|
44
|
+
auth = ["fps-auth >=0.9.0,<0.10.0", "fps-login >=0.9.0,<0.10.0"]
|
45
|
+
auth-fief = ["fps-auth-fief >=0.9.0,<0.10.0"]
|
46
|
+
auth-jupyterhub = ["fps-auth-jupyterhub >=0.9.0,<0.10.0"]
|
47
|
+
noauth = ["fps-noauth >=0.9.0,<0.10.0"]
|
48
48
|
test = [
|
49
49
|
"ruff >=0.1.2",
|
50
50
|
"mypy",
|
@@ -8,6 +8,7 @@ from fps import get_root_module, merge_config
|
|
8
8
|
from fps_kernels.kernel_server.server import KernelServer, kernels
|
9
9
|
from httpx import AsyncClient
|
10
10
|
from httpx_ws import aconnect_ws
|
11
|
+
from utils import ASGIWebSocketTransport
|
11
12
|
|
12
13
|
from jupyverse_api.kernel import Kernel
|
13
14
|
|
@@ -16,6 +17,9 @@ os.environ["PYDEVD_DISABLE_FILE_VALIDATION"] = "1"
|
|
16
17
|
CONFIG = {
|
17
18
|
"jupyverse": {
|
18
19
|
"type": "jupyverse",
|
20
|
+
"config": {
|
21
|
+
"start_server": False,
|
22
|
+
},
|
19
23
|
"modules": {
|
20
24
|
"app": {
|
21
25
|
"type": "app",
|
@@ -29,9 +33,6 @@ CONFIG = {
|
|
29
33
|
"contents": {
|
30
34
|
"type": "contents",
|
31
35
|
},
|
32
|
-
"file_id": {
|
33
|
-
"type": "file_id",
|
34
|
-
},
|
35
36
|
"frontend": {
|
36
37
|
"type": "frontend",
|
37
38
|
},
|
@@ -47,9 +48,6 @@ CONFIG = {
|
|
47
48
|
"kernels": {
|
48
49
|
"type": "kernels",
|
49
50
|
},
|
50
|
-
"yjs": {
|
51
|
-
"type": "yjs",
|
52
|
-
},
|
53
51
|
},
|
54
52
|
}
|
55
53
|
}
|
@@ -57,87 +55,96 @@ CONFIG = {
|
|
57
55
|
|
58
56
|
@pytest.mark.anyio
|
59
57
|
@pytest.mark.parametrize("auth_mode", ("noauth",))
|
60
|
-
async def test_kernel_messages(auth_mode, capfd
|
58
|
+
async def test_kernel_messages(auth_mode, capfd):
|
61
59
|
kernel_id = "kernel_id_0"
|
62
60
|
kernel_name = "python3"
|
63
61
|
kernelspec_path = (
|
64
62
|
Path(sys.prefix) / "share" / "jupyter" / "kernels" / kernel_name / "kernel.json"
|
65
63
|
)
|
66
64
|
assert kernelspec_path.exists()
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
"
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
{
|
82
|
-
"
|
83
|
-
"
|
84
|
-
|
85
|
-
|
86
|
-
"config": {
|
87
|
-
"mode": auth_mode,
|
88
|
-
}
|
65
|
+
msg = {
|
66
|
+
"channel": "shell",
|
67
|
+
"parent_header": None,
|
68
|
+
"content": None,
|
69
|
+
"metadata": None,
|
70
|
+
"header": {
|
71
|
+
"msg_type": "msg_type_0",
|
72
|
+
"msg_id": "0",
|
73
|
+
},
|
74
|
+
}
|
75
|
+
|
76
|
+
config = merge_config(
|
77
|
+
CONFIG,
|
78
|
+
{
|
79
|
+
"jupyverse": {
|
80
|
+
"modules": {
|
81
|
+
"auth": {
|
82
|
+
"config": {
|
83
|
+
"mode": auth_mode,
|
89
84
|
}
|
90
|
-
}
|
91
|
-
}
|
92
|
-
}
|
93
|
-
|
94
|
-
|
85
|
+
}
|
86
|
+
},
|
87
|
+
}
|
88
|
+
},
|
89
|
+
)
|
90
|
+
async with get_root_module(config) as root_module:
|
91
|
+
app = root_module.app
|
92
|
+
transport = ASGIWebSocketTransport(app=app)
|
93
|
+
async with AsyncClient(transport=transport, base_url="http://testserver") as client:
|
95
94
|
kernel_server = KernelServer(
|
96
95
|
kernelspec_path=kernelspec_path,
|
97
96
|
capture_kernel_output=False,
|
98
97
|
default_kernel_factory=KernelFactory(),
|
99
98
|
)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
99
|
+
async with create_task_group() as tg:
|
100
|
+
await tg.start(kernel_server.start)
|
101
|
+
kernels[kernel_id] = {"server": kernel_server, "driver": None}
|
102
|
+
|
103
|
+
# block msg_type_0
|
104
|
+
kernel_server.block_messages("msg_type_0")
|
105
|
+
async with aconnect_ws(
|
106
|
+
f"http://testserver/api/kernels/{kernel_id}/channels?session_id=session_id_0",
|
107
|
+
client,
|
108
|
+
) as websocket:
|
109
|
+
await websocket.send_json(msg)
|
110
|
+
await sleep(0.1)
|
111
|
+
out, err = capfd.readouterr()
|
112
|
+
assert not err
|
113
|
+
|
114
|
+
# allow only msg_type_0
|
115
|
+
kernel_server.allow_messages("msg_type_0")
|
116
|
+
async with aconnect_ws(
|
117
|
+
f"http://testserver/api/kernels/{kernel_id}/channels?session_id=session_id_0",
|
118
|
+
client,
|
119
|
+
) as websocket:
|
120
|
+
await websocket.send_json(msg)
|
121
|
+
await sleep(0.1)
|
122
|
+
out, err = capfd.readouterr()
|
123
|
+
assert err.count("msg_type_0") == 1
|
124
|
+
|
125
|
+
# block all messages
|
126
|
+
kernel_server.allow_messages([])
|
127
|
+
async with aconnect_ws(
|
128
|
+
f"http://testserver/api/kernels/{kernel_id}/channels?session_id=session_id_0",
|
129
|
+
client,
|
130
|
+
) as websocket:
|
131
|
+
await websocket.send_json(msg)
|
132
|
+
await sleep(0.1)
|
133
|
+
out, err = capfd.readouterr()
|
134
|
+
assert not err
|
135
|
+
|
136
|
+
# allow all messages
|
137
|
+
kernel_server.allow_messages()
|
138
|
+
async with aconnect_ws(
|
139
|
+
f"http://testserver/api/kernels/{kernel_id}/channels?session_id=session_id_0",
|
140
|
+
client,
|
141
|
+
) as websocket:
|
142
|
+
await websocket.send_json(msg)
|
143
|
+
await sleep(0.1)
|
144
|
+
out, err = capfd.readouterr()
|
145
|
+
assert err.count("msg_type_0") >= 1
|
146
|
+
|
147
|
+
await kernel_server.stop()
|
141
148
|
|
142
149
|
|
143
150
|
class KernelFactory:
|