jupyverse 0.7.7__tar.gz → 0.8.0__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 (268) hide show
  1. jupyverse-0.8.0/.github/workflows/publish-release.yml +52 -0
  2. {jupyverse-0.7.7 → jupyverse-0.8.0}/.pre-commit-config.yaml +1 -1
  3. {jupyverse-0.7.7 → jupyverse-0.8.0}/CHANGELOG.md +23 -4
  4. {jupyverse-0.7.7 → jupyverse-0.8.0}/PKG-INFO +17 -16
  5. jupyverse-0.8.0/jupyverse/__init__.py +6 -0
  6. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/__init__.py +5 -1
  7. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/cli.py +1 -1
  8. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/lab/__init__.py +3 -5
  9. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/main/__init__.py +9 -3
  10. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/pyproject.toml +2 -2
  11. jupyverse-0.8.0/plugins/auth/fps_auth/__init__.py +6 -0
  12. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/pyproject.toml +2 -2
  13. jupyverse-0.8.0/plugins/auth_fief/fps_auth_fief/__init__.py +6 -0
  14. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_fief/pyproject.toml +2 -2
  15. jupyverse-0.8.0/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +8 -0
  16. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +1 -5
  17. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +1 -0
  18. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/pyproject.toml +2 -2
  19. jupyverse-0.8.0/plugins/contents/fps_contents/__init__.py +6 -0
  20. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/contents/fps_contents/main.py +1 -1
  21. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/contents/pyproject.toml +2 -2
  22. jupyverse-0.8.0/plugins/frontend/fps_frontend/__init__.py +6 -0
  23. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/frontend/pyproject.toml +2 -2
  24. jupyverse-0.8.0/plugins/jupyterlab/fps_jupyterlab/__init__.py +6 -0
  25. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/jupyterlab/fps_jupyterlab/routes.py +5 -4
  26. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/jupyterlab/pyproject.toml +3 -3
  27. jupyverse-0.8.0/plugins/kernels/fps_kernels/__init__.py +6 -0
  28. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_driver/driver.py +4 -8
  29. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/main.py +1 -4
  30. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/pyproject.toml +2 -2
  31. jupyverse-0.8.0/plugins/lab/fps_lab/__init__.py +6 -0
  32. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/lab/pyproject.toml +2 -2
  33. jupyverse-0.8.0/plugins/login/fps_login/__init__.py +6 -0
  34. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/pyproject.toml +2 -2
  35. jupyverse-0.8.0/plugins/nbconvert/fps_nbconvert/__init__.py +6 -0
  36. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/nbconvert/pyproject.toml +2 -2
  37. jupyverse-0.8.0/plugins/noauth/fps_noauth/__init__.py +6 -0
  38. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/noauth/pyproject.toml +2 -2
  39. jupyverse-0.8.0/plugins/notebook/fps_notebook/__init__.py +6 -0
  40. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/notebook/fps_notebook/routes.py +3 -3
  41. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/notebook/pyproject.toml +3 -3
  42. jupyverse-0.8.0/plugins/resource_usage/fps_resource_usage/__init__.py +6 -0
  43. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/resource_usage/pyproject.toml +2 -2
  44. jupyverse-0.8.0/plugins/terminals/fps_terminals/__init__.py +6 -0
  45. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/terminals/fps_terminals/main.py +1 -4
  46. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/terminals/pyproject.toml +2 -2
  47. jupyverse-0.8.0/plugins/webdav/fps_webdav/__init__.py +6 -0
  48. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/pyproject.toml +2 -2
  49. jupyverse-0.8.0/plugins/yjs/fps_yjs/__init__.py +6 -0
  50. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/main.py +2 -7
  51. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/routes.py +4 -2
  52. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/pyproject.toml +3 -2
  53. {jupyverse-0.7.7 → jupyverse-0.8.0}/pyproject.toml +38 -40
  54. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/test_execute.py +1 -1
  55. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/test_server.py +2 -2
  56. jupyverse-0.7.7/.github/workflows/check-release.yml +0 -64
  57. jupyverse-0.7.7/.github/workflows/prep-release.yml +0 -48
  58. jupyverse-0.7.7/.github/workflows/publish-release.yml +0 -58
  59. jupyverse-0.7.7/CONTRIBUTING.md +0 -16
  60. jupyverse-0.7.7/jupyverse/__init__.py +0 -1
  61. jupyverse-0.7.7/plugins/auth/fps_auth/__init__.py +0 -1
  62. jupyverse-0.7.7/plugins/auth_fief/fps_auth_fief/__init__.py +0 -1
  63. jupyverse-0.7.7/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +0 -3
  64. jupyverse-0.7.7/plugins/contents/fps_contents/__init__.py +0 -1
  65. jupyverse-0.7.7/plugins/frontend/fps_frontend/__init__.py +0 -1
  66. jupyverse-0.7.7/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -1
  67. jupyverse-0.7.7/plugins/kernels/fps_kernels/__init__.py +0 -1
  68. jupyverse-0.7.7/plugins/lab/fps_lab/__init__.py +0 -1
  69. jupyverse-0.7.7/plugins/login/fps_login/__init__.py +0 -1
  70. jupyverse-0.7.7/plugins/nbconvert/fps_nbconvert/__init__.py +0 -1
  71. jupyverse-0.7.7/plugins/noauth/fps_noauth/__init__.py +0 -1
  72. jupyverse-0.7.7/plugins/notebook/fps_notebook/__init__.py +0 -1
  73. jupyverse-0.7.7/plugins/resource_usage/fps_resource_usage/__init__.py +0 -1
  74. jupyverse-0.7.7/plugins/terminals/fps_terminals/__init__.py +0 -1
  75. jupyverse-0.7.7/plugins/webdav/fps_webdav/__init__.py +0 -1
  76. jupyverse-0.7.7/plugins/yjs/fps_yjs/__init__.py +0 -1
  77. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/__init__.py +0 -8
  78. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/utils.py +0 -26
  79. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/ybasedoc.py +0 -82
  80. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/yblob.py +0 -43
  81. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/yfile.py +0 -5
  82. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/ynotebook.py +0 -151
  83. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/yunicode.py +0 -35
  84. {jupyverse-0.7.7 → jupyverse-0.8.0}/.devcontainer/devcontainer.json +0 -0
  85. {jupyverse-0.7.7 → jupyverse-0.8.0}/.devcontainer/requirements.txt +0 -0
  86. {jupyverse-0.7.7 → jupyverse-0.8.0}/.github/workflows/test.yml +0 -0
  87. {jupyverse-0.7.7 → jupyverse-0.8.0}/.gitignore +0 -0
  88. {jupyverse-0.7.7 → jupyverse-0.8.0}/COPYING.md +0 -0
  89. {jupyverse-0.7.7 → jupyverse-0.8.0}/README.md +0 -0
  90. {jupyverse-0.7.7 → jupyverse-0.8.0}/binder/environment.yml +0 -0
  91. {jupyverse-0.7.7 → jupyverse-0.8.0}/binder/jupyter_notebook_config.py +0 -0
  92. {jupyverse-0.7.7 → jupyverse-0.8.0}/binder/postBuild +0 -0
  93. {jupyverse-0.7.7 → jupyverse-0.8.0}/binder/start +0 -0
  94. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/index.md +0 -0
  95. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/install.md +0 -0
  96. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/jupyter.svg +0 -0
  97. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/auth.md +0 -0
  98. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/contents.md +0 -0
  99. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/frontend.md +0 -0
  100. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/jupyterlab.md +0 -0
  101. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/kernels.md +0 -0
  102. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/lab.md +0 -0
  103. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/login.md +0 -0
  104. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/nbconvert.md +0 -0
  105. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/notebook.md +0 -0
  106. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/resource_usage.md +0 -0
  107. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/terminals.md +0 -0
  108. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/plugins/yjs.md +0 -0
  109. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
  110. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
  111. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/usage/microservices.md +0 -0
  112. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/usage/multi_user.md +0 -0
  113. {jupyverse-0.7.7 → jupyverse-0.8.0}/docs/usage/single_user.md +0 -0
  114. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse/py.typed +0 -0
  115. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/COPYING.md +0 -0
  116. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/README.md +0 -0
  117. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/app/__init__.py +0 -0
  118. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
  119. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/auth/models.py +0 -0
  120. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/contents/__init__.py +0 -0
  121. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/contents/models.py +0 -0
  122. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
  123. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
  124. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +0 -0
  125. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/kernels/__init__.py +0 -0
  126. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/kernels/models.py +0 -0
  127. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/login/__init__.py +0 -0
  128. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +0 -0
  129. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/notebook/__init__.py +0 -0
  130. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/py.typed +0 -0
  131. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +0 -0
  132. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/terminals/__init__.py +0 -0
  133. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
  134. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/yjs/__init__.py +0 -0
  135. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
  136. {jupyverse-0.7.7 → jupyverse-0.8.0}/jupyverse_api/tests/test_resource_lock.py +0 -0
  137. {jupyverse-0.7.7 → jupyverse-0.8.0}/mkdocs.yml +0 -0
  138. {jupyverse-0.7.7 → jupyverse-0.8.0}/notebooks/admin_users.ipynb +0 -0
  139. {jupyverse-0.7.7 → jupyverse-0.8.0}/notebooks/admin_users.py +0 -0
  140. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/COPYING.md +0 -0
  141. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/README.md +0 -0
  142. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/fps_auth/backends.py +0 -0
  143. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/fps_auth/config.py +0 -0
  144. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/fps_auth/db.py +0 -0
  145. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/fps_auth/main.py +0 -0
  146. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/fps_auth/models.py +0 -0
  147. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/fps_auth/py.typed +0 -0
  148. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth/fps_auth/routes.py +0 -0
  149. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_fief/COPYING.md +0 -0
  150. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_fief/README.md +0 -0
  151. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_fief/fps_auth_fief/backend.py +0 -0
  152. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
  153. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_fief/fps_auth_fief/main.py +0 -0
  154. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
  155. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_fief/fps_auth_fief/routes.py +0 -0
  156. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/COPYING.md +0 -0
  157. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/README.md +0 -0
  158. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
  159. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
  160. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
  161. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +0 -0
  162. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
  163. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/contents/COPYING.md +0 -0
  164. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/contents/README.md +0 -0
  165. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/contents/fps_contents/fileid.py +0 -0
  166. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/contents/fps_contents/py.typed +0 -0
  167. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/contents/fps_contents/routes.py +0 -0
  168. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/frontend/COPYING.md +0 -0
  169. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/frontend/README.md +0 -0
  170. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/frontend/fps_frontend/main.py +0 -0
  171. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/frontend/fps_frontend/py.typed +0 -0
  172. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/jupyterlab/COPYING.md +0 -0
  173. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/jupyterlab/README.md +0 -0
  174. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
  175. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/jupyterlab/fps_jupyterlab/main.py +0 -0
  176. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
  177. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/COPYING.md +0 -0
  178. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/README.md +0 -0
  179. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
  180. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_driver/connect.py +0 -0
  181. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
  182. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_driver/message.py +0 -0
  183. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
  184. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
  185. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_server/message.py +0 -0
  186. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/kernel_server/server.py +0 -0
  187. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/py.typed +0 -0
  188. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/kernels/fps_kernels/routes.py +0 -0
  189. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/lab/COPYING.md +0 -0
  190. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/lab/README.md +0 -0
  191. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/lab/fps_lab/main.py +0 -0
  192. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/lab/fps_lab/py.typed +0 -0
  193. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/lab/fps_lab/routes.py +0 -0
  194. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/lab/fps_lab/static/favicon.ico +0 -0
  195. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/COPYING.md +0 -0
  196. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/README.md +0 -0
  197. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/main.py +0 -0
  198. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/py.typed +0 -0
  199. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/routes.py +0 -0
  200. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
  201. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
  202. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
  203. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
  204. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
  205. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
  206. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
  207. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/index.html +0 -0
  208. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/logo/github.svg +0 -0
  209. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/logo/logo.png +0 -0
  210. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/login/fps_login/static/style/index.css +0 -0
  211. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/nbconvert/COPYING.md +0 -0
  212. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/nbconvert/README.md +0 -0
  213. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
  214. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
  215. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
  216. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/noauth/COPYING.md +0 -0
  217. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/noauth/README.md +0 -0
  218. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/noauth/fps_noauth/backends.py +0 -0
  219. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/noauth/fps_noauth/main.py +0 -0
  220. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/noauth/fps_noauth/py.typed +0 -0
  221. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/notebook/COPYING.md +0 -0
  222. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/notebook/README.md +0 -0
  223. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/notebook/fps_notebook/main.py +0 -0
  224. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/notebook/fps_notebook/py.typed +0 -0
  225. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/resource_usage/COPYING.md +0 -0
  226. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/resource_usage/README.md +0 -0
  227. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/resource_usage/fps_resource_usage/main.py +0 -0
  228. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
  229. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
  230. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/terminals/COPYING.md +0 -0
  231. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/terminals/README.md +0 -0
  232. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/terminals/fps_terminals/py.typed +0 -0
  233. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/terminals/fps_terminals/routes.py +0 -0
  234. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/terminals/fps_terminals/server.py +0 -0
  235. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/terminals/fps_terminals/win_server.py +0 -0
  236. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/COPYING.md +0 -0
  237. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/README.md +0 -0
  238. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/fps_webdav/config.py +0 -0
  239. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/fps_webdav/main.py +0 -0
  240. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/fps_webdav/py.typed +0 -0
  241. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/fps_webdav/routes.py +0 -0
  242. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/tests/conftest.py +0 -0
  243. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/webdav/tests/test_webdav.py +0 -0
  244. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/COPYING.md +0 -0
  245. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/README.md +0 -0
  246. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/py.typed +0 -0
  247. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
  248. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +0 -0
  249. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
  250. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
  251. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +0 -0
  252. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
  253. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
  254. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +0 -0
  255. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +0 -0
  256. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
  257. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
  258. {jupyverse-0.7.7 → jupyverse-0.8.0}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
  259. {jupyverse-0.7.7 → jupyverse-0.8.0}/pytest.ini +0 -0
  260. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/conftest.py +0 -0
  261. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/data/notebook0.ipynb +0 -0
  262. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/data/notebook1.ipynb +0 -0
  263. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/test_app.py +0 -0
  264. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/test_auth.py +0 -0
  265. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/test_contents.py +0 -0
  266. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/test_kernels.py +0 -0
  267. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/test_settings.py +0 -0
  268. {jupyverse-0.7.7 → jupyverse-0.8.0}/tests/utils.py +0 -0
