jupyverse 0.10.6__tar.gz → 0.10.9__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.6 → jupyverse-0.10.9}/.github/workflows/test.yml +2 -10
- {jupyverse-0.10.6 → jupyverse-0.10.9}/.pre-commit-config.yaml +1 -1
- {jupyverse-0.10.6 → jupyverse-0.10.9}/CHANGELOG.md +9 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/PKG-INFO +18 -19
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/__init__.py +0 -35
- jupyverse-0.10.6/tests/utils.py → jupyverse-0.10.9/jupyverse_api/jupyverse_api/asgi_websocket_transport.py +0 -141
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/contents/__init__.py +2 -1
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/pyproject.toml +2 -1
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/pyproject.toml +4 -4
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/pyproject.toml +2 -2
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/routes.py +37 -29
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/pyproject.toml +3 -2
- jupyverse-0.10.9/plugins/yjs/tests/test_yjs.py +75 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/pyproject.toml +31 -48
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/conftest.py +8 -8
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_kernels.py +1 -1
- jupyverse-0.10.9/tests/utils.py +141 -0
- jupyverse-0.10.6/jupyverse_api/tests/test_resource_lock.py +0 -57
- {jupyverse-0.10.6 → jupyverse-0.10.9}/.devcontainer/devcontainer.json +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/.devcontainer/requirements.txt +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/.github/workflows/publish-release.yml +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/.gitignore +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/binder/environment.yml +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/binder/jupyter_notebook_config.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/binder/postBuild +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/binder/start +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/index.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/install.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/jupyter.svg +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/auth.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/contents.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/frontend.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/jupyterlab.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/kernels.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/lab.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/login.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/nbconvert.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/notebook.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/resource_usage.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/terminals.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/yjs.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/usage/microservices.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/usage/multi_user.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/usage/single_user.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/app/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/auth/models.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/cli.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/contents/models.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/file_id/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/kernel/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/kernels/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/kernels/models.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/lab/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/login/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/main/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/notebook/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/terminals/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/yjs/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/mkdocs.yml +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/notebooks/admin_users.ipynb +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/notebooks/admin_users.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/backends.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/config.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/db.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/models.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/backend.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/fps_contents/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/fps_contents/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/fps_contents/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/fps_contents/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/fps_file_id/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/fps_file_id/file_id.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/fps_file_id/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/fps_file_id/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/fps_frontend/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/fps_frontend/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/fps_frontend/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/connect.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/kernel_subprocess.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/fps_kernel_web_worker/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/fps_kernel_web_worker/kernel_web_worker.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/fps_kernel_web_worker/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/fps_kernel_web_worker/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/driver.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/message.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_server/message.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_server/server.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/tests/test_kernel_launcher.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/static/favicon.ico +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/index.html +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/logo/github.svg +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/logo/logo.png +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/style/index.css +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/fps_nbconvert/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/fps_noauth/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/fps_noauth/backends.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/fps_noauth/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/fps_noauth/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/fps_notebook/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/fps_notebook/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/fps_notebook/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/fps_notebook/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/fps_resource_usage/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/fps_resource_usage/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/server.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/win_server.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/config.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/routes.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/tests/conftest.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/tests/test_webdav.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/COPYING.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/README.md +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/main.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/py.typed +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/pytest.ini +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/data/notebook0.ipynb +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/data/notebook1.ipynb +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_app.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_auth.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_contents.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_execute.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_server.py +0 -0
- {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_settings.py +0 -0
@@ -29,12 +29,7 @@ jobs:
|
|
29
29
|
python3 -m pip install hatch
|
30
30
|
- name: Check types
|
31
31
|
run: |
|
32
|
-
hatch run dev
|
33
|
-
hatch run dev.jupyterlab-auth:typecheck
|
34
|
-
hatch run dev.jupyterlab-auth_fief:typecheck
|
35
|
-
hatch run dev.notebook-noauth:typecheck
|
36
|
-
hatch run dev.notebook-auth:typecheck
|
37
|
-
hatch run dev.notebook-auth_fief:typecheck
|
32
|
+
hatch run dev:typecheck
|
38
33
|
|
39
34
|
test:
|
40
35
|
name: Tests
|
@@ -59,8 +54,5 @@ jobs:
|
|
59
54
|
python3 -m pip install --upgrade pip
|
60
55
|
python3 -m pip install hatch
|
61
56
|
|
62
|
-
- name: Create jupyterlab-auth dev environment
|
63
|
-
run: hatch env create dev.jupyterlab-auth
|
64
|
-
|
65
57
|
- name: Run tests
|
66
|
-
run: hatch run dev
|
58
|
+
run: hatch run dev:test
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jupyverse
|
3
|
-
Version: 0.10.
|
3
|
+
Version: 0.10.9
|
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>
|
@@ -9,34 +9,34 @@ License-File: COPYING.md
|
|
9
9
|
Keywords: fastapi,jupyter,plugins,server
|
10
10
|
Requires-Python: >=3.9
|
11
11
|
Requires-Dist: eval-type-backport; python_version < '3.10'
|
12
|
-
Requires-Dist: fps-contents<0.11.0,>=0.10.
|
13
|
-
Requires-Dist: fps-file-id<0.3.0,>=0.2.
|
14
|
-
Requires-Dist: fps-frontend<0.10.0,>=0.9.
|
15
|
-
Requires-Dist: fps-kernel-subprocess<0.2.0,>=0.1.
|
16
|
-
Requires-Dist: fps-kernels<0.10.0,>=0.9.
|
17
|
-
Requires-Dist: fps-lab<0.10.0,>=0.9.
|
18
|
-
Requires-Dist: fps-nbconvert<0.10.0,>=0.9.
|
19
|
-
Requires-Dist: fps-terminals<0.10.0,>=0.9.
|
20
|
-
Requires-Dist: fps-yjs<0.11.0,>=0.10.
|
12
|
+
Requires-Dist: fps-contents<0.11.0,>=0.10.1
|
13
|
+
Requires-Dist: fps-file-id<0.3.0,>=0.2.2
|
14
|
+
Requires-Dist: fps-frontend<0.10.0,>=0.9.1
|
15
|
+
Requires-Dist: fps-kernel-subprocess<0.2.0,>=0.1.2
|
16
|
+
Requires-Dist: fps-kernels<0.10.0,>=0.9.2
|
17
|
+
Requires-Dist: fps-lab<0.10.0,>=0.9.1
|
18
|
+
Requires-Dist: fps-nbconvert<0.10.0,>=0.9.1
|
19
|
+
Requires-Dist: fps-terminals<0.10.0,>=0.9.1
|
20
|
+
Requires-Dist: fps-yjs<0.11.0,>=0.10.3
|
21
21
|
Requires-Dist: fps[anycorn,click,fastapi]<0.6.0,>=0.5.1
|
22
|
-
Requires-Dist: jupyverse-api<0.
|
22
|
+
Requires-Dist: jupyverse-api<0.12.0,>=0.11.0
|
23
23
|
Requires-Dist: rich-click<2,>=1.6.1
|
24
24
|
Provides-Extra: auth
|
25
|
-
Requires-Dist: fps-auth<0.10.0,>=0.9.
|
26
|
-
Requires-Dist: fps-login<0.10.0,>=0.9.
|
25
|
+
Requires-Dist: fps-auth<0.10.0,>=0.9.1; extra == 'auth'
|
26
|
+
Requires-Dist: fps-login<0.10.0,>=0.9.1; extra == 'auth'
|
27
27
|
Provides-Extra: auth-fief
|
28
|
-
Requires-Dist: fps-auth-fief<0.10.0,>=0.9.
|
28
|
+
Requires-Dist: fps-auth-fief<0.10.0,>=0.9.1; extra == 'auth-fief'
|
29
29
|
Provides-Extra: auth-jupyterhub
|
30
|
-
Requires-Dist: fps-auth-jupyterhub<0.10.0,>=0.9.
|
30
|
+
Requires-Dist: fps-auth-jupyterhub<0.10.0,>=0.9.2; 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.10.0,>=0.9.
|
35
|
+
Requires-Dist: fps-jupyterlab<0.10.0,>=0.9.1; extra == 'jupyterlab'
|
36
36
|
Provides-Extra: noauth
|
37
|
-
Requires-Dist: fps-noauth<0.10.0,>=0.9.
|
37
|
+
Requires-Dist: fps-noauth<0.10.0,>=0.9.2; extra == 'noauth'
|
38
38
|
Provides-Extra: notebook
|
39
|
-
Requires-Dist: fps-notebook<0.10.0,>=0.9.
|
39
|
+
Requires-Dist: fps-notebook<0.10.0,>=0.9.1; 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'
|
@@ -44,7 +44,6 @@ Requires-Dist: ipykernel; extra == 'test'
|
|
44
44
|
Requires-Dist: mypy; extra == 'test'
|
45
45
|
Requires-Dist: pytest; extra == 'test'
|
46
46
|
Requires-Dist: pytest-env; extra == 'test'
|
47
|
-
Requires-Dist: pytest-rerunfailures; extra == 'test'
|
48
47
|
Requires-Dist: pytest-timeout; extra == 'test'
|
49
48
|
Requires-Dist: requests; extra == 'test'
|
50
49
|
Requires-Dist: ruff>=0.1.2; extra == 'test'
|
@@ -1,7 +1,5 @@
|
|
1
1
|
import importlib.metadata
|
2
|
-
from typing import Any
|
3
2
|
|
4
|
-
from anyio import Event
|
5
3
|
from pydantic import BaseModel
|
6
4
|
|
7
5
|
from .app import App
|
@@ -46,36 +44,3 @@ class Router:
|
|
46
44
|
|
47
45
|
def add_middleware(self, middleware, *args, **kwargs) -> None:
|
48
46
|
self._app.add_middleware(middleware, *args, **kwargs)
|
49
|
-
|
50
|
-
|
51
|
-
class ResourceLock:
|
52
|
-
"""ResourceLock ensures that accesses cannot be done concurrently on the same resource."""
|
53
|
-
|
54
|
-
_locks: dict[Any, Event]
|
55
|
-
|
56
|
-
def __init__(self):
|
57
|
-
self._locks = {}
|
58
|
-
|
59
|
-
def __call__(self, idx: Any):
|
60
|
-
return _ResourceLock(idx, self._locks)
|
61
|
-
|
62
|
-
|
63
|
-
class _ResourceLock:
|
64
|
-
_idx: Any
|
65
|
-
_locks: dict[Any, Event]
|
66
|
-
_lock: Event
|
67
|
-
|
68
|
-
def __init__(self, idx: Any, locks: dict[Any, Event]):
|
69
|
-
self._idx = idx
|
70
|
-
self._locks = locks
|
71
|
-
|
72
|
-
async def __aenter__(self):
|
73
|
-
while True:
|
74
|
-
if self._idx not in self._locks:
|
75
|
-
break
|
76
|
-
await self._locks[self._idx].wait()
|
77
|
-
self._locks[self._idx] = self._lock = Event()
|
78
|
-
|
79
|
-
async def __aexit__(self, exc_type, exc_value, exc_tb):
|
80
|
-
self._lock.set()
|
81
|
-
del self._locks[self._idx]
|
@@ -2,155 +2,14 @@ import contextlib
|
|
2
2
|
import queue
|
3
3
|
import typing
|
4
4
|
from types import TracebackType
|
5
|
-
from typing import Optional
|
6
|
-
from uuid import uuid4
|
7
5
|
|
8
6
|
import anyio
|
9
7
|
import wsproto
|
10
|
-
from anyio import Lock
|
11
8
|
from httpcore import AsyncNetworkStream
|
12
9
|
from httpx import ASGITransport, AsyncByteStream, Request, Response
|
13
10
|
from httpx_ws._exceptions import WebSocketDisconnect
|
14
11
|
from wsproto.frame_protocol import CloseReason
|
15
12
|
|
16
|
-
|
17
|
-
async def authenticate_client(http, port, permissions={}):
|
18
|
-
# create a new user
|
19
|
-
username = uuid4().hex
|
20
|
-
# if logged in, log out
|
21
|
-
first_time = True
|
22
|
-
while True:
|
23
|
-
response = await http.get(f"http://127.0.0.1:{port}/api/me")
|
24
|
-
if response.status_code == 403:
|
25
|
-
break
|
26
|
-
assert first_time
|
27
|
-
response = await http.post(f"http://127.0.0.1:{port}/auth/logout")
|
28
|
-
assert response.status_code == 200
|
29
|
-
first_time = False
|
30
|
-
|
31
|
-
# register user
|
32
|
-
register_body = {
|
33
|
-
"email": f"{username}@example.com",
|
34
|
-
"password": username,
|
35
|
-
"username": username,
|
36
|
-
"permissions": permissions,
|
37
|
-
}
|
38
|
-
response = await http.post(f"http://127.0.0.1:{port}/auth/register", json=register_body)
|
39
|
-
# check that we cannot register if not logged in
|
40
|
-
assert response.status_code == 403
|
41
|
-
# log in as admin
|
42
|
-
login_body = {"username": "admin@jupyter.com", "password": "jupyverse"}
|
43
|
-
response = await http.post(f"http://127.0.0.1:{port}/auth/login", data=login_body)
|
44
|
-
assert response.status_code == 204
|
45
|
-
# register user
|
46
|
-
response = await http.post(f"http://127.0.0.1:{port}/auth/register", json=register_body)
|
47
|
-
assert response.status_code == 201
|
48
|
-
|
49
|
-
# log out
|
50
|
-
response = await http.post(f"http://127.0.0.1:{port}/auth/logout")
|
51
|
-
assert response.status_code == 204
|
52
|
-
# check that we can't get our identity, since we're not logged in
|
53
|
-
response = await http.get(f"http://127.0.0.1:{port}/api/me")
|
54
|
-
assert response.status_code == 403
|
55
|
-
|
56
|
-
# log in with registered user
|
57
|
-
login_body = {"username": f"{username}@example.com", "password": username}
|
58
|
-
response = await http.post(f"http://127.0.0.1:{port}/auth/login", data=login_body)
|
59
|
-
assert response.status_code == 204
|
60
|
-
# we should now have a cookie
|
61
|
-
assert "fastapiusersauth" in http.cookies
|
62
|
-
# check our identity, since we're logged in
|
63
|
-
response = await http.get(
|
64
|
-
f"http://127.0.0.1:{port}/api/me", params={"permissions": permissions}
|
65
|
-
)
|
66
|
-
assert response.status_code == 200
|
67
|
-
me = response.json()
|
68
|
-
assert me["identity"]["username"] == username
|
69
|
-
# check our permissions
|
70
|
-
assert me["permissions"] == permissions
|
71
|
-
|
72
|
-
|
73
|
-
def create_content(
|
74
|
-
content: Optional[list],
|
75
|
-
type: str,
|
76
|
-
size: Optional[int],
|
77
|
-
mimetype: Optional[str],
|
78
|
-
name: str,
|
79
|
-
path: str,
|
80
|
-
format: Optional[str],
|
81
|
-
) -> dict:
|
82
|
-
return {
|
83
|
-
"content": content,
|
84
|
-
"created": None,
|
85
|
-
"format": format,
|
86
|
-
"last_modified": None,
|
87
|
-
"mimetype": mimetype,
|
88
|
-
"name": name,
|
89
|
-
"path": path,
|
90
|
-
"size": size,
|
91
|
-
"type": type,
|
92
|
-
"writable": True,
|
93
|
-
}
|
94
|
-
|
95
|
-
|
96
|
-
def clear_content_values(content: dict, keys: list[str] = []):
|
97
|
-
for k in content:
|
98
|
-
if k in keys:
|
99
|
-
content[k] = None
|
100
|
-
if k == "content" and isinstance(content[k], list):
|
101
|
-
for c in content[k]:
|
102
|
-
clear_content_values(c, keys)
|
103
|
-
return content
|
104
|
-
|
105
|
-
|
106
|
-
def sort_content_by_name(content: dict):
|
107
|
-
for k in content:
|
108
|
-
if k == "content" and isinstance(content[k], list):
|
109
|
-
# FIXME: this sorting algorithm is terrible!
|
110
|
-
names = [c["name"] for c in content[k]]
|
111
|
-
names.sort()
|
112
|
-
new_content = []
|
113
|
-
for name in names:
|
114
|
-
for i, c in enumerate(content[k]):
|
115
|
-
if c["name"] == name:
|
116
|
-
break
|
117
|
-
content[k].pop(i)
|
118
|
-
new_content.append(c)
|
119
|
-
content[k] = new_content
|
120
|
-
for c in content[k]:
|
121
|
-
sort_content_by_name(c)
|
122
|
-
return content
|
123
|
-
|
124
|
-
|
125
|
-
class Websocket:
|
126
|
-
def __init__(self, websocket, path: str):
|
127
|
-
self._websocket = websocket
|
128
|
-
self._path = path
|
129
|
-
self._send_lock = Lock()
|
130
|
-
|
131
|
-
@property
|
132
|
-
def path(self) -> str:
|
133
|
-
return self._path
|
134
|
-
|
135
|
-
def __aiter__(self):
|
136
|
-
return self
|
137
|
-
|
138
|
-
async def __anext__(self) -> bytes:
|
139
|
-
try:
|
140
|
-
message = await self.recv()
|
141
|
-
except Exception:
|
142
|
-
raise StopAsyncIteration()
|
143
|
-
return message
|
144
|
-
|
145
|
-
async def send(self, message: bytes):
|
146
|
-
async with self._send_lock:
|
147
|
-
await self._websocket.send_bytes(message)
|
148
|
-
|
149
|
-
async def recv(self) -> bytes:
|
150
|
-
b = await self._websocket.receive_bytes()
|
151
|
-
return bytes(b)
|
152
|
-
|
153
|
-
|
154
13
|
Scope = dict[str, typing.Any]
|
155
14
|
Message = dict[str, typing.Any]
|
156
15
|
Receive = typing.Callable[[], typing.Awaitable[Message]]
|
@@ -3,9 +3,10 @@ from __future__ import annotations
|
|
3
3
|
from abc import ABC, abstractmethod
|
4
4
|
from pathlib import Path
|
5
5
|
|
6
|
+
from anyioutils import ResourceLock
|
6
7
|
from fastapi import APIRouter, Depends, Request, Response
|
7
8
|
|
8
|
-
from jupyverse_api import
|
9
|
+
from jupyverse_api import Router
|
9
10
|
|
10
11
|
from ..app import App
|
11
12
|
from ..auth import Auth, User
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "jupyverse_api"
|
7
|
-
version = "0.
|
7
|
+
version = "0.11.0"
|
8
8
|
description = "The public API for Jupyverse"
|
9
9
|
readme = "README.md"
|
10
10
|
requires-python = ">=3.9"
|
@@ -31,6 +31,7 @@ dependencies = [
|
|
31
31
|
"fastapi >=0.95.0,<1",
|
32
32
|
"fps >=0.5.1,<0.6.0",
|
33
33
|
"anyio >=3.6.2,<5",
|
34
|
+
"anyioutils >=0.7.4",
|
34
35
|
]
|
35
36
|
|
36
37
|
[project.license]
|
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_auth"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the authentication API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
12
|
"aiosqlite",
|
13
13
|
"fastapi-users[sqlalchemy,oauth] >=14.0.1,<15.0.0",
|
14
|
-
"jupyverse-api >=0.
|
14
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
15
15
|
]
|
16
16
|
|
17
17
|
[[project.authors]]
|
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_auth_fief"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the authentication API, using Fief"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.8"
|
11
11
|
dependencies = [
|
12
12
|
"fief-client[fastapi]",
|
13
|
-
"jupyverse-api >=0.
|
13
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
14
14
|
]
|
15
15
|
|
16
16
|
[[project.authors]]
|
@@ -12,8 +12,8 @@ from anyio.abc import TaskStatus
|
|
12
12
|
from fastapi import APIRouter, Cookie, Depends, HTTPException, Request, WebSocket, status
|
13
13
|
from fastapi.responses import RedirectResponse
|
14
14
|
from httpx import AsyncClient
|
15
|
-
from jupyterhub.services.auth import HubOAuth
|
16
|
-
from jupyterhub.utils import isoformat
|
15
|
+
from jupyterhub.services.auth import HubOAuth # type: ignore[import-untyped]
|
16
|
+
from jupyterhub.utils import isoformat # type: ignore[import-untyped]
|
17
17
|
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
18
18
|
from sqlalchemy.future import select
|
19
19
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_auth_jupyterhub"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.2"
|
8
8
|
description = "An FPS plugin for the authentication API, using JupyterHbu"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
@@ -12,7 +12,7 @@ dependencies = [
|
|
12
12
|
"aiosqlite",
|
13
13
|
"httpx >=0.24.1,<1",
|
14
14
|
"jupyterhub >=4.0.1,<5",
|
15
|
-
"jupyverse-api >=0.
|
15
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
16
16
|
"anyio",
|
17
17
|
]
|
18
18
|
|
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_contents"
|
7
|
-
version = "0.10.
|
7
|
+
version = "0.10.1"
|
8
8
|
description = "An FPS plugin for the contents API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
12
|
"anyio >=3.6.2,<5",
|
13
|
-
"jupyverse-api >=0.
|
13
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
14
14
|
]
|
15
15
|
[[project.authors]]
|
16
16
|
name = "Jupyter Development Team"
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_file_id"
|
7
|
-
version = "0.2.
|
7
|
+
version = "0.2.2"
|
8
8
|
description = "An FPS plugin for the file ID API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
@@ -12,7 +12,7 @@ dependencies = [
|
|
12
12
|
"watchfiles >=1.0.4,<2",
|
13
13
|
"sqlite-anyio >=0.2.0,<0.3.0",
|
14
14
|
"anyio>=3.6.2,<5",
|
15
|
-
"jupyverse-api >=0.
|
15
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
16
16
|
]
|
17
17
|
[[project.authors]]
|
18
18
|
name = "Jupyter Development Team"
|
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_frontend"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the frontend related configuration"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
|
-
"jupyverse-api >=0.
|
12
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
13
13
|
]
|
14
14
|
|
15
15
|
[[project.authors]]
|
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_jupyterlab"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the JupyterLab API"
|
9
9
|
keywords = [ "jupyter", "server", "fastapi", "plugins" ]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
12
|
"jupyterlab-js >=4.4.2,<5",
|
13
|
-
"jupyverse-api >=0.
|
13
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
14
14
|
]
|
15
15
|
[[project.authors]]
|
16
16
|
name = "Jupyter Development Team"
|
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_kernel_subprocess"
|
7
|
-
version = "0.1.
|
7
|
+
version = "0.1.2"
|
8
8
|
description = "An FPS plugin for the kernel subprocess API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
|
-
"jupyverse-api >=0.
|
12
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
13
13
|
"anyio",
|
14
14
|
"pyzmq",
|
15
15
|
"zmq-anyio >=0.3.1,<0.4.0",
|
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_kernel_web_worker"
|
7
|
-
version = "0.1.
|
7
|
+
version = "0.1.4"
|
8
8
|
description = "An FPS plugin for the kernel web worker API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
|
-
"jupyverse-api >=0.
|
12
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
13
13
|
"anyio",
|
14
14
|
]
|
15
15
|
[[project.authors]]
|
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_kernels"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.2"
|
8
8
|
description = "An FPS plugin for the kernels API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
12
|
"python-dateutil",
|
13
13
|
"types-python-dateutil",
|
14
|
-
"jupyverse-api >=0.
|
14
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
15
15
|
"pycrdt >=0.10.3,<0.13.0",
|
16
16
|
"anyio",
|
17
17
|
]
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_lab"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the JupyterLab/Notebook API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
@@ -12,7 +12,7 @@ dependencies = [
|
|
12
12
|
"importlib_metadata >=3.6; python_version<'3.10'",
|
13
13
|
"babel",
|
14
14
|
"json5",
|
15
|
-
"jupyverse-api >=0.
|
15
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
16
16
|
]
|
17
17
|
[[project.authors]]
|
18
18
|
name = "Jupyter Development Team"
|
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_login"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the login API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
|
-
"jupyverse-api >=0.
|
12
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
13
13
|
]
|
14
14
|
[[project.authors]]
|
15
15
|
name = "Jupyter Development Team"
|
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_nbconvert"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the nbconvert API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
12
|
"nbconvert",
|
13
|
-
"jupyverse-api >=0.
|
13
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
14
14
|
]
|
15
15
|
[[project.authors]]
|
16
16
|
name = "Jupyter Development Team"
|
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_noauth"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.2"
|
8
8
|
description = "An FPS plugin for an unprotected API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
|
-
"jupyverse-api >=0.
|
12
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
13
13
|
]
|
14
14
|
|
15
15
|
[[project.authors]]
|
@@ -27,8 +27,8 @@ text = "BSD 3-Clause License"
|
|
27
27
|
Homepage = "https://jupyter.org"
|
28
28
|
|
29
29
|
[project.entry-points]
|
30
|
-
"fps.modules" = {
|
31
|
-
"jupyverse.modules" = {
|
30
|
+
"fps.modules" = {noauth = "fps_noauth.main:NoAuthModule"}
|
31
|
+
"jupyverse.modules" = {noauth = "fps_noauth.main:NoAuthModule"}
|
32
32
|
|
33
33
|
[tool.check-manifest]
|
34
34
|
ignore = [ ".*",]
|
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_notebook"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the Notebook API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
12
|
"notebook-frontend >=7.4.2,<8.0.0",
|
13
|
-
"jupyverse-api >=0.
|
13
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
14
14
|
]
|
15
15
|
[[project.authors]]
|
16
16
|
name = "Jupyter Development Team"
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_resource_usage"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the resource usage API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
@@ -12,7 +12,7 @@ dependencies = [
|
|
12
12
|
"psutil >=5.9.4",
|
13
13
|
"types-psutil",
|
14
14
|
"anyio >=3.6.2,<5",
|
15
|
-
"jupyverse-api >=0.
|
15
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
16
16
|
]
|
17
17
|
[[project.authors]]
|
18
18
|
name = "Jupyter Development Team"
|
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "fps_terminals"
|
7
|
-
version = "0.9.
|
7
|
+
version = "0.9.1"
|
8
8
|
description = "An FPS plugin for the terminals API"
|
9
9
|
keywords = ["jupyter", "server", "fastapi", "plugins"]
|
10
10
|
requires-python = ">=3.9"
|
11
11
|
dependencies = [
|
12
12
|
"pywinpty;platform_system=='Windows'",
|
13
|
-
"jupyverse-api >=0.
|
13
|
+
"jupyverse-api >=0.11.0,<0.12.0",
|
14
14
|
"anyio >=4.8.0,<5.0.0",
|
15
15
|
]
|
16
16
|
[[project.authors]]
|