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.
Files changed (265) hide show
  1. {jupyverse-0.10.6 → jupyverse-0.10.9}/.github/workflows/test.yml +2 -10
  2. {jupyverse-0.10.6 → jupyverse-0.10.9}/.pre-commit-config.yaml +1 -1
  3. {jupyverse-0.10.6 → jupyverse-0.10.9}/CHANGELOG.md +9 -0
  4. {jupyverse-0.10.6 → jupyverse-0.10.9}/PKG-INFO +18 -19
  5. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/__init__.py +0 -35
  6. jupyverse-0.10.6/tests/utils.py → jupyverse-0.10.9/jupyverse_api/jupyverse_api/asgi_websocket_transport.py +0 -141
  7. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/contents/__init__.py +2 -1
  8. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/pyproject.toml +2 -1
  9. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/pyproject.toml +2 -2
  10. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/pyproject.toml +2 -2
  11. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +2 -2
  12. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/pyproject.toml +2 -2
  13. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/pyproject.toml +2 -2
  14. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/pyproject.toml +2 -2
  15. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/pyproject.toml +2 -2
  16. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/pyproject.toml +2 -2
  17. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/pyproject.toml +2 -2
  18. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/pyproject.toml +2 -2
  19. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/pyproject.toml +2 -2
  20. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/pyproject.toml +2 -2
  21. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/pyproject.toml +2 -2
  22. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/pyproject.toml +2 -2
  23. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/pyproject.toml +4 -4
  24. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/pyproject.toml +2 -2
  25. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/pyproject.toml +2 -2
  26. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/pyproject.toml +2 -2
  27. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/pyproject.toml +2 -2
  28. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/routes.py +37 -29
  29. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/pyproject.toml +3 -2
  30. jupyverse-0.10.9/plugins/yjs/tests/test_yjs.py +75 -0
  31. {jupyverse-0.10.6 → jupyverse-0.10.9}/pyproject.toml +31 -48
  32. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/conftest.py +8 -8
  33. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_kernels.py +1 -1
  34. jupyverse-0.10.9/tests/utils.py +141 -0
  35. jupyverse-0.10.6/jupyverse_api/tests/test_resource_lock.py +0 -57
  36. {jupyverse-0.10.6 → jupyverse-0.10.9}/.devcontainer/devcontainer.json +0 -0
  37. {jupyverse-0.10.6 → jupyverse-0.10.9}/.devcontainer/requirements.txt +0 -0
  38. {jupyverse-0.10.6 → jupyverse-0.10.9}/.github/workflows/publish-release.yml +0 -0
  39. {jupyverse-0.10.6 → jupyverse-0.10.9}/.gitignore +0 -0
  40. {jupyverse-0.10.6 → jupyverse-0.10.9}/COPYING.md +0 -0
  41. {jupyverse-0.10.6 → jupyverse-0.10.9}/README.md +0 -0
  42. {jupyverse-0.10.6 → jupyverse-0.10.9}/binder/environment.yml +0 -0
  43. {jupyverse-0.10.6 → jupyverse-0.10.9}/binder/jupyter_notebook_config.py +0 -0
  44. {jupyverse-0.10.6 → jupyverse-0.10.9}/binder/postBuild +0 -0
  45. {jupyverse-0.10.6 → jupyverse-0.10.9}/binder/start +0 -0
  46. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/index.md +0 -0
  47. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/install.md +0 -0
  48. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/jupyter.svg +0 -0
  49. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/auth.md +0 -0
  50. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/contents.md +0 -0
  51. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/frontend.md +0 -0
  52. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/jupyterlab.md +0 -0
  53. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/kernels.md +0 -0
  54. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/lab.md +0 -0
  55. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/login.md +0 -0
  56. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/nbconvert.md +0 -0
  57. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/notebook.md +0 -0
  58. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/resource_usage.md +0 -0
  59. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/terminals.md +0 -0
  60. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/plugins/yjs.md +0 -0
  61. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
  62. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
  63. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/usage/microservices.md +0 -0
  64. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/usage/multi_user.md +0 -0
  65. {jupyverse-0.10.6 → jupyverse-0.10.9}/docs/usage/single_user.md +0 -0
  66. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse/__init__.py +0 -0
  67. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse/py.typed +0 -0
  68. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/COPYING.md +0 -0
  69. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/README.md +0 -0
  70. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/app/__init__.py +0 -0
  71. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
  72. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/auth/models.py +0 -0
  73. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/cli.py +0 -0
  74. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/contents/models.py +0 -0
  75. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
  76. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/file_id/__init__.py +0 -0
  77. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
  78. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +0 -0
  79. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/kernel/__init__.py +0 -0
  80. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/kernels/__init__.py +0 -0
  81. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/kernels/models.py +0 -0
  82. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/lab/__init__.py +0 -0
  83. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/login/__init__.py +0 -0
  84. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/main/__init__.py +0 -0
  85. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +0 -0
  86. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/notebook/__init__.py +0 -0
  87. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/py.typed +0 -0
  88. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +0 -0
  89. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/terminals/__init__.py +0 -0
  90. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
  91. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/yjs/__init__.py +0 -0
  92. {jupyverse-0.10.6 → jupyverse-0.10.9}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
  93. {jupyverse-0.10.6 → jupyverse-0.10.9}/mkdocs.yml +0 -0
  94. {jupyverse-0.10.6 → jupyverse-0.10.9}/notebooks/admin_users.ipynb +0 -0
  95. {jupyverse-0.10.6 → jupyverse-0.10.9}/notebooks/admin_users.py +0 -0
  96. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/COPYING.md +0 -0
  97. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/README.md +0 -0
  98. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/__init__.py +0 -0
  99. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/backends.py +0 -0
  100. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/config.py +0 -0
  101. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/db.py +0 -0
  102. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/main.py +0 -0
  103. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/models.py +0 -0
  104. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/py.typed +0 -0
  105. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth/fps_auth/routes.py +0 -0
  106. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/COPYING.md +0 -0
  107. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/README.md +0 -0
  108. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/__init__.py +0 -0
  109. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/backend.py +0 -0
  110. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
  111. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/main.py +0 -0
  112. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
  113. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_fief/fps_auth_fief/routes.py +0 -0
  114. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/COPYING.md +0 -0
  115. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/README.md +0 -0
  116. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +0 -0
  117. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
  118. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
  119. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
  120. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +0 -0
  121. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +0 -0
  122. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
  123. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/COPYING.md +0 -0
  124. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/README.md +0 -0
  125. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/fps_contents/__init__.py +0 -0
  126. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/fps_contents/main.py +0 -0
  127. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/fps_contents/py.typed +0 -0
  128. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/contents/fps_contents/routes.py +0 -0
  129. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/COPYING.md +0 -0
  130. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/README.md +0 -0
  131. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/fps_file_id/__init__.py +0 -0
  132. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/fps_file_id/file_id.py +0 -0
  133. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/fps_file_id/main.py +0 -0
  134. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/file_id/fps_file_id/py.typed +0 -0
  135. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/COPYING.md +0 -0
  136. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/README.md +0 -0
  137. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/fps_frontend/__init__.py +0 -0
  138. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/fps_frontend/main.py +0 -0
  139. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/frontend/fps_frontend/py.typed +0 -0
  140. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/COPYING.md +0 -0
  141. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/README.md +0 -0
  142. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -0
  143. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
  144. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/main.py +0 -0
  145. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
  146. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/jupyterlab/fps_jupyterlab/routes.py +0 -0
  147. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/COPYING.md +0 -0
  148. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/README.md +0 -0
  149. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/__init__.py +0 -0
  150. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/connect.py +0 -0
  151. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/kernel_subprocess.py +0 -0
  152. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/main.py +0 -0
  153. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_subprocess/fps_kernel_subprocess/py.typed +0 -0
  154. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/COPYING.md +0 -0
  155. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/README.md +0 -0
  156. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/fps_kernel_web_worker/__init__.py +0 -0
  157. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/fps_kernel_web_worker/kernel_web_worker.py +0 -0
  158. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/fps_kernel_web_worker/main.py +0 -0
  159. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernel_web_worker/fps_kernel_web_worker/py.typed +0 -0
  160. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/COPYING.md +0 -0
  161. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/README.md +0 -0
  162. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/__init__.py +0 -0
  163. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
  164. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/driver.py +0 -0
  165. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
  166. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/message.py +0 -0
  167. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
  168. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
  169. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_server/message.py +0 -0
  170. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/kernel_server/server.py +0 -0
  171. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/main.py +0 -0
  172. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/py.typed +0 -0
  173. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/fps_kernels/routes.py +0 -0
  174. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/kernels/tests/test_kernel_launcher.py +0 -0
  175. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/COPYING.md +0 -0
  176. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/README.md +0 -0
  177. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/__init__.py +0 -0
  178. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/main.py +0 -0
  179. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/py.typed +0 -0
  180. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/routes.py +0 -0
  181. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/lab/fps_lab/static/favicon.ico +0 -0
  182. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/COPYING.md +0 -0
  183. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/README.md +0 -0
  184. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/__init__.py +0 -0
  185. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/main.py +0 -0
  186. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/py.typed +0 -0
  187. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/routes.py +0 -0
  188. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
  189. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
  190. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
  191. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
  192. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
  193. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
  194. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
  195. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/index.html +0 -0
  196. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/logo/github.svg +0 -0
  197. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/logo/logo.png +0 -0
  198. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/login/fps_login/static/style/index.css +0 -0
  199. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/COPYING.md +0 -0
  200. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/README.md +0 -0
  201. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/fps_nbconvert/__init__.py +0 -0
  202. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
  203. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
  204. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
  205. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/COPYING.md +0 -0
  206. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/README.md +0 -0
  207. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/fps_noauth/__init__.py +0 -0
  208. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/fps_noauth/backends.py +0 -0
  209. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/fps_noauth/main.py +0 -0
  210. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/noauth/fps_noauth/py.typed +0 -0
  211. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/COPYING.md +0 -0
  212. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/README.md +0 -0
  213. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/fps_notebook/__init__.py +0 -0
  214. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/fps_notebook/main.py +0 -0
  215. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/fps_notebook/py.typed +0 -0
  216. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/notebook/fps_notebook/routes.py +0 -0
  217. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/COPYING.md +0 -0
  218. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/README.md +0 -0
  219. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/fps_resource_usage/__init__.py +0 -0
  220. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/fps_resource_usage/main.py +0 -0
  221. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
  222. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
  223. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/COPYING.md +0 -0
  224. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/README.md +0 -0
  225. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/__init__.py +0 -0
  226. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/main.py +0 -0
  227. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/py.typed +0 -0
  228. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/routes.py +0 -0
  229. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/server.py +0 -0
  230. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/terminals/fps_terminals/win_server.py +0 -0
  231. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/COPYING.md +0 -0
  232. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/README.md +0 -0
  233. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/__init__.py +0 -0
  234. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/config.py +0 -0
  235. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/main.py +0 -0
  236. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/py.typed +0 -0
  237. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/fps_webdav/routes.py +0 -0
  238. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/tests/conftest.py +0 -0
  239. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/webdav/tests/test_webdav.py +0 -0
  240. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/COPYING.md +0 -0
  241. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/README.md +0 -0
  242. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/__init__.py +0 -0
  243. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/main.py +0 -0
  244. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/py.typed +0 -0
  245. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
  246. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +0 -0
  247. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
  248. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
  249. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +0 -0
  250. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
  251. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
  252. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +0 -0
  253. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +0 -0
  254. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
  255. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
  256. {jupyverse-0.10.6 → jupyverse-0.10.9}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
  257. {jupyverse-0.10.6 → jupyverse-0.10.9}/pytest.ini +0 -0
  258. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/data/notebook0.ipynb +0 -0
  259. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/data/notebook1.ipynb +0 -0
  260. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_app.py +0 -0
  261. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_auth.py +0 -0
  262. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_contents.py +0 -0
  263. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_execute.py +0 -0
  264. {jupyverse-0.10.6 → jupyverse-0.10.9}/tests/test_server.py +0 -0
  265. {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.jupyterlab-noauth:typecheck
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.jupyterlab-auth:test
58
+ run: hatch run dev:test
@@ -16,7 +16,7 @@ repos:
16
16
  - id: trailing-whitespace
17
17
 
18
18
  - repo: https://github.com/astral-sh/ruff-pre-commit
19
- rev: v0.12.4
19
+ rev: v0.12.5
20
20
  hooks:
21
21
  - id: ruff
22
22
  args: ["--fix"]
@@ -1,5 +1,14 @@
1
1
  # Version history
2
2
 
3
+ ## 0.10.9
4
+
5
+ - Move `ResourceLock` to `anyioutils`.
6
+
7
+ ## 0.10.7
8
+
9
+ - Lock on collaboration room cleanup.
10
+ - Move `ASGIWebSocketTransport` to `jupyverse_api`.
11
+
3
12
  ## 0.10.6
4
13
 
5
14
  - Bump `fps >=0.5.1`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jupyverse
3
- Version: 0.10.6
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.0
13
- Requires-Dist: fps-file-id<0.3.0,>=0.2.1
14
- Requires-Dist: fps-frontend<0.10.0,>=0.9.0
15
- Requires-Dist: fps-kernel-subprocess<0.2.0,>=0.1.1
16
- Requires-Dist: fps-kernels<0.10.0,>=0.9.1
17
- Requires-Dist: fps-lab<0.10.0,>=0.9.0
18
- Requires-Dist: fps-nbconvert<0.10.0,>=0.9.0
19
- Requires-Dist: fps-terminals<0.10.0,>=0.9.0
20
- Requires-Dist: fps-yjs<0.11.0,>=0.10.1
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.11.0,>=0.10.1
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.0; extra == 'auth'
26
- Requires-Dist: fps-login<0.10.0,>=0.9.0; extra == 'auth'
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.0; extra == 'auth-fief'
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.0; extra == 'auth-jupyterhub'
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.0; extra == 'jupyterlab'
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.0; extra == 'noauth'
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.0; extra == 'notebook'
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 ResourceLock, Router
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.10.2"
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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.1"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.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.10.1,<0.11.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.3"
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.10.1,<0.11.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.1"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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" = {auth = "fps_noauth.main:NoAuthModule"}
31
- "jupyverse.modules" = {auth = "fps_noauth.main:NoAuthModule"}
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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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.0"
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.10.0,<0.11.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]]