@@ -0,0 +1,52 @@
1
+ name: Publish
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "[0-9]+.[0-9]+.[0-9]+"
7
+ - "[0-9]+.[0-9]+.[0-9]+.post[0-9]+"
8
+ - "[0-9]+.[0-9]+.[0-9]+[a-b][0-9]+"
9
+ - "[0-9]+.[0-9]+.[0-9]+rc[0-9]+"
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: astral-sh/setup-uv@v6
17
+ - run: |
18
+ uv build --all-packages
19
+ - uses: actions/upload-artifact@v4
20
+ with:
21
+ name: dist
22
+ path: dist
23
+
24
+ pypi-publish:
25
+ name: Upload release to PyPI
26
+ needs: build
27
+ runs-on: ubuntu-latest
28
+ environment: release
29
+ permissions:
30
+ id-token: write
31
+ steps:
32
+ - name: Retrieve packages
33
+ uses: actions/download-artifact@v4
34
+ - name: Upload packages
35
+ uses: pypa/gh-action-pypi-publish@release/v1
36
+
37
+ github-release:
38
+ name: Create GitHub release
39
+ needs: pypi-publish
40
+ runs-on: ubuntu-latest
41
+ permissions:
42
+ contents: write
43
+ steps:
44
+ - uses: actions/checkout@v4
45
+ - id: changelog
46
+ uses: agronholm/release-notes@v1
47
+ with:
48
+ path: CHANGELOG.md
49
+ version_pattern: ^\#\# ([0-9][^*]*)\n
50
+ - uses: ncipollo/release-action@v1
51
+ with:
52
+ body: ${{ steps.changelog.outputs.changelog }}
@@ -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.11.2
19
+ rev: v0.11.10
20
20
  hooks:
