jupyverse 0.7.3__tar.gz → 0.7.5__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.3 → jupyverse-0.7.5}/.pre-commit-config.yaml +1 -1
- {jupyverse-0.7.3 → jupyverse-0.7.5}/CHANGELOG.md +30 -2
- {jupyverse-0.7.3 → jupyverse-0.7.5}/PKG-INFO +1 -1
- jupyverse-0.7.5/jupyverse/__init__.py +1 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/__init__.py +1 -1
- jupyverse-0.7.5/plugins/auth/fps_auth/__init__.py +1 -0
- jupyverse-0.7.5/plugins/auth_fief/fps_auth_fief/__init__.py +1 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +1 -1
- jupyverse-0.7.5/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +29 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +21 -12
- jupyverse-0.7.5/plugins/contents/fps_contents/__init__.py +1 -0
- jupyverse-0.7.5/plugins/frontend/fps_frontend/__init__.py +1 -0
- jupyverse-0.7.5/plugins/jupyterlab/fps_jupyterlab/__init__.py +1 -0
- jupyverse-0.7.5/plugins/kernels/fps_kernels/__init__.py +1 -0
- jupyverse-0.7.5/plugins/lab/fps_lab/__init__.py +1 -0
- jupyverse-0.7.5/plugins/login/fps_login/__init__.py +1 -0
- jupyverse-0.7.5/plugins/nbconvert/fps_nbconvert/__init__.py +1 -0
- jupyverse-0.7.5/plugins/noauth/fps_noauth/__init__.py +1 -0
- jupyverse-0.7.5/plugins/notebook/fps_notebook/__init__.py +1 -0
- jupyverse-0.7.5/plugins/resource_usage/fps_resource_usage/__init__.py +1 -0
- jupyverse-0.7.5/plugins/terminals/fps_terminals/__init__.py +1 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/terminals/fps_terminals/routes.py +3 -4
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/terminals/fps_terminals/server.py +16 -29
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/terminals/pyproject.toml +1 -1
- jupyverse-0.7.5/plugins/webdav/fps_webdav/__init__.py +1 -0
- jupyverse-0.7.5/plugins/yjs/fps_yjs/__init__.py +1 -0
- jupyverse-0.7.3/jupyverse/__init__.py +0 -1
- jupyverse-0.7.3/plugins/auth/fps_auth/__init__.py +0 -1
- jupyverse-0.7.3/plugins/auth_fief/fps_auth_fief/__init__.py +0 -1
- jupyverse-0.7.3/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +0 -34
- jupyverse-0.7.3/plugins/contents/fps_contents/__init__.py +0 -1
- jupyverse-0.7.3/plugins/frontend/fps_frontend/__init__.py +0 -1
- jupyverse-0.7.3/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -1
- jupyverse-0.7.3/plugins/kernels/fps_kernels/__init__.py +0 -1
- jupyverse-0.7.3/plugins/lab/fps_lab/__init__.py +0 -1
- jupyverse-0.7.3/plugins/login/fps_login/__init__.py +0 -1
- jupyverse-0.7.3/plugins/nbconvert/fps_nbconvert/__init__.py +0 -1
- jupyverse-0.7.3/plugins/noauth/fps_noauth/__init__.py +0 -1
- jupyverse-0.7.3/plugins/notebook/fps_notebook/__init__.py +0 -1
- jupyverse-0.7.3/plugins/resource_usage/fps_resource_usage/__init__.py +0 -1
- jupyverse-0.7.3/plugins/terminals/fps_terminals/__init__.py +0 -1
- jupyverse-0.7.3/plugins/webdav/fps_webdav/__init__.py +0 -1
- jupyverse-0.7.3/plugins/yjs/fps_yjs/__init__.py +0 -1
- {jupyverse-0.7.3 → jupyverse-0.7.5}/.devcontainer/devcontainer.json +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/.devcontainer/requirements.txt +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/.github/workflows/check-release.yml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/.github/workflows/test.yml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/.gitignore +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/CONTRIBUTING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/binder/environment.yml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/binder/jupyter_notebook_config.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/binder/postBuild +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/binder/start +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/index.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/install.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/jupyter.svg +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/auth.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/contents.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/frontend.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/jupyterlab.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/kernels.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/lab.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/login.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/nbconvert.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/notebook.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/resource_usage.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/terminals.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/plugins/yjs.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/usage/microservices.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/usage/multi_user.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/docs/usage/single_user.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/app/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/auth/models.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/cli.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/contents/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/contents/models.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/kernels/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/kernels/models.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/lab/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/login/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/main/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/notebook/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/terminals/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/yjs/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/jupyverse_api/tests/test_resource_lock.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/mkdocs.yml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/notebooks/admin_users.ipynb +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/notebooks/admin_users.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/fps_auth/backends.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/fps_auth/config.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/fps_auth/db.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/fps_auth/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/fps_auth/models.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/fps_auth/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/fps_auth/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_fief/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_fief/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_fief/fps_auth_fief/backend.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_fief/fps_auth_fief/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_fief/fps_auth_fief/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_fief/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/auth_jupyterhub/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/contents/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/contents/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/contents/fps_contents/fileid.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/contents/fps_contents/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/contents/fps_contents/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/contents/fps_contents/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/contents/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/frontend/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/frontend/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/frontend/fps_frontend/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/frontend/fps_frontend/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/frontend/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/jupyterlab/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/jupyterlab/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/jupyterlab/fps_jupyterlab/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/jupyterlab/fps_jupyterlab/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/jupyterlab/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_driver/connect.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_driver/driver.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_driver/message.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_server/message.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/kernel_server/server.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/fps_kernels/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/kernels/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/lab/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/lab/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/lab/fps_lab/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/lab/fps_lab/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/lab/fps_lab/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/lab/fps_lab/static/favicon.ico +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/lab/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/index.html +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/logo/github.svg +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/logo/logo.png +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/fps_login/static/style/index.css +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/login/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/nbconvert/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/nbconvert/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/nbconvert/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/noauth/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/noauth/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/noauth/fps_noauth/backends.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/noauth/fps_noauth/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/noauth/fps_noauth/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/noauth/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/notebook/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/notebook/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/notebook/fps_notebook/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/notebook/fps_notebook/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/notebook/fps_notebook/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/notebook/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/resource_usage/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/resource_usage/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/resource_usage/fps_resource_usage/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/resource_usage/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/terminals/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/terminals/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/terminals/fps_terminals/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/terminals/fps_terminals/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/terminals/fps_terminals/win_server.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/fps_webdav/config.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/fps_webdav/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/fps_webdav/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/fps_webdav/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/tests/conftest.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/webdav/tests/test_webdav.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/COPYING.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/README.md +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/main.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/py.typed +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/routes.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ydocs/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ydocs/utils.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ydocs/ybasedoc.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ydocs/yblob.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ydocs/yfile.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ydocs/ynotebook.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ydocs/yunicode.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/plugins/yjs/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/pyproject.toml +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/pytest.ini +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/conftest.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/data/notebook0.ipynb +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/data/notebook1.ipynb +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/test_app.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/test_auth.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/test_contents.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/test_execute.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/test_kernels.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/test_server.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/test_settings.py +0 -0
- {jupyverse-0.7.3 → jupyverse-0.7.5}/tests/utils.py +0 -0
@@ -2,6 +2,36 @@
|
|
2
2
|
|
3
3
|
<!-- <START NEW CHANGELOG ENTRY> -->
|
4
4
|
|
5
|
+
## 0.7.5
|
6
|
+
|
7
|
+
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.4...3c652e450d8ce5e46d7ea1bb00c402d611c4f54f))
|
8
|
+
|
9
|
+
### Merged PRs
|
10
|
+
|
11
|
+
- Use AnyIO's wait_readable for terminals [#461](https://github.com/jupyter-server/jupyverse/pull/461) ([@davidbrochart](https://github.com/davidbrochart))
|
12
|
+
|
13
|
+
### Contributors to this release
|
14
|
+
|
15
|
+
([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2025-02-17&to=2025-02-26&type=c))
|
16
|
+
|
17
|
+
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-02-17..2025-02-26&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2025-02-17..2025-02-26&type=Issues)
|
18
|
+
|
19
|
+
<!-- <END NEW CHANGELOG ENTRY> -->
|
20
|
+
|
21
|
+
## 0.7.4
|
22
|
+
|
23
|
+
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.3...3dee770cdcb8ae2529874a0a73592d2744eed63e))
|
24
|
+
|
25
|
+
### Merged PRs
|
26
|
+
|
27
|
+
- Fix fps-auth-jupyterhub [#460](https://github.com/jupyter-server/jupyverse/pull/460) ([@davidbrochart](https://github.com/davidbrochart))
|
28
|
+
|
29
|
+
### Contributors to this release
|
30
|
+
|
31
|
+
([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2025-02-17&to=2025-02-17&type=c))
|
32
|
+
|
33
|
+
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-02-17..2025-02-17&type=Issues)
|
34
|
+
|
5
35
|
## 0.7.3
|
6
36
|
|
7
37
|
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.2...2c046e8db0203c7d90476bf11ab11b89c0b0af51))
|
@@ -16,8 +46,6 @@
|
|
16
46
|
|
17
47
|
[@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-02-15..2025-02-17&type=Issues)
|
18
48
|
|
19
|
-
<!-- <END NEW CHANGELOG ENTRY> -->
|
20
|
-
|
21
49
|
## 0.7.2
|
22
50
|
|
23
51
|
([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.1...4d739c76ef3891c6fe8b6e7397e215efe348e95b))
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1,29 @@
|
|
1
|
+
from anyio import create_task_group
|
2
|
+
from fps import Module
|
3
|
+
|
4
|
+
from jupyverse_api.app import App
|
5
|
+
from jupyverse_api.auth import Auth, AuthConfig
|
6
|
+
|
7
|
+
from .config import AuthJupyterHubConfig
|
8
|
+
from .routes import auth_factory
|
9
|
+
|
10
|
+
|
11
|
+
class AuthJupyterHubModule(Module):
|
12
|
+
def __init__(self, name: str, **kwargs):
|
13
|
+
super().__init__(name)
|
14
|
+
self.auth_jupyterhub_config = AuthJupyterHubConfig(**kwargs)
|
15
|
+
|
16
|
+
async def prepare(self) -> None:
|
17
|
+
self.put(self.auth_jupyterhub_config, AuthConfig)
|
18
|
+
app = await self.get(App)
|
19
|
+
|
20
|
+
self.auth_jupyterhub = auth_factory(app, self.auth_jupyterhub_config)
|
21
|
+
|
22
|
+
async with create_task_group() as self.tg:
|
23
|
+
await self.tg.start(self.auth_jupyterhub.start)
|
24
|
+
self.put(self.auth_jupyterhub, Auth)
|
25
|
+
self.done()
|
26
|
+
|
27
|
+
async def stop(self) -> None:
|
28
|
+
await self.auth_jupyterhub.stop()
|
29
|
+
self.tg.cancel_scope.cancel()
|
@@ -6,14 +6,14 @@ from datetime import datetime
|
|
6
6
|
from functools import partial
|
7
7
|
from typing import Any, Awaitable, Callable, Dict, List, Optional, Tuple, Union
|
8
8
|
|
9
|
-
from anyio import TASK_STATUS_IGNORED, Lock, create_task_group
|
9
|
+
from anyio import TASK_STATUS_IGNORED, Lock, create_task_group, sleep
|
10
10
|
from anyio.abc import TaskStatus
|
11
11
|
from fastapi import APIRouter, Cookie, Depends, HTTPException, Request, WebSocket, status
|
12
12
|
from fastapi.responses import RedirectResponse
|
13
13
|
from httpx import AsyncClient
|
14
14
|
from jupyterhub.services.auth import HubOAuth
|
15
15
|
from jupyterhub.utils import isoformat
|
16
|
-
from sqlalchemy.ext.asyncio import AsyncSession
|
16
|
+
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
17
17
|
from sqlalchemy.future import select
|
18
18
|
from typing_extensions import Annotated
|
19
19
|
|
@@ -21,18 +21,22 @@ from jupyverse_api import Router
|
|
21
21
|
from jupyverse_api.app import App
|
22
22
|
from jupyverse_api.auth import Auth, User
|
23
23
|
|
24
|
-
from .
|
24
|
+
from .config import AuthJupyterHubConfig
|
25
|
+
from .db import Base, UserDB
|
25
26
|
from .models import JupyterHubUser
|
26
27
|
|
27
28
|
|
28
29
|
def auth_factory(
|
29
30
|
app: App,
|
30
|
-
|
31
|
-
http_client: AsyncClient,
|
31
|
+
auth_jupyterhub_config: AuthJupyterHubConfig,
|
32
32
|
):
|
33
33
|
class AuthJupyterHub(Auth, Router):
|
34
34
|
def __init__(self) -> None:
|
35
35
|
super().__init__(app)
|
36
|
+
self.db_engine = create_async_engine(auth_jupyterhub_config.db_url)
|
37
|
+
self.db_session = AsyncSession(self.db_engine)
|
38
|
+
|
39
|
+
self.http_client = AsyncClient()
|
36
40
|
self.hub_auth = HubOAuth()
|
37
41
|
self.db_lock = Lock()
|
38
42
|
self.activity_url = os.environ.get("JUPYTERHUB_ACTIVITY_URL")
|
@@ -57,14 +61,14 @@ def auth_factory(
|
|
57
61
|
token = self.hub_auth.token_for_code(code)
|
58
62
|
hub_user = await self.hub_auth.user_for_token(token, use_cache=False, sync=False)
|
59
63
|
async with self.db_lock:
|
60
|
-
db_session.add(
|
64
|
+
self.db_session.add(
|
61
65
|
UserDB(
|
62
66
|
token=token,
|
63
67
|
name=hub_user["name"],
|
64
68
|
username=hub_user["name"],
|
65
69
|
),
|
66
70
|
)
|
67
|
-
await db_session.commit()
|
71
|
+
await self.db_session.commit()
|
68
72
|
|
69
73
|
next_url = self.hub_auth.get_next_url(cookie_state)
|
70
74
|
response = RedirectResponse(next_url)
|
@@ -115,7 +119,7 @@ def auth_factory(
|
|
115
119
|
)
|
116
120
|
|
117
121
|
async with self.db_lock:
|
118
|
-
user_db = await db_session.scalar(
|
122
|
+
user_db = await self.db_session.scalar(
|
119
123
|
select(UserDB).filter_by(token=jupyverse_jupyterhub_token)
|
120
124
|
)
|
121
125
|
user = JupyterHubUser.model_validate(user_db)
|
@@ -154,13 +158,18 @@ def auth_factory(
|
|
154
158
|
return _
|
155
159
|
|
156
160
|
async def start(self, *, task_status: TaskStatus[None] = TASK_STATUS_IGNORED) -> None:
|
161
|
+
async with self.db_engine.begin() as conn:
|
162
|
+
await conn.run_sync(Base.metadata.create_all)
|
163
|
+
|
157
164
|
async with create_task_group() as tg:
|
158
165
|
self.task_group = tg
|
159
166
|
task_status.started()
|
167
|
+
await sleep(float("inf"))
|
160
168
|
|
161
169
|
async def stop(self) -> None:
|
162
170
|
await self.http_client.aclose()
|
163
|
-
self.
|
171
|
+
await self.db_session.close()
|
172
|
+
await self.db_engine.dispose()
|
164
173
|
|
165
174
|
async def update_user(
|
166
175
|
self, jupyverse_jupyterhub_token: Annotated[Union[str, None], Cookie()] = None
|
@@ -168,12 +177,12 @@ def auth_factory(
|
|
168
177
|
async def _(data: Dict[str, Any]) -> JupyterHubUser | None:
|
169
178
|
if jupyverse_jupyterhub_token is not None:
|
170
179
|
async with self.db_lock:
|
171
|
-
user_db = await db_session.scalar(
|
180
|
+
user_db = await self.db_session.scalar(
|
172
181
|
select(UserDB).filter_by(token=jupyverse_jupyterhub_token)
|
173
182
|
)
|
174
183
|
for k, v in data.items():
|
175
184
|
setattr(user_db, k, v)
|
176
|
-
await db_session.commit()
|
185
|
+
await self.db_session.commit()
|
177
186
|
user = JupyterHubUser.model_validate(user_db)
|
178
187
|
return user
|
179
188
|
return None
|
@@ -191,7 +200,7 @@ def auth_factory(
|
|
191
200
|
if "jupyverse_jupyterhub_token" in websocket._cookies:
|
192
201
|
jupyverse_jupyterhub_token = websocket._cookies["jupyverse_jupyterhub_token"]
|
193
202
|
async with self.db_lock:
|
194
|
-
user_db = await db_session.scalar(
|
203
|
+
user_db = await self.db_session.scalar(
|
195
204
|
select(UserDB).filter_by(token=jupyverse_jupyterhub_token)
|
196
205
|
)
|
197
206
|
if user_db:
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -3,7 +3,7 @@ from http import HTTPStatus
|
|
3
3
|
from typing import Any, Dict, Type
|
4
4
|
|
5
5
|
import structlog
|
6
|
-
from anyio import Event
|
6
|
+
from anyio import Event
|
7
7
|
from fastapi import Response
|
8
8
|
|
9
9
|
from jupyverse_api.app import App
|
@@ -25,9 +25,8 @@ class _Terminals(Terminals):
|
|
25
25
|
await self.stop_event.wait()
|
26
26
|
|
27
27
|
async def stop(self):
|
28
|
-
|
29
|
-
|
30
|
-
tg.start_soon(terminal["server"].stop)
|
28
|
+
for terminal in TERMINALS.values():
|
29
|
+
terminal["server"].quit()
|
31
30
|
self.stop_event.set()
|
32
31
|
|
33
32
|
async def get_terminals(
|
@@ -1,13 +1,17 @@
|
|
1
1
|
import fcntl
|
2
2
|
import os
|
3
3
|
import pty
|
4
|
-
import selectors
|
5
4
|
import shlex
|
6
5
|
import struct
|
7
6
|
import termios
|
8
7
|
from functools import partial
|
9
8
|
|
10
|
-
from anyio import
|
9
|
+
from anyio import (
|
10
|
+
Lock,
|
11
|
+
create_memory_object_stream,
|
12
|
+
create_task_group,
|
13
|
+
wait_readable,
|
14
|
+
)
|
11
15
|
from anyio.abc import ByteReceiveStream, ByteSendStream
|
12
16
|
from fastapi import WebSocketDisconnect
|
13
17
|
|
@@ -78,10 +82,6 @@ class _TerminalServer(TerminalServer):
|
|
78
82
|
self.task_group.cancel_scope.cancel()
|
79
83
|
|
80
84
|
def quit(self, websocket=None):
|
81
|
-
try:
|
82
|
-
self.recv_stream_from_backend.sel.unregister(self.p_out)
|
83
|
-
except Exception:
|
84
|
-
pass
|
85
85
|
if websocket is None:
|
86
86
|
self.websockets.clear()
|
87
87
|
elif websocket in self.websockets:
|
@@ -103,33 +103,20 @@ class ReceiveStream(ByteReceiveStream):
|
|
103
103
|
self.p_out = p_out
|
104
104
|
self.task_group = task_group
|
105
105
|
self.quit = quit
|
106
|
-
self.sel = selectors.DefaultSelector()
|
107
|
-
self.sel.register(self.p_out, selectors.EVENT_READ, self._read)
|
108
106
|
self.send_stream, self.recv_stream = create_memory_object_stream[bytes](
|
109
107
|
max_buffer_size=65536
|
110
108
|
)
|
109
|
+
task_group.start_soon(self.read)
|
111
110
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
task_group.start_soon(partial(to_thread.run_sync, reader, abandon_on_cancel=True))
|
123
|
-
|
124
|
-
def _read(self) -> bool:
|
125
|
-
try:
|
126
|
-
data = self.p_out.read(65536)
|
127
|
-
except OSError:
|
128
|
-
from_thread.run_sync(self.quit)
|
129
|
-
return True
|
130
|
-
else:
|
131
|
-
from_thread.run_sync(self.send_stream.send_nowait, data)
|
132
|
-
return False
|
111
|
+
async def read(self):
|
112
|
+
while True:
|
113
|
+
await wait_readable(self.p_out)
|
114
|
+
try:
|
115
|
+
data = self.p_out.read(65536)
|
116
|
+
except OSError:
|
117
|
+
self.quit()
|
118
|
+
return
|
119
|
+
await self.send_stream.send(data)
|
133
120
|
|
134
121
|
async def receive(self, max_bytes: int = 65536) -> bytes:
|
135
122
|
data = await self.recv_stream.receive()
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.7.5"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1,34 +0,0 @@
|
|
1
|
-
import httpx
|
2
|
-
from fps import Module
|
3
|
-
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
4
|
-
|
5
|
-
from jupyverse_api.app import App
|
6
|
-
from jupyverse_api.auth import Auth, AuthConfig
|
7
|
-
|
8
|
-
from .config import AuthJupyterHubConfig
|
9
|
-
from .db import Base
|
10
|
-
from .routes import auth_factory
|
11
|
-
|
12
|
-
|
13
|
-
class AuthJupyterHubModule(Module):
|
14
|
-
def __init__(self, name: str, **kwargs):
|
15
|
-
super().__init__(name)
|
16
|
-
self.auth_jupyterhub_config = AuthJupyterHubConfig(**kwargs)
|
17
|
-
|
18
|
-
async def prepare(self) -> None:
|
19
|
-
self.put(self.auth_jupyterhub_config, AuthConfig)
|
20
|
-
app = await self.get(App)
|
21
|
-
self.db_engine = create_async_engine(self.auth_jupyterhub_config.db_url)
|
22
|
-
self.db_session = AsyncSession(self.db_engine)
|
23
|
-
|
24
|
-
self.http_client = httpx.AsyncClient()
|
25
|
-
auth_jupyterhub = auth_factory(app, self.db_session, self.http_client)
|
26
|
-
self.put(auth_jupyterhub, Auth)
|
27
|
-
|
28
|
-
async with self.db_engine.begin() as conn:
|
29
|
-
await conn.run_sync(Base.metadata.create_all)
|
30
|
-
|
31
|
-
async def stop(self) -> None:
|
32
|
-
await self.http_client.aclose()
|
33
|
-
await self.db_session.close()
|
34
|
-
await self.db_engine.dispose()
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "0.7.3"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|