jupyverse 0.7.6__tar.gz → 0.7.7__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.7.6 → jupyverse-0.7.7}/CHANGELOG.md +18 -2
- {jupyverse-0.7.6 → jupyverse-0.7.7}/PKG-INFO +2 -1
- jupyverse-0.7.7/jupyverse/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/__init__.py +9 -9
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/app/__init__.py +2 -3
- jupyverse-0.7.7/jupyverse_api/jupyverse_api/auth/__init__.py +27 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/auth/models.py +4 -4
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/cli.py +10 -17
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/contents/__init__.py +20 -37
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/contents/models.py +9 -9
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +5 -10
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/kernels/__init__.py +19 -33
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/kernels/models.py +3 -3
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/lab/__init__.py +15 -26
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/login/__init__.py +1 -2
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/main/__init__.py +3 -4
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +2 -4
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/notebook/__init__.py +5 -10
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +1 -2
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/terminals/__init__.py +7 -14
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/yjs/__init__.py +3 -6
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/pyproject.toml +1 -1
- jupyverse-0.7.7/plugins/auth/fps_auth/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/fps_auth/backends.py +13 -11
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/fps_auth/config.py +4 -3
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/fps_auth/db.py +3 -2
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/fps_auth/models.py +1 -2
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/fps_auth/routes.py +10 -7
- jupyverse-0.7.7/plugins/auth_fief/fps_auth_fief/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/backend.py +7 -5
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/routes.py +9 -6
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +1 -1
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +1 -2
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +11 -11
- jupyverse-0.7.7/plugins/contents/fps_contents/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/contents/fps_contents/fileid.py +15 -12
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/contents/fps_contents/routes.py +9 -9
- jupyverse-0.7.7/plugins/frontend/fps_frontend/__init__.py +1 -0
- jupyverse-0.7.7/plugins/jupyterlab/fps_jupyterlab/__init__.py +1 -0
- jupyverse-0.7.7/plugins/kernels/fps_kernels/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/connect.py +9 -9
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/driver.py +8 -6
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/message.py +22 -20
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/paths.py +4 -5
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_server/message.py +12 -10
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_server/server.py +12 -10
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/routes.py +8 -7
- jupyverse-0.7.7/plugins/lab/fps_lab/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/lab/fps_lab/routes.py +4 -3
- jupyverse-0.7.7/plugins/login/fps_login/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/routes.py +4 -2
- jupyverse-0.7.7/plugins/nbconvert/fps_nbconvert/__init__.py +1 -0
- jupyverse-0.7.7/plugins/noauth/fps_noauth/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/noauth/fps_noauth/backends.py +6 -4
- jupyverse-0.7.7/plugins/notebook/fps_notebook/__init__.py +1 -0
- jupyverse-0.7.7/plugins/resource_usage/fps_resource_usage/__init__.py +1 -0
- jupyverse-0.7.7/plugins/terminals/fps_terminals/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/main.py +1 -2
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/routes.py +3 -3
- jupyverse-0.7.7/plugins/webdav/fps_webdav/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/fps_webdav/config.py +3 -4
- jupyverse-0.7.7/plugins/yjs/fps_yjs/__init__.py +1 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/routes.py +5 -6
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/utils.py +5 -5
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/ybasedoc.py +8 -6
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/yblob.py +5 -3
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/ynotebook.py +10 -8
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/yunicode.py +4 -2
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +2 -1
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +1 -5
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +2 -1
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +2 -1
- {jupyverse-0.7.6 → jupyverse-0.7.7}/pyproject.toml +2 -1
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/utils.py +5 -5
- jupyverse-0.7.6/jupyverse/__init__.py +0 -1
- jupyverse-0.7.6/jupyverse_api/jupyverse_api/auth/__init__.py +0 -27
- jupyverse-0.7.6/plugins/auth/fps_auth/__init__.py +0 -1
- jupyverse-0.7.6/plugins/auth_fief/fps_auth_fief/__init__.py +0 -1
- jupyverse-0.7.6/plugins/contents/fps_contents/__init__.py +0 -1
- jupyverse-0.7.6/plugins/frontend/fps_frontend/__init__.py +0 -1
- jupyverse-0.7.6/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -1
- jupyverse-0.7.6/plugins/kernels/fps_kernels/__init__.py +0 -1
- jupyverse-0.7.6/plugins/lab/fps_lab/__init__.py +0 -1
- jupyverse-0.7.6/plugins/login/fps_login/__init__.py +0 -1
- jupyverse-0.7.6/plugins/nbconvert/fps_nbconvert/__init__.py +0 -1
- jupyverse-0.7.6/plugins/noauth/fps_noauth/__init__.py +0 -1
- jupyverse-0.7.6/plugins/notebook/fps_notebook/__init__.py +0 -1
- jupyverse-0.7.6/plugins/resource_usage/fps_resource_usage/__init__.py +0 -1
- jupyverse-0.7.6/plugins/terminals/fps_terminals/__init__.py +0 -1
- jupyverse-0.7.6/plugins/webdav/fps_webdav/__init__.py +0 -1
- jupyverse-0.7.6/plugins/yjs/fps_yjs/__init__.py +0 -1
- {jupyverse-0.7.6 → jupyverse-0.7.7}/.devcontainer/devcontainer.json +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/.devcontainer/requirements.txt +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/.github/workflows/check-release.yml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/.github/workflows/prep-release.yml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/.github/workflows/publish-release.yml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/.github/workflows/test.yml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/.gitignore +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/.pre-commit-config.yaml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/CONTRIBUTING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/binder/environment.yml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/binder/jupyter_notebook_config.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/binder/postBuild +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/binder/start +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/index.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/install.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/jupyter.svg +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/auth.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/contents.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/frontend.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/jupyterlab.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/kernels.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/lab.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/login.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/nbconvert.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/notebook.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/resource_usage.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/terminals.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/plugins/yjs.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/usage/microservices.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/usage/multi_user.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/docs/usage/single_user.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/jupyverse_api/tests/test_resource_lock.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/mkdocs.yml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/notebooks/admin_users.ipynb +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/notebooks/admin_users.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/fps_auth/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/fps_auth/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_fief/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_fief/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_fief/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/auth_jupyterhub/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/contents/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/contents/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/contents/fps_contents/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/contents/fps_contents/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/contents/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/frontend/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/frontend/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/frontend/fps_frontend/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/frontend/fps_frontend/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/frontend/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/jupyterlab/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/jupyterlab/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/jupyterlab/fps_jupyterlab/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/jupyterlab/fps_jupyterlab/routes.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/jupyterlab/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/kernels/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/lab/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/lab/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/lab/fps_lab/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/lab/fps_lab/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/lab/fps_lab/static/favicon.ico +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/lab/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/index.html +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/logo/github.svg +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/logo/logo.png +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/fps_login/static/style/index.css +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/login/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/nbconvert/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/nbconvert/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/nbconvert/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/noauth/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/noauth/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/noauth/fps_noauth/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/noauth/fps_noauth/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/noauth/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/notebook/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/notebook/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/notebook/fps_notebook/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/notebook/fps_notebook/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/notebook/fps_notebook/routes.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/notebook/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/resource_usage/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/resource_usage/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/resource_usage/fps_resource_usage/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/resource_usage/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/terminals/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/terminals/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/server.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/win_server.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/terminals/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/fps_webdav/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/fps_webdav/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/fps_webdav/routes.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/tests/conftest.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/webdav/tests/test_webdav.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/COPYING.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/README.md +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/main.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/py.typed +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/__init__.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/yfile.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/plugins/yjs/pyproject.toml +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/pytest.ini +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/conftest.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/data/notebook0.ipynb +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/data/notebook1.ipynb +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/test_app.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/test_auth.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/test_contents.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/test_execute.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/test_kernels.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/test_server.py +0 -0
- {jupyverse-0.7.6 → jupyverse-0.7.7}/tests/test_settings.py +0 -0
@@ -2,6 +2,24 @@
|
|
2
2
|
|
3
3
|
<!-- <START NEW CHANGELOG ENTRY> -->
|
4
4
|
|
5
|
+
## 0.7.7
|
6
|
+
|
7
|
+
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.6...69a1ecaa8f61a83c441d1c8e69a02835085fceb6))
|
8
|
+
|
9
|
+
### Merged PRs
|
10
|
+
|
11
|
+
- Check if file exists before inserting it in fileids [#478](https://github.com/jupyter-server/jupyverse/pull/478) ([@davidbrochart](https://github.com/davidbrochart))
|
12
|
+
- Bump fps >=0.2.1 [#476](https://github.com/jupyter-server/jupyverse/pull/476) ([@davidbrochart](https://github.com/davidbrochart))
|
13
|
+
- Update types [#475](https://github.com/jupyter-server/jupyverse/pull/475) ([@davidbrochart](https://github.com/davidbrochart))
|
14
|
+
|
15
|
+
### Contributors to this release
|
16
|
+
|
17
|
+
([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2025-03-28&to=2025-04-04&type=c))
|
18
|
+
|
19
|
+
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-03-28..2025-04-04&type=Issues)
|
20
|
+
|
21
|
+
<!-- <END NEW CHANGELOG ENTRY> -->
|
22
|
+
|
5
23
|
## 0.7.6
|
6
24
|
|
7
25
|
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.5...510ab6902fb8701df90fb542511b7daa2f7a9537))
|
@@ -21,8 +39,6 @@
|
|
21
39
|
|
22
40
|
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-02-26..2025-03-28&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2025-02-26..2025-03-28&type=Issues)
|
23
41
|
|
24
|
-
<!-- <END NEW CHANGELOG ENTRY> -->
|
25
|
-
|
26
42
|
## 0.7.5
|
27
43
|
|
28
44
|
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.4...3c652e450d8ce5e46d7ea1bb00c402d611c4f54f))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jupyverse
|
3
|
-
Version: 0.7.
|
3
|
+
Version: 0.7.7
|
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>
|
@@ -8,6 +8,7 @@ License: BSD 3-Clause License
|
|
8
8
|
License-File: COPYING.md
|
9
9
|
Keywords: fastapi,jupyter,plugins,server
|
10
10
|
Requires-Python: >=3.9
|
11
|
+
Requires-Dist: eval-type-backport; python_version < '3.10'
|
11
12
|
Requires-Dist: fps-contents<1,>=0.7.0
|
12
13
|
Requires-Dist: fps-frontend<1,>=0.7.0
|
13
14
|
Requires-Dist: fps-kernels<1,>=0.7.0
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.7"
|
@@ -1,19 +1,19 @@
|
|
1
|
-
from typing import Any
|
1
|
+
from typing import Any
|
2
2
|
|
3
3
|
from anyio import Event
|
4
4
|
from pydantic import BaseModel
|
5
5
|
|
6
6
|
from .app import App
|
7
7
|
|
8
|
-
__version__ = "0.7.
|
8
|
+
__version__ = "0.7.7"
|
9
9
|
|
10
10
|
|
11
11
|
class Singleton(type):
|
12
|
-
_instances:
|
12
|
+
_instances: dict = {}
|
13
13
|
|
14
14
|
def __call__(cls, *args, **kwargs):
|
15
15
|
if cls not in cls._instances:
|
16
|
-
cls._instances[cls] = super(
|
16
|
+
cls._instances[cls] = super().__call__(*args, **kwargs)
|
17
17
|
return cls._instances[cls]
|
18
18
|
|
19
19
|
|
@@ -45,9 +45,9 @@ class Router:
|
|
45
45
|
|
46
46
|
|
47
47
|
class ResourceLock:
|
48
|
-
"""ResourceLock ensures that accesses cannot be done concurrently on the same resource.
|
49
|
-
|
50
|
-
_locks:
|
48
|
+
"""ResourceLock ensures that accesses cannot be done concurrently on the same resource."""
|
49
|
+
|
50
|
+
_locks: dict[Any, Event]
|
51
51
|
|
52
52
|
def __init__(self):
|
53
53
|
self._locks = {}
|
@@ -58,10 +58,10 @@ class ResourceLock:
|
|
58
58
|
|
59
59
|
class _ResourceLock:
|
60
60
|
_idx: Any
|
61
|
-
_locks:
|
61
|
+
_locks: dict[Any, Event]
|
62
62
|
_lock: Event
|
63
63
|
|
64
|
-
def __init__(self, idx: Any, locks:
|
64
|
+
def __init__(self, idx: Any, locks: dict[Any, Event]):
|
65
65
|
self._idx = idx
|
66
66
|
self._locks = locks
|
67
67
|
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
from collections import defaultdict
|
4
4
|
from datetime import datetime, timezone
|
5
|
-
from typing import Dict, List
|
6
5
|
|
7
6
|
import structlog
|
8
7
|
from fastapi import FastAPI, Request
|
@@ -16,7 +15,7 @@ class App:
|
|
16
15
|
"""A wrapper around FastAPI that checks for endpoint path conflicts."""
|
17
16
|
|
18
17
|
_app: FastAPI
|
19
|
-
_router_paths:
|
18
|
+
_router_paths: dict[str, list[str]]
|
20
19
|
|
21
20
|
def __init__(self, app: FastAPI, mount_path: str | None = None):
|
22
21
|
if mount_path is None:
|
@@ -66,7 +65,7 @@ class App:
|
|
66
65
|
for _router, _paths in self._router_paths.items():
|
67
66
|
if path in _paths:
|
68
67
|
raise RuntimeError(
|
69
|
-
f"{_type
|
68
|
+
f"{_type} mounts a path that is already defined in {_router}: {path}"
|
70
69
|
)
|
71
70
|
self._router_paths[_type].append(path)
|
72
71
|
logger.debug("Path mounted", type=_type, path=path)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from abc import ABC, abstractmethod
|
4
|
+
from collections.abc import Awaitable
|
5
|
+
from typing import Any, Callable
|
6
|
+
|
7
|
+
from jupyverse_api import Config
|
8
|
+
|
9
|
+
from .models import User # noqa
|
10
|
+
|
11
|
+
|
12
|
+
class Auth(ABC):
|
13
|
+
@abstractmethod
|
14
|
+
def current_user(self, permissions: dict[str, list[str]] | None = None) -> Callable: ...
|
15
|
+
|
16
|
+
@abstractmethod
|
17
|
+
async def update_user(self) -> Callable: ...
|
18
|
+
|
19
|
+
@abstractmethod
|
20
|
+
def websocket_auth(
|
21
|
+
self,
|
22
|
+
permissions: dict[str, list[str]] | None = None,
|
23
|
+
) -> Callable[[Any], Awaitable[tuple[Any, dict[str, list[str]] | None] | None]]: ...
|
24
|
+
|
25
|
+
|
26
|
+
class AuthConfig(Config):
|
27
|
+
pass
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from
|
1
|
+
from __future__ import annotations
|
2
2
|
|
3
3
|
from pydantic import BaseModel
|
4
4
|
|
@@ -7,8 +7,8 @@ class User(BaseModel):
|
|
7
7
|
username: str = ""
|
8
8
|
name: str = ""
|
9
9
|
display_name: str = ""
|
10
|
-
initials:
|
11
|
-
color:
|
12
|
-
avatar_url:
|
10
|
+
initials: str | None = None
|
11
|
+
color: str | None = None
|
12
|
+
avatar_url: str | None = None
|
13
13
|
workspace: str = "{}"
|
14
14
|
settings: str = "{}"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import io
|
2
2
|
import json
|
3
3
|
import sys
|
4
|
-
from typing import Any
|
4
|
+
from typing import Any
|
5
5
|
|
6
6
|
import rich_click as click
|
7
7
|
from fps import main as fps_main
|
@@ -92,10 +92,10 @@ def main(
|
|
92
92
|
open_browser: bool = False,
|
93
93
|
host: str = "127.0.0.1",
|
94
94
|
port: int = 8000,
|
95
|
-
set_:
|
96
|
-
disable:
|
97
|
-
allow_origin:
|
98
|
-
query_param:
|
95
|
+
set_: tuple[str, ...] = (),
|
96
|
+
disable: tuple[str, ...] = (),
|
97
|
+
allow_origin: tuple[str, ...] = (),
|
98
|
+
query_param: tuple[str, ...] = (),
|
99
99
|
) -> None:
|
100
100
|
query_params_dict = {}
|
101
101
|
for qp in query_param:
|
@@ -103,7 +103,7 @@ def main(
|
|
103
103
|
query_params_dict[key] = value
|
104
104
|
query_params_str = json.dumps(query_params_dict)
|
105
105
|
allow_origins_str = json.dumps(allow_origin)
|
106
|
-
set_list:
|
106
|
+
set_list: list[str] = list(set_)
|
107
107
|
set_list.append(f"debug={debug}")
|
108
108
|
set_list.append(f"open_browser={open_browser}")
|
109
109
|
set_list.append(f"host={host}")
|
@@ -121,21 +121,14 @@ def main(
|
|
121
121
|
) # type: ignore
|
122
122
|
|
123
123
|
|
124
|
-
def get_pluggin_config(disable:
|
124
|
+
def get_pluggin_config(disable: tuple[str, ...]) -> dict[str, Any]:
|
125
125
|
jupyverse_modules = [
|
126
|
-
ep.name
|
127
|
-
for ep in entry_points(group="jupyverse.modules")
|
128
|
-
if ep.name not in disable
|
126
|
+
ep.name for ep in entry_points(group="jupyverse.modules") if ep.name not in disable
|
129
127
|
]
|
130
128
|
config = {
|
131
129
|
"jupyverse": {
|
132
|
-
"type":"jupyverse_api.main:JupyverseModule",
|
133
|
-
"modules": {
|
134
|
-
module: {
|
135
|
-
"type": module
|
136
|
-
}
|
137
|
-
for module in jupyverse_modules
|
138
|
-
}
|
130
|
+
"type": "jupyverse_api.main:JupyverseModule",
|
131
|
+
"modules": {module: {"type": module} for module in jupyverse_modules},
|
139
132
|
}
|
140
133
|
}
|
141
134
|
return config
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
from abc import ABC, abstractmethod
|
4
4
|
from pathlib import Path
|
5
|
-
from typing import Dict, List, Optional, Union
|
6
5
|
|
7
6
|
from fastapi import APIRouter, Depends, Request, Response
|
8
7
|
|
@@ -15,26 +14,20 @@ from .models import Checkpoint, Content, SaveContent
|
|
15
14
|
|
16
15
|
class FileIdManager(ABC):
|
17
16
|
@abstractmethod
|
18
|
-
async def start(self) -> None:
|
19
|
-
...
|
17
|
+
async def start(self) -> None: ...
|
20
18
|
|
21
19
|
@abstractmethod
|
22
|
-
async def stop(self) -> None:
|
23
|
-
...
|
20
|
+
async def stop(self) -> None: ...
|
24
21
|
|
25
22
|
@abstractmethod
|
26
|
-
async def get_path(self, file_id: str) -> str:
|
27
|
-
...
|
23
|
+
async def get_path(self, file_id: str) -> str: ...
|
28
24
|
|
29
25
|
@abstractmethod
|
30
|
-
async def get_id(self, file_path: str) -> str:
|
31
|
-
...
|
26
|
+
async def get_id(self, file_path: str) -> str: ...
|
32
27
|
|
33
|
-
def watch(self, path: str):
|
34
|
-
...
|
28
|
+
def watch(self, path: str): ...
|
35
29
|
|
36
|
-
def unwatch(self, path: str, watcher):
|
37
|
-
...
|
30
|
+
def unwatch(self, path: str, watcher): ...
|
38
31
|
|
39
32
|
|
40
33
|
class Contents(Router, ABC):
|
@@ -59,7 +52,7 @@ class Contents(Router, ABC):
|
|
59
52
|
status_code=201,
|
60
53
|
)
|
61
54
|
async def create_content(
|
62
|
-
path:
|
55
|
+
path: str | None,
|
63
56
|
request: Request,
|
64
57
|
user: User = Depends(auth.current_user(permissions={"contents": ["write"]})),
|
65
58
|
) -> Content:
|
@@ -75,7 +68,7 @@ class Contents(Router, ABC):
|
|
75
68
|
@router.get("/api/contents/{path:path}/checkpoints")
|
76
69
|
async def get_checkpoint(
|
77
70
|
path, user: User = Depends(auth.current_user(permissions={"contents": ["read"]}))
|
78
|
-
) ->
|
71
|
+
) -> list[Checkpoint]:
|
79
72
|
return await self.get_checkpoint(path, user)
|
80
73
|
|
81
74
|
@router.get("/api/contents/{path:path}")
|
@@ -117,35 +110,30 @@ class Contents(Router, ABC):
|
|
117
110
|
|
118
111
|
@property
|
119
112
|
@abstractmethod
|
120
|
-
def file_id_manager(self) -> FileIdManager:
|
121
|
-
...
|
113
|
+
def file_id_manager(self) -> FileIdManager: ...
|
122
114
|
|
123
115
|
@abstractmethod
|
124
116
|
async def read_content(
|
125
|
-
self, path:
|
126
|
-
) -> Content:
|
127
|
-
...
|
117
|
+
self, path: str | Path, get_content: bool, file_format: str | None = None
|
118
|
+
) -> Content: ...
|
128
119
|
|
129
120
|
@abstractmethod
|
130
|
-
async def write_content(self, content:
|
131
|
-
...
|
121
|
+
async def write_content(self, content: SaveContent | dict) -> None: ...
|
132
122
|
|
133
123
|
@abstractmethod
|
134
124
|
async def create_checkpoint(
|
135
125
|
self,
|
136
126
|
path,
|
137
127
|
user: User,
|
138
|
-
) -> Checkpoint:
|
139
|
-
...
|
128
|
+
) -> Checkpoint: ...
|
140
129
|
|
141
130
|
@abstractmethod
|
142
131
|
async def create_content(
|
143
132
|
self,
|
144
|
-
path:
|
133
|
+
path: str | None,
|
145
134
|
request: Request,
|
146
135
|
user: User,
|
147
|
-
) -> Content:
|
148
|
-
...
|
136
|
+
) -> Content: ...
|
149
137
|
|
150
138
|
@abstractmethod
|
151
139
|
async def get_root_content(
|
@@ -160,8 +148,7 @@ class Contents(Router, ABC):
|
|
160
148
|
self,
|
161
149
|
path,
|
162
150
|
user: User,
|
163
|
-
) ->
|
164
|
-
...
|
151
|
+
) -> list[Checkpoint]: ...
|
165
152
|
|
166
153
|
@abstractmethod
|
167
154
|
async def get_content(
|
@@ -169,8 +156,7 @@ class Contents(Router, ABC):
|
|
169
156
|
path: str,
|
170
157
|
content: int,
|
171
158
|
user: User,
|
172
|
-
) -> Content:
|
173
|
-
...
|
159
|
+
) -> Content: ...
|
174
160
|
|
175
161
|
@abstractmethod
|
176
162
|
async def save_content(
|
@@ -179,16 +165,14 @@ class Contents(Router, ABC):
|
|
179
165
|
request: Request,
|
180
166
|
response: Response,
|
181
167
|
user: User,
|
182
|
-
) -> Content:
|
183
|
-
...
|
168
|
+
) -> Content: ...
|
184
169
|
|
185
170
|
@abstractmethod
|
186
171
|
async def delete_content(
|
187
172
|
self,
|
188
173
|
path,
|
189
174
|
user: User,
|
190
|
-
):
|
191
|
-
...
|
175
|
+
): ...
|
192
176
|
|
193
177
|
@abstractmethod
|
194
178
|
async def rename_content(
|
@@ -196,5 +180,4 @@ class Contents(Router, ABC):
|
|
196
180
|
path,
|
197
181
|
request: Request,
|
198
182
|
user: User,
|
199
|
-
) -> Content:
|
200
|
-
...
|
183
|
+
) -> Content: ...
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from
|
1
|
+
from __future__ import annotations
|
2
2
|
|
3
3
|
from pydantic import BaseModel
|
4
4
|
|
@@ -11,24 +11,24 @@ class Checkpoint(BaseModel):
|
|
11
11
|
class Content(BaseModel):
|
12
12
|
name: str
|
13
13
|
path: str
|
14
|
-
last_modified:
|
15
|
-
created:
|
16
|
-
content:
|
17
|
-
format:
|
18
|
-
mimetype:
|
19
|
-
size:
|
14
|
+
last_modified: str | None = None
|
15
|
+
created: str | None = None
|
16
|
+
content: list[dict] | str | dict | None = None
|
17
|
+
format: str | None = None
|
18
|
+
mimetype: str | None = None
|
19
|
+
size: int | None = None
|
20
20
|
writable: bool
|
21
21
|
type: str
|
22
22
|
|
23
23
|
|
24
24
|
class CreateContent(BaseModel):
|
25
|
-
ext:
|
25
|
+
ext: str | None = None
|
26
26
|
path: str
|
27
27
|
type: str
|
28
28
|
|
29
29
|
|
30
30
|
class SaveContent(BaseModel):
|
31
|
-
content:
|
31
|
+
content: str | dict | None = None
|
32
32
|
format: str
|
33
33
|
path: str
|
34
34
|
type: str
|
@@ -55,19 +55,16 @@ class JupyterLab(Router, ABC):
|
|
55
55
|
async def get_lab(
|
56
56
|
self,
|
57
57
|
user: User,
|
58
|
-
):
|
59
|
-
...
|
58
|
+
): ...
|
60
59
|
|
61
60
|
@abstractmethod
|
62
61
|
async def load_workspace(
|
63
62
|
self,
|
64
63
|
path,
|
65
|
-
):
|
66
|
-
...
|
64
|
+
): ...
|
67
65
|
|
68
66
|
@abstractmethod
|
69
|
-
async def get_workspace_data(self, user: User):
|
70
|
-
...
|
67
|
+
async def get_workspace_data(self, user: User): ...
|
71
68
|
|
72
69
|
@abstractmethod
|
73
70
|
async def set_workspace(
|
@@ -75,16 +72,14 @@ class JupyterLab(Router, ABC):
|
|
75
72
|
request: Request,
|
76
73
|
user: User,
|
77
74
|
user_update,
|
78
|
-
):
|
79
|
-
...
|
75
|
+
): ...
|
80
76
|
|
81
77
|
@abstractmethod
|
82
78
|
async def get_workspace(
|
83
79
|
self,
|
84
80
|
name,
|
85
81
|
user: User,
|
86
|
-
):
|
87
|
-
...
|
82
|
+
): ...
|
88
83
|
|
89
84
|
|
90
85
|
class JupyterLabConfig(Config):
|
@@ -1,6 +1,7 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
from abc import ABC, abstractmethod
|
2
4
|
from pathlib import Path
|
3
|
-
from typing import List, Optional
|
4
5
|
|
5
6
|
from fastapi import APIRouter, Depends, Request
|
6
7
|
from pydantic import Field
|
@@ -61,7 +62,7 @@ class Kernels(Router, ABC):
|
|
61
62
|
@router.get("/api/sessions")
|
62
63
|
async def get_sessions(
|
63
64
|
user: User = Depends(auth.current_user(permissions={"sessions": ["read"]})),
|
64
|
-
) ->
|
65
|
+
) -> list[Session]:
|
65
66
|
return await self.get_sessions(user)
|
66
67
|
|
67
68
|
@router.post(
|
@@ -124,22 +125,19 @@ class Kernels(Router, ABC):
|
|
124
125
|
self.include_router(router)
|
125
126
|
|
126
127
|
@abstractmethod
|
127
|
-
async def watch_connection_files(self, path: Path) -> None:
|
128
|
-
...
|
128
|
+
async def watch_connection_files(self, path: Path) -> None: ...
|
129
129
|
|
130
130
|
@abstractmethod
|
131
131
|
async def get_status(
|
132
132
|
self,
|
133
133
|
user: User,
|
134
|
-
):
|
135
|
-
...
|
134
|
+
): ...
|
136
135
|
|
137
136
|
@abstractmethod
|
138
137
|
async def get_kernelspecs(
|
139
138
|
self,
|
140
139
|
user: User,
|
141
|
-
):
|
142
|
-
...
|
140
|
+
): ...
|
143
141
|
|
144
142
|
@abstractmethod
|
145
143
|
async def get_kernelspec(
|
@@ -147,62 +145,54 @@ class Kernels(Router, ABC):
|
|
147
145
|
kernel_name,
|
148
146
|
file_name,
|
149
147
|
user: User,
|
150
|
-
):
|
151
|
-
...
|
148
|
+
): ...
|
152
149
|
|
153
150
|
@abstractmethod
|
154
151
|
async def get_kernels(
|
155
152
|
self,
|
156
153
|
user: User,
|
157
|
-
):
|
158
|
-
...
|
154
|
+
): ...
|
159
155
|
|
160
156
|
@abstractmethod
|
161
157
|
async def delete_session(
|
162
158
|
self,
|
163
159
|
session_id: str,
|
164
160
|
user: User,
|
165
|
-
):
|
166
|
-
...
|
161
|
+
): ...
|
167
162
|
|
168
163
|
@abstractmethod
|
169
164
|
async def rename_session(
|
170
165
|
self,
|
171
166
|
request: Request,
|
172
167
|
user: User,
|
173
|
-
) -> Session:
|
174
|
-
...
|
168
|
+
) -> Session: ...
|
175
169
|
|
176
170
|
@abstractmethod
|
177
171
|
async def get_sessions(
|
178
172
|
self,
|
179
173
|
user: User,
|
180
|
-
) ->
|
181
|
-
...
|
174
|
+
) -> list[Session]: ...
|
182
175
|
|
183
176
|
@abstractmethod
|
184
177
|
async def create_session(
|
185
178
|
self,
|
186
179
|
request: Request,
|
187
180
|
user: User,
|
188
|
-
) -> Session:
|
189
|
-
...
|
181
|
+
) -> Session: ...
|
190
182
|
|
191
183
|
@abstractmethod
|
192
184
|
async def interrupt_kernel(
|
193
185
|
self,
|
194
186
|
kernel_id,
|
195
187
|
user: User,
|
196
|
-
):
|
197
|
-
...
|
188
|
+
): ...
|
198
189
|
|
199
190
|
@abstractmethod
|
200
191
|
async def restart_kernel(
|
201
192
|
self,
|
202
193
|
kernel_id,
|
203
194
|
user: User,
|
204
|
-
):
|
205
|
-
...
|
195
|
+
): ...
|
206
196
|
|
207
197
|
@abstractmethod
|
208
198
|
async def execute_cell(
|
@@ -210,24 +200,21 @@ class Kernels(Router, ABC):
|
|
210
200
|
request: Request,
|
211
201
|
kernel_id,
|
212
202
|
user: User,
|
213
|
-
):
|
214
|
-
...
|
203
|
+
): ...
|
215
204
|
|
216
205
|
@abstractmethod
|
217
206
|
async def get_kernel(
|
218
207
|
self,
|
219
208
|
kernel_id,
|
220
209
|
user: User,
|
221
|
-
):
|
222
|
-
...
|
210
|
+
): ...
|
223
211
|
|
224
212
|
@abstractmethod
|
225
213
|
async def shutdown_kernel(
|
226
214
|
self,
|
227
215
|
kernel_id,
|
228
216
|
user: User,
|
229
|
-
):
|
230
|
-
...
|
217
|
+
): ...
|
231
218
|
|
232
219
|
@abstractmethod
|
233
220
|
async def kernel_channels(
|
@@ -235,8 +222,7 @@ class Kernels(Router, ABC):
|
|
235
222
|
kernel_id,
|
236
223
|
session_id,
|
237
224
|
websocket_permissions,
|
238
|
-
):
|
239
|
-
...
|
225
|
+
): ...
|
240
226
|
|
241
227
|
|
242
228
|
class KernelsConfig(Config):
|
@@ -248,7 +234,7 @@ class KernelsConfig(Config):
|
|
248
234
|
),
|
249
235
|
default=False,
|
250
236
|
)
|
251
|
-
external_connection_dir:
|
237
|
+
external_connection_dir: str | None = Field(
|
252
238
|
description=(
|
253
239
|
"The directory to look at for external kernel connection files, if "
|
254
240
|
"allow_external_kernels is True. Defaults to Jupyter runtime_dir/external_kernels. "
|
@@ -1,11 +1,11 @@
|
|
1
|
-
from
|
1
|
+
from __future__ import annotations
|
2
2
|
|
3
3
|
from pydantic import BaseModel
|
4
4
|
|
5
5
|
|
6
6
|
class KernelInfo(BaseModel):
|
7
|
-
name:
|
8
|
-
id:
|
7
|
+
name: str | None = None
|
8
|
+
id: str | None = None
|
9
9
|
|
10
10
|
|
11
11
|
class CreateSession(BaseModel):
|