21
21
  - id: ruff
22
22
  args: ["--fix"]
@@ -1,6 +1,27 @@
1
- # Changes in Jupyverse {#changelog}
1
+ # Version history
2
2
 
3
- <!-- <START NEW CHANGELOG ENTRY> -->
3
+ ## 0.8.0
4
+
5
+ - Use `uv` for building and publishing.
6
+ - Update `fps` to v0.4.0.
7
+ - Depend on package `notebook-frontend` instead of `notebook`.
8
+ - Depend on package `jupyterlab-js` instead of `jupyterlab`.
9
+
10
+ ## 0.7.8
11
+
12
+ ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.7...aef97417f06bbb76e9a6b060b5f662dd555caaae))
13
+
14
+ ### Merged PRs
15
+
16
+ - Use jupyter-ydoc instead of vendored version [#484](https://github.com/jupyter-server/jupyverse/pull/484) ([@davidbrochart](https://github.com/davidbrochart))
17
+ - Upgrade FPS to v0.3.0 [#482](https://github.com/jupyter-server/jupyverse/pull/482) ([@davidbrochart](https://github.com/davidbrochart))
18
+ - Fix stream outputs [#480](https://github.com/jupyter-server/jupyverse/pull/480) ([@davidbrochart](https://github.com/davidbrochart))
19
+
20
+ ### Contributors to this release
21
+
22
+ ([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2025-04-04&to=2025-04-23&type=c))
23
+
24
+ [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-04-04..2025-04-23&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2025-04-04..2025-04-23&type=Issues)
4
25
 
5
26
  ## 0.7.7
6
27
 
@@ -18,8 +39,6 @@
18
39
 
19
40
  [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-03-28..2025-04-04&type=Issues)
20
41
 
21
- <!-- <END NEW CHANGELOG ENTRY> -->
22
-
23
42
  ## 0.7.6
24
43
 
25
44
  ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.5...510ab6902fb8701df90fb542511b7daa2f7a9537))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jupyverse
3
- Version: 0.7.7
3
+ Version: 0.8.0
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,30 +9,31 @@ 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<1,>=0.7.0
13
- Requires-Dist: fps-frontend<1,>=0.7.0
14
- Requires-Dist: fps-kernels<1,>=0.7.0
15
- Requires-Dist: fps-lab<1,>=0.7.0
16
- Requires-Dist: fps-nbconvert<1,>=0.7.0
17
- Requires-Dist: fps-terminals<1,>=0.7.0
18
- Requires-Dist: fps-yjs<1,>=0.7.0
19
- Requires-Dist: jupyverse-api<1,>=0.7.0
12
+ Requires-Dist: fps-contents<0.9.0,>=0.8.0
13
+ Requires-Dist: fps-frontend<0.9.0,>=0.8.0
14
+ Requires-Dist: fps-kernels<0.9.0,>=0.8.0
15
+ Requires-Dist: fps-lab<0.9.0,>=0.8.0
16
+ Requires-Dist: fps-nbconvert<0.9.0,>=0.8.0
17
+ Requires-Dist: fps-terminals<0.9.0,>=0.8.0
18
+ Requires-Dist: fps-yjs<0.9.0,>=0.8.0
19
+ Requires-Dist: fps[anycorn,click,fastapi]<0.5.0,>=0.4.0
20
+ Requires-Dist: jupyverse-api<0.9.0,>=0.8.0
20
21
  Provides-Extra: auth
21
- Requires-Dist: fps-auth<1,>=0.7.0; extra == 'auth'
22
- Requires-Dist: fps-login<1,>=0.7.0; extra == 'auth'
22
+ Requires-Dist: fps-auth<0.9.0,>=0.8.0; extra == 'auth'
23
+ Requires-Dist: fps-login<0.9.0,>=0.8.0; extra == 'auth'
23
24
  Provides-Extra: auth-fief
24
- Requires-Dist: fps-auth-fief<1,>=0.7.0; extra == 'auth-fief'
25
+ Requires-Dist: fps-auth-fief<0.9.0,>=0.8.0; extra == 'auth-fief'
25
26
  Provides-Extra: auth-jupyterhub
26
- Requires-Dist: fps-auth-jupyterhub<1,>=0.7.0; extra == 'auth-jupyterhub'
27
+ Requires-Dist: fps-auth-jupyterhub<0.9.0,>=0.8.0; extra == 'auth-jupyterhub'
27
28
  Provides-Extra: docs
28
29
  Requires-Dist: mkdocs; extra == 'docs'
29
30
  Requires-Dist: mkdocs-material; extra == 'docs'
30
31
  Provides-Extra: jupyterlab
31
- Requires-Dist: fps-jupyterlab<1,>=0.7.0; extra == 'jupyterlab'
32
+ Requires-Dist: fps-jupyterlab<0.9.0,>=0.8.0; extra == 'jupyterlab'
32
33
  Provides-Extra: noauth
33
- Requires-Dist: fps-noauth<1,>=0.7.0; extra == 'noauth'
34
+ Requires-Dist: fps-noauth<0.9.0,>=0.8.0; extra == 'noauth'
34
35
  Provides-Extra: notebook
35
- Requires-Dist: fps-notebook<1,>=0.7.0; extra == 'notebook'
36
+ Requires-Dist: fps-notebook<0.9.0,>=0.8.0; extra == 'notebook'
36
37
  Provides-Extra: test
37
38
  Requires-Dist: httpx; extra == 'test'
38
39
  Requires-Dist: httpx-ws>=0.4.1; extra == 'test'
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("jupyverse")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -1,3 +1,4 @@
1
+ import importlib.metadata
1
2
  from typing import Any
2
3
 
3
4
  from anyio import Event
@@ -5,7 +6,10 @@ from pydantic import BaseModel
5
6
 
6
7
  from .app import App
7
8
 
8
- __version__ = "0.7.7"
9
+ try:
10
+ __version__ = importlib.metadata.version("jupyverse_api")
11
+ except importlib.metadata.PackageNotFoundError:
12
+ __version__ = "unknown"
9
13
 
10
14
 
11
15
  class Singleton(type):
@@ -4,7 +4,7 @@ import sys
4
4
  from typing import Any
5
5
 
6
6
  import rich_click as click
7
- from fps import main as fps_main
7
+ from fps.cli._cli import main as fps_main
8
8
 
9
9
  if sys.version_info < (3, 10):
10
10
  from importlib_metadata import entry_points
@@ -29,13 +29,11 @@ class Lab(Router, ABC):
29
29
  self.federated_extensions, disabled_extensions = self.get_federated_extensions(
30
30
  self.extensions_dir
31
31
  )
32
- if jupyterlab_config is not None:
33
- import jupyterlab as jupyterlab_module # type: ignore
34
32
 
35
- jlab_dev_mode = jupyterlab_config.dev_mode
36
- else:
37
- jlab_dev_mode = False
33
+ jlab_dev_mode = False if jupyterlab_config is None else jupyterlab_config.dev_mode
38
34
  if jlab_dev_mode:
35
+ import jupyterlab as jupyterlab_module # type: ignore
36
+
39
37
  self.jlab_dir = Path(jupyterlab_module.__file__).parents[1] / "dev_mode"
40
38
  else:
41
39
  self.jlab_dir = self.prefix_dir / "share" / "jupyter" / "lab"
@@ -41,11 +41,16 @@ class JupyverseModule(FastAPIModule):
41
41
  structlog.stdlib.recreate_defaults(log_level=logging.DEBUG)
42
42
  super().__init__(
43
43
  name,
44
- host=self.jupyverse_config.host,
45
- port=self.jupyverse_config.port,
46
44
  debug=self.jupyverse_config.debug,
47
45
  )
48
46
  self.lifespan = Lifespan()
47
+ if self.jupyverse_config.start_server:
48
+ self.add_module(
49
+ "fps.web.server:ServerModule",
50
+ "server",
51
+ host=self.jupyverse_config.host,
52
+ port=self.jupyverse_config.port,
53
+ )
49
54
 
50
55
  async def prepare(self) -> None:
51
56
  await super().prepare()
@@ -71,7 +76,7 @@ class JupyverseModule(FastAPIModule):
71
76
  async def start(self) -> None:
72
77
  async with create_task_group() as tg:
73
78
  tg.start_soon(super().start)
74
- await self.started.wait()
79
+ await self.modules["server"].started.wait()
75
80
 
76
81
  # at this point, the server has started
77
82
  qp = self._query_params.d
@@ -101,6 +106,7 @@ class Lifespan:
101
106
 
102
107
 
103
108
  class JupyverseConfig(Config):
109
+ start_server: bool = True
104
110
  host: str = "127.0.0.1"
105
111
  port: int = 8000
106
112
  allow_origins: Json[list[str]] = []
@@ -29,9 +29,9 @@ dependencies = [
29
29
  "pydantic >=2,<3",
30
30
  "fastapi >=0.95.0,<1",
31
31
  "rich-click >=1.6.1,<2",
32
- "fps[web] >=0.2.1,<0.3.0",
32
+ "fps >=0.4.0,<0.5.0",
33
33
  ]
34
- dynamic = ["version"]
34
+ version = "0.8.0"
35
35
 
36
36
  [project.license]
37
37
  text = "BSD 3-Clause License"
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_auth")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -6,12 +6,12 @@ build-backend = "hatchling.build"
6
6
  name = "fps_auth"
7
7
  description = "An FPS plugin for the authentication API"
8
8
  keywords = ["jupyter", "server", "fastapi", "plugins"]
9
- dynamic = ["version"]
9
+ version = "0.8.0"
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.7.0,<1",
14
+ "jupyverse-api >=0.8.0,<0.9.0",
15
15
  ]
16
16
 
17
17
  [[project.authors]]
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_auth_fief")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -6,11 +6,11 @@ build-backend = "hatchling.build"
6
6
  name = "fps_auth_fief"
7
7
  description = "An FPS plugin for the authentication API, using Fief"
8
8
  keywords = ["jupyter", "server", "fastapi", "plugins"]
9
- dynamic = ["version"]
9
+ version = "0.8.0"
10
10
  requires-python = ">=3.8"
11
11
  dependencies = [
12
12
  "fief-client[fastapi]",
13
- "jupyverse-api >=0.7.0,<1",
13
+ "jupyverse-api >=0.8.0,<0.9.0",
14
14
  ]
15
15
 
16
16
  [[project.authors]]
@@ -0,0 +1,8 @@
1
+ import importlib.metadata
2
+
3
+ from .launch import launch # noqa
4
+
5
+ try:
6
+ __version__ = importlib.metadata.version("fps_auth_jupyterhub")
7
+ except importlib.metadata.PackageNotFoundError:
8
+ __version__ = "unknown"
@@ -21,9 +21,5 @@ class AuthJupyterHubModule(Module):
21
21
 
22
22
  async with create_task_group() as self.tg:
23
23
  await self.tg.start(self.auth_jupyterhub.start)
24
- self.put(self.auth_jupyterhub, Auth)
24
+ self.put(self.auth_jupyterhub, Auth, teardown_callback=self.auth_jupyterhub.stop)
25
25
  self.done()
26
-
27
- async def stop(self) -> None:
28
- await self.auth_jupyterhub.stop()
29
- self.tg.cancel_scope.cancel()
@@ -170,6 +170,7 @@ def auth_factory(
170
170
  await self.http_client.aclose()
171
171
  await self.db_session.close()
172
172
  await self.db_engine.dispose()
173
+ self.task_group.cancel_scope.cancel()
173
174
 
174
175
  async def update_user(
175
176
  self, jupyverse_jupyterhub_token: Annotated[str | None, Cookie()] = None
@@ -6,13 +6,13 @@ build-backend = "hatchling.build"
6
6
  name = "fps_auth_jupyterhub"
7
7
  description = "An FPS plugin for the authentication API, using JupyterHbu"
8
8
  keywords = ["jupyter", "server", "fastapi", "plugins"]
9
- dynamic = ["version"]
9
+ version = "0.8.0"
10
10
  requires-python = ">=3.9"
11
11
  dependencies = [
12
12
  "aiosqlite",
13
13
  "httpx >=0.24.1,<1",
14
14
  "jupyterhub >=4.0.1,<5",
15
- "jupyverse-api >=0.7.0,<1",
15
+ "jupyverse-api >=0.8.0,<0.9.0",
16
16
  "anyio",
17
17
  ]
18
18
 
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_contents")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -10,7 +10,7 @@ from .routes import _Contents
10
10
  class ContentsModule(Module):
11
11
  async def prepare(self) -> None:
12
12
  app = await self.get(App)
13
- auth = await self.get(Auth) # type: ignore
13
+ auth = await self.get(Auth) # type: ignore[type-abstract]
14
14
 
15
15
  contents = _Contents(app, auth)
16
16
  self.put(contents, Contents)
@@ -11,9 +11,9 @@ dependencies = [
11
11
  "watchfiles >=1.0.4,<2",
12
12
  "sqlite-anyio >=0.2.0,<0.3.0",
13
13
  "anyio>=3.6.2,<5",
14
- "jupyverse-api >=0.7.0,<1",
14
+ "jupyverse-api >=0.8.0,<0.9.0",
15
15
  ]
16
- dynamic = [ "version",]
16
+ version = "0.8.0"
17
17
  [[project.authors]]
18
18
  name = "Jupyter Development Team"
19
19
  email = "jupyter@googlegroups.com"
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_frontend")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -8,9 +8,9 @@ description = "An FPS plugin for the frontend related configuration"
8
8
  keywords = ["jupyter", "server", "fastapi", "plugins"]
9
9
  requires-python = ">=3.9"
10
10
  dependencies = [
11
- "jupyverse-api >=0.7.0,<1",
11
+ "jupyverse-api >=0.8.0,<0.9.0",
12
12
  ]
13
- dynamic = ["version"]
13
+ version = "0.8.0"
14
14
 
15
15
  [[project.authors]]
16
16
  name = "Jupyter Development Team"
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_jupyterlab")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -2,7 +2,7 @@ import json
2
2
  from http import HTTPStatus
3
3
  from pathlib import Path
4
4
 
5
- import jupyterlab as jupyterlab_module # type: ignore
5
+ import jupyterlab_js
6
6
  from fastapi import Response
7
7
  from fastapi.responses import HTMLResponse
8
8
  from fastapi.staticfiles import StaticFiles
@@ -37,9 +37,10 @@ class _JupyterLab(JupyterLab):
37
37
  self.federated_extensions, self.disabled_extensions = lab.get_federated_extensions(
38
38
  extensions_dir
39
39
  )
40
- jupyterlab_dir = Path(jupyterlab_module.__file__).parents[1]
41
-
42
40
  if jupyterlab_config.dev_mode:
41
+ import jupyterlab as jupyterlab_module # type: ignore
42
+
43
+ jupyterlab_dir = Path(jupyterlab_module.__file__).parents[1]
43
44
  self.static_lab_dir = jupyterlab_dir / "dev_mode" / "static"
44
45
  else:
45
46
  self.static_lab_dir = lab.prefix_dir / "share" / "jupyter" / "lab" / "static"
@@ -120,7 +121,7 @@ class _JupyterLab(JupyterLab):
120
121
  "appName": "JupyterLab",
121
122
  "appNamespace": "lab",
122
123
  "appUrl": "/lab",
123
- "appVersion": jupyterlab_module.__version__,
124
+ "appVersion": jupyterlab_js.__version__,
124
125
  "baseUrl": base_url,
125
126
  "cacheFiles": False,
126
127
  "collaborative": collaborative,
@@ -8,10 +8,10 @@ description = "An FPS plugin for the JupyterLab API"
8
8
  keywords = [ "jupyter", "server", "fastapi", "plugins" ]
9
9
  requires-python = ">=3.9"
10
10
  dependencies = [
11
- "jupyterlab >=4.0.0,<5",
12
- "jupyverse-api >=0.7.0,<1",
11
+ "jupyterlab-js >=4.4.2,<5",
12
+ "jupyverse-api >=0.8.0,<0.9.0",
13
13
  ]
14
- dynamic = [ "version",]
14
+ version = "0.8.0"
15
15
  [[project.authors]]
16
16
  name = "Jupyter Development Team"
17
17
  email = "jupyter@googlegroups.com"
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_kernels")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import os
4
3
  import time
5
4
  import uuid
6
5
  from typing import Any, cast
@@ -15,7 +14,7 @@ from anyio import (
15
14
  )
16
15
  from anyio.abc import TaskGroup, TaskStatus
17
16
  from anyio.streams.stapled import StapledObjectStream
18
- from pycrdt import Array, Map
17
+ from pycrdt import Array, Map, Text
19
18
 
20
19
  from jupyverse_api.yjs import Yjs
21
20
 
@@ -271,22 +270,19 @@ class KernelDriver:
271
270
  content = msg["content"]
272
271
  if msg_type == "stream":
273
272
  with outputs.doc.transaction():
274
- # TODO: uncomment when changes are made in jupyter-ydoc
275
- text = content["text"]
276
- if text.endswith((os.linesep, "\n")):
277
- text = text[:-1]
278
273
  if (not outputs) or (outputs[-1]["name"] != content["name"]): # type: ignore
279
274
  outputs.append(
280
275
  Map(
281
276
  {
282
277
  "name": content["name"],
283
278
  "output_type": msg_type,
284
- "text": Array([content["text"]]),
279
+ "text": Text(content["text"]),
285
280
  }
286
281
  )
287
282
  )
288
283
  else:
289
- outputs[-1]["text"].append(content["text"]) # type: ignore
284
+ text = outputs[-1]["text"]
285
+ text += content["text"] # type: ignore
290
286
  elif msg_type in ("display_data", "execute_result"):
291
287
  if "application/vnd.jupyter.ywidget-view+json" in content["data"]:
292
288
  # this is a collaborative widget
@@ -35,11 +35,8 @@ class KernelsModule(Module):
35
35
  )
36
36
 
37
37
  self.kernels = _Kernels(app, self.config, auth, frontend_config, yjs, lifespan)
38
- self.put(self.kernels, Kernels)
38
+ self.put(self.kernels, Kernels, teardown_callback=self.kernels.stop)
39
39
 
40
40
  async with create_task_group() as tg:
41
41
  tg.start_soon(self.kernels.start)
42
42
  self.done()
43
-
44
- async def stop(self) -> None:
45
- await self.kernels.stop()
@@ -14,11 +14,11 @@ dependencies = [
14
14
  "python-dateutil",
15
15
  "types-python-dateutil",
16
16
  "watchfiles >=1.0.4,<2",
17
- "jupyverse-api >=0.7.0,<1",
17
+ "jupyverse-api >=0.8.0,<0.9.0",
18
18
  "pycrdt >=0.10.3,<0.13.0",
19
19
  "anyio",
20
20
  ]
21
- dynamic = [ "version",]
21
+ version = "0.8.0"
22
22
  [[project.authors]]
23
23
  name = "Jupyter Development Team"
24
24
  email = "jupyter@googlegroups.com"
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_lab")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -11,9 +11,9 @@ dependencies = [
11
11
  "importlib_metadata >=3.6; python_version<'3.10'",
12
12
  "babel",
13
13
  "json5",
14
- "jupyverse-api >=0.7.0,<1",
14
+ "jupyverse-api >=0.8.0,<0.9.0",
15
15
  ]
16
- dynamic = [ "version",]
16
+ version = "0.8.0"
17
17
  [[project.authors]]
18
18
  name = "Jupyter Development Team"
19
19
  email = "jupyter@googlegroups.com"
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_login")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -8,9 +8,9 @@ description = "An FPS plugin for the login API"
8
8
  keywords = ["jupyter", "server", "fastapi", "plugins"]
9
9
  requires-python = ">=3.9"
10
10
  dependencies = [
11
- "jupyverse-api >=0.7.0,<1",
11
+ "jupyverse-api >=0.8.0,<0.9.0",
12
12
  ]
13
- dynamic = [ "version",]
13
+ version = "0.8.0"
14
14
  [[project.authors]]
15
15
  name = "Jupyter Development Team"
16
16
  email = "jupyter@googlegroups.com"
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_nbconvert")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -9,9 +9,9 @@ keywords = ["jupyter", "server", "fastapi", "plugins"]
9
9
  requires-python = ">=3.9"
10
10
  dependencies = [
11
11
  "nbconvert",
12
- "jupyverse-api >=0.7.0,<1",
12
+ "jupyverse-api >=0.8.0,<0.9.0",
13
13
  ]
14
- dynamic = [ "version",]
14
+ version = "0.8.0"
15
15
  [[project.authors]]
16
16
  name = "Jupyter Development Team"
17
17
  email = "jupyter@googlegroups.com"
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_noauth")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"
@@ -6,10 +6,10 @@ build-backend = "hatchling.build"
6
6
  name = "fps_noauth"
7
7
  description = "An FPS plugin for an unprotected API"
8
8
  keywords = ["jupyter", "server", "fastapi", "plugins"]
9
- dynamic = ["version"]
9
+ version = "0.8.0"
10
10
  requires-python = ">=3.9"
11
11
  dependencies = [
12
- "jupyverse-api >=0.7.0,<1",
12
+ "jupyverse-api >=0.8.0,<0.9.0",
13
13
  ]
14
14
 
15
15
  [[project.authors]]
@@ -0,0 +1,6 @@
1
+ import importlib.metadata
2
+
3
+ try:
4
+ __version__ = importlib.metadata.version("fps_notebook")
5
+ except importlib.metadata.PackageNotFoundError:
6
+ __version__ = "unknown"