jupyverse 0.7.5__tar.gz → 0.7.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. {jupyverse-0.7.5 → jupyverse-0.7.7}/.github/workflows/check-release.yml +1 -1
  2. jupyverse-0.7.7/.github/workflows/prep-release.yml +48 -0
  3. jupyverse-0.7.7/.github/workflows/publish-release.yml +58 -0
  4. {jupyverse-0.7.5 → jupyverse-0.7.7}/.pre-commit-config.yaml +1 -1
  5. {jupyverse-0.7.5 → jupyverse-0.7.7}/CHANGELOG.md +37 -2
  6. {jupyverse-0.7.5 → jupyverse-0.7.7}/PKG-INFO +2 -1
  7. jupyverse-0.7.7/jupyverse/__init__.py +1 -0
  8. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/__init__.py +9 -9
  9. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/app/__init__.py +2 -3
  10. jupyverse-0.7.7/jupyverse_api/jupyverse_api/auth/__init__.py +27 -0
  11. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/auth/models.py +4 -4
  12. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/cli.py +36 -17
  13. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/contents/__init__.py +20 -37
  14. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/contents/models.py +9 -9
  15. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +5 -10
  16. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/kernels/__init__.py +19 -33
  17. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/kernels/models.py +3 -3
  18. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/lab/__init__.py +15 -26
  19. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/login/__init__.py +1 -2
  20. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/main/__init__.py +3 -4
  21. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +2 -4
  22. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/notebook/__init__.py +5 -10
  23. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +1 -2
  24. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/terminals/__init__.py +7 -14
  25. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/yjs/__init__.py +3 -6
  26. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/pyproject.toml +1 -1
  27. jupyverse-0.7.7/plugins/auth/fps_auth/__init__.py +1 -0
  28. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/fps_auth/backends.py +13 -11
  29. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/fps_auth/config.py +4 -3
  30. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/fps_auth/db.py +3 -2
  31. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/fps_auth/main.py +10 -10
  32. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/fps_auth/models.py +1 -2
  33. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/fps_auth/routes.py +10 -7
  34. jupyverse-0.7.7/plugins/auth_fief/fps_auth_fief/__init__.py +1 -0
  35. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/backend.py +7 -5
  36. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/main.py +3 -3
  37. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/routes.py +9 -6
  38. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +1 -1
  39. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +3 -3
  40. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +1 -2
  41. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +11 -11
  42. jupyverse-0.7.7/plugins/contents/fps_contents/__init__.py +1 -0
  43. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/contents/fps_contents/fileid.py +15 -12
  44. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/contents/fps_contents/routes.py +9 -9
  45. jupyverse-0.7.7/plugins/frontend/fps_frontend/__init__.py +1 -0
  46. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/frontend/fps_frontend/main.py +2 -2
  47. jupyverse-0.7.7/plugins/jupyterlab/fps_jupyterlab/__init__.py +1 -0
  48. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/jupyterlab/fps_jupyterlab/main.py +3 -3
  49. jupyverse-0.7.7/plugins/kernels/fps_kernels/__init__.py +1 -0
  50. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/connect.py +36 -12
  51. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/driver.py +19 -6
  52. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/message.py +30 -25
  53. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/paths.py +4 -5
  54. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_server/message.py +16 -14
  55. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_server/server.py +114 -81
  56. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/main.py +4 -4
  57. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/routes.py +23 -15
  58. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/pyproject.toml +1 -0
  59. jupyverse-0.7.7/plugins/lab/fps_lab/__init__.py +1 -0
  60. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/lab/fps_lab/routes.py +4 -3
  61. jupyverse-0.7.7/plugins/login/fps_login/__init__.py +1 -0
  62. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/routes.py +4 -2
  63. jupyverse-0.7.7/plugins/nbconvert/fps_nbconvert/__init__.py +1 -0
  64. jupyverse-0.7.7/plugins/noauth/fps_noauth/__init__.py +1 -0
  65. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/noauth/fps_noauth/backends.py +6 -4
  66. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/noauth/fps_noauth/main.py +0 -1
  67. jupyverse-0.7.7/plugins/notebook/fps_notebook/__init__.py +1 -0
  68. jupyverse-0.7.7/plugins/resource_usage/fps_resource_usage/__init__.py +1 -0
  69. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/resource_usage/fps_resource_usage/main.py +2 -2
  70. jupyverse-0.7.7/plugins/terminals/fps_terminals/__init__.py +1 -0
  71. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/main.py +1 -2
  72. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/routes.py +3 -3
  73. jupyverse-0.7.7/plugins/webdav/fps_webdav/__init__.py +1 -0
  74. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/fps_webdav/config.py +3 -4
  75. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/fps_webdav/main.py +2 -2
  76. jupyverse-0.7.7/plugins/yjs/fps_yjs/__init__.py +1 -0
  77. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/main.py +2 -2
  78. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/routes.py +5 -6
  79. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/utils.py +5 -5
  80. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/ybasedoc.py +8 -6
  81. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/yblob.py +5 -3
  82. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/ynotebook.py +10 -8
  83. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/yunicode.py +4 -2
  84. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +2 -1
  85. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +1 -5
  86. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +2 -1
  87. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +2 -1
  88. {jupyverse-0.7.5 → jupyverse-0.7.7}/pyproject.toml +2 -1
  89. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/conftest.py +0 -1
  90. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/test_kernels.py +1 -1
  91. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/utils.py +5 -5
  92. jupyverse-0.7.5/jupyverse/__init__.py +0 -1
  93. jupyverse-0.7.5/jupyverse_api/jupyverse_api/auth/__init__.py +0 -27
  94. jupyverse-0.7.5/plugins/auth/fps_auth/__init__.py +0 -1
  95. jupyverse-0.7.5/plugins/auth_fief/fps_auth_fief/__init__.py +0 -1
  96. jupyverse-0.7.5/plugins/contents/fps_contents/__init__.py +0 -1
  97. jupyverse-0.7.5/plugins/frontend/fps_frontend/__init__.py +0 -1
  98. jupyverse-0.7.5/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -1
  99. jupyverse-0.7.5/plugins/kernels/fps_kernels/__init__.py +0 -1
  100. jupyverse-0.7.5/plugins/lab/fps_lab/__init__.py +0 -1
  101. jupyverse-0.7.5/plugins/login/fps_login/__init__.py +0 -1
  102. jupyverse-0.7.5/plugins/nbconvert/fps_nbconvert/__init__.py +0 -1
  103. jupyverse-0.7.5/plugins/noauth/fps_noauth/__init__.py +0 -1
  104. jupyverse-0.7.5/plugins/notebook/fps_notebook/__init__.py +0 -1
  105. jupyverse-0.7.5/plugins/resource_usage/fps_resource_usage/__init__.py +0 -1
  106. jupyverse-0.7.5/plugins/terminals/fps_terminals/__init__.py +0 -1
  107. jupyverse-0.7.5/plugins/webdav/fps_webdav/__init__.py +0 -1
  108. jupyverse-0.7.5/plugins/yjs/fps_yjs/__init__.py +0 -1
  109. {jupyverse-0.7.5 → jupyverse-0.7.7}/.devcontainer/devcontainer.json +0 -0
  110. {jupyverse-0.7.5 → jupyverse-0.7.7}/.devcontainer/requirements.txt +0 -0
  111. {jupyverse-0.7.5 → jupyverse-0.7.7}/.github/workflows/test.yml +0 -0
  112. {jupyverse-0.7.5 → jupyverse-0.7.7}/.gitignore +0 -0
  113. {jupyverse-0.7.5 → jupyverse-0.7.7}/CONTRIBUTING.md +0 -0
  114. {jupyverse-0.7.5 → jupyverse-0.7.7}/COPYING.md +0 -0
  115. {jupyverse-0.7.5 → jupyverse-0.7.7}/README.md +0 -0
  116. {jupyverse-0.7.5 → jupyverse-0.7.7}/binder/environment.yml +0 -0
  117. {jupyverse-0.7.5 → jupyverse-0.7.7}/binder/jupyter_notebook_config.py +0 -0
  118. {jupyverse-0.7.5 → jupyverse-0.7.7}/binder/postBuild +0 -0
  119. {jupyverse-0.7.5 → jupyverse-0.7.7}/binder/start +0 -0
  120. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/index.md +0 -0
  121. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/install.md +0 -0
  122. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/jupyter.svg +0 -0
  123. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/auth.md +0 -0
  124. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/contents.md +0 -0
  125. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/frontend.md +0 -0
  126. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/jupyterlab.md +0 -0
  127. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/kernels.md +0 -0
  128. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/lab.md +0 -0
  129. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/login.md +0 -0
  130. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/nbconvert.md +0 -0
  131. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/notebook.md +0 -0
  132. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/resource_usage.md +0 -0
  133. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/terminals.md +0 -0
  134. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/plugins/yjs.md +0 -0
  135. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
  136. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
  137. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/usage/microservices.md +0 -0
  138. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/usage/multi_user.md +0 -0
  139. {jupyverse-0.7.5 → jupyverse-0.7.7}/docs/usage/single_user.md +0 -0
  140. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse/py.typed +0 -0
  141. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/COPYING.md +0 -0
  142. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/README.md +0 -0
  143. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
  144. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
  145. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/py.typed +0 -0
  146. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
  147. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
  148. {jupyverse-0.7.5 → jupyverse-0.7.7}/jupyverse_api/tests/test_resource_lock.py +0 -0
  149. {jupyverse-0.7.5 → jupyverse-0.7.7}/mkdocs.yml +0 -0
  150. {jupyverse-0.7.5 → jupyverse-0.7.7}/notebooks/admin_users.ipynb +0 -0
  151. {jupyverse-0.7.5 → jupyverse-0.7.7}/notebooks/admin_users.py +0 -0
  152. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/COPYING.md +0 -0
  153. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/README.md +0 -0
  154. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/fps_auth/py.typed +0 -0
  155. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth/pyproject.toml +0 -0
  156. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_fief/COPYING.md +0 -0
  157. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_fief/README.md +0 -0
  158. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
  159. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
  160. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_fief/pyproject.toml +0 -0
  161. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/COPYING.md +0 -0
  162. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/README.md +0 -0
  163. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
  164. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
  165. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
  166. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
  167. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/auth_jupyterhub/pyproject.toml +0 -0
  168. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/contents/COPYING.md +0 -0
  169. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/contents/README.md +0 -0
  170. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/contents/fps_contents/main.py +0 -0
  171. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/contents/fps_contents/py.typed +0 -0
  172. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/contents/pyproject.toml +0 -0
  173. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/frontend/COPYING.md +0 -0
  174. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/frontend/README.md +0 -0
  175. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/frontend/fps_frontend/py.typed +0 -0
  176. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/frontend/pyproject.toml +0 -0
  177. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/jupyterlab/COPYING.md +0 -0
  178. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/jupyterlab/README.md +0 -0
  179. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
  180. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
  181. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/jupyterlab/fps_jupyterlab/routes.py +0 -0
  182. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/jupyterlab/pyproject.toml +0 -0
  183. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/COPYING.md +0 -0
  184. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/README.md +0 -0
  185. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
  186. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
  187. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
  188. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/kernels/fps_kernels/py.typed +0 -0
  189. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/lab/COPYING.md +0 -0
  190. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/lab/README.md +0 -0
  191. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/lab/fps_lab/main.py +0 -0
  192. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/lab/fps_lab/py.typed +0 -0
  193. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/lab/fps_lab/static/favicon.ico +0 -0
  194. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/lab/pyproject.toml +0 -0
  195. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/COPYING.md +0 -0
  196. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/README.md +0 -0
  197. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/main.py +0 -0
  198. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/py.typed +0 -0
  199. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
  200. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
  201. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
  202. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
  203. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
  204. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
  205. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
  206. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/index.html +0 -0
  207. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/logo/github.svg +0 -0
  208. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/logo/logo.png +0 -0
  209. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/fps_login/static/style/index.css +0 -0
  210. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/login/pyproject.toml +0 -0
  211. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/nbconvert/COPYING.md +0 -0
  212. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/nbconvert/README.md +0 -0
  213. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
  214. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
  215. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
  216. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/nbconvert/pyproject.toml +0 -0
  217. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/noauth/COPYING.md +0 -0
  218. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/noauth/README.md +0 -0
  219. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/noauth/fps_noauth/py.typed +0 -0
  220. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/noauth/pyproject.toml +0 -0
  221. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/notebook/COPYING.md +0 -0
  222. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/notebook/README.md +0 -0
  223. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/notebook/fps_notebook/main.py +0 -0
  224. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/notebook/fps_notebook/py.typed +0 -0
  225. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/notebook/fps_notebook/routes.py +0 -0
  226. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/notebook/pyproject.toml +0 -0
  227. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/resource_usage/COPYING.md +0 -0
  228. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/resource_usage/README.md +0 -0
  229. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
  230. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
  231. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/resource_usage/pyproject.toml +0 -0
  232. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/terminals/COPYING.md +0 -0
  233. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/terminals/README.md +0 -0
  234. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/py.typed +0 -0
  235. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/server.py +0 -0
  236. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/terminals/fps_terminals/win_server.py +0 -0
  237. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/terminals/pyproject.toml +0 -0
  238. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/COPYING.md +0 -0
  239. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/README.md +0 -0
  240. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/fps_webdav/py.typed +0 -0
  241. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/fps_webdav/routes.py +0 -0
  242. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/pyproject.toml +0 -0
  243. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/tests/conftest.py +0 -0
  244. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/webdav/tests/test_webdav.py +0 -0
  245. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/COPYING.md +0 -0
  246. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/README.md +0 -0
  247. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/py.typed +0 -0
  248. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/__init__.py +0 -0
  249. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ydocs/yfile.py +0 -0
  250. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
  251. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
  252. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
  253. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
  254. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
  255. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
  256. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
  257. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
  258. {jupyverse-0.7.5 → jupyverse-0.7.7}/plugins/yjs/pyproject.toml +0 -0
  259. {jupyverse-0.7.5 → jupyverse-0.7.7}/pytest.ini +0 -0
  260. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/data/notebook0.ipynb +0 -0
  261. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/data/notebook1.ipynb +0 -0
  262. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/test_app.py +0 -0
  263. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/test_auth.py +0 -0
  264. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/test_contents.py +0 -0
  265. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/test_execute.py +0 -0
  266. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/test_server.py +0 -0
  267. {jupyverse-0.7.5 → jupyverse-0.7.7}/tests/test_settings.py +0 -0
@@ -31,7 +31,7 @@ jobs:
31
31
  run: |
32
32
  echo "::set-output name=dir::$(pip cache dir)"
33
33
  - name: Cache pip
34
- uses: actions/cache@v1
34
+ uses: actions/cache@v4
35
35
  with:
36
36
  path: ${{ steps.pip-cache.outputs.dir }}
37
37
  key: ${{ runner.os }}-pip-${{ hashFiles('setup.cfg') }}
@@ -0,0 +1,48 @@
1
+ name: "Step 1: Prep Release"
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ version_spec:
6
+ description: "New Version Specifier"
7
+ default: "next"
8
+ required: false
9
+ branch:
10
+ description: "The branch to target"
11
+ required: false
12
+ post_version_spec:
13
+ description: "Post Version Specifier"
14
+ required: false
15
+ # silent:
16
+ # description: "Set a placeholder in the changelog and don't publish the release."
17
+ # required: false
18
+ # type: boolean
19
+ since:
20
+ description: "Use PRs with activity since this date or git reference"
21
+ required: false
22
+ since_last_stable:
23
+ description: "Use PRs with activity since the last stable git tag"
24
+ required: false
25
+ type: boolean
26
+ jobs:
27
+ prep_release:
28
+ runs-on: ubuntu-latest
29
+ permissions:
30
+ contents: write
31
+ steps:
32
+ - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
33
+
34
+ - name: Prep Release
35
+ id: prep-release
36
+ uses: jupyter-server/jupyter_releaser/.github/actions/prep-release@v2
37
+ with:
38
+ token: ${{ secrets.GITHUB_TOKEN }}
39
+ version_spec: ${{ github.event.inputs.version_spec }}
40
+ # silent: ${{ github.event.inputs.silent }}
41
+ post_version_spec: ${{ github.event.inputs.post_version_spec }}
42
+ branch: ${{ github.event.inputs.branch }}
43
+ since: ${{ github.event.inputs.since }}
44
+ since_last_stable: ${{ github.event.inputs.since_last_stable }}
45
+
46
+ - name: "** Next Step **"
47
+ run: |
48
+ echo "Optional): Review Draft Release: ${{ steps.prep-release.outputs.release_url }}"
@@ -0,0 +1,58 @@
1
+ name: "Step 2: Publish Release"
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ branch:
6
+ description: "The target branch"
7
+ required: false
8
+ release_url:
9
+ description: "The URL of the draft GitHub release"
10
+ required: false
11
+ steps_to_skip:
12
+ description: "Comma separated list of steps to skip"
13
+ required: false
14
+
15
+ jobs:
16
+ publish_release:
17
+ runs-on: ubuntu-latest
18
+ environment: release
19
+ permissions:
20
+ id-token: write
21
+ steps:
22
+ - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
23
+
24
+ - uses: actions/create-github-app-token@v1
25
+ id: app-token
26
+ with:
27
+ app-id: ${{ vars.APP_ID }}
28
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
29
+
30
+ - name: Populate Release
31
+ id: populate-release
32
+ uses: jupyter-server/jupyter_releaser/.github/actions/populate-release@v2
33
+ with:
34
+ token: ${{ steps.app-token.outputs.token }}
35
+ branch: ${{ github.event.inputs.branch }}
36
+ release_url: ${{ github.event.inputs.release_url }}
37
+ steps_to_skip: ${{ github.event.inputs.steps_to_skip }}
38
+
39
+ - name: Finalize Release
40
+ id: finalize-release
41
+ env:
42
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
43
+ uses: jupyter-server/jupyter_releaser/.github/actions/finalize-release@v2
44
+ with:
45
+ token: ${{ steps.app-token.outputs.token }}
46
+ release_url: ${{ steps.populate-release.outputs.release_url }}
47
+
48
+ - name: "** Next Step **"
49
+ if: ${{ success() }}
50
+ run: |
51
+ echo "Verify the final release"
52
+ echo ${{ steps.finalize-release.outputs.release_url }}
53
+
54
+ - name: "** Failure Message **"
55
+ if: ${{ failure() }}
56
+ run: |
57
+ echo "Failed to Publish the Draft Release Url:"
58
+ echo ${{ steps.populate-release.outputs.release_url }}
@@ -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.9.7
19
+ rev: v0.11.2
20
20
  hooks:
21
21
  - id: ruff
22
22
  args: ["--fix"]
@@ -2,6 +2,43 @@
2
2
 
3
3
  <!-- <START NEW CHANGELOG ENTRY> -->
4
4
 
5
+ ## 0.7.7
6
+
7
+ ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.6...69a1ecaa8f61a83c441d1c8e69a02835085fceb6))
8
+
9
+ ### Merged PRs
10
+
11
+ - Check if file exists before inserting it in fileids [#478](https://github.com/jupyter-server/jupyverse/pull/478) ([@davidbrochart](https://github.com/davidbrochart))
12
+ - Bump fps >=0.2.1 [#476](https://github.com/jupyter-server/jupyverse/pull/476) ([@davidbrochart](https://github.com/davidbrochart))
13
+ - Update types [#475](https://github.com/jupyter-server/jupyverse/pull/475) ([@davidbrochart](https://github.com/davidbrochart))
14
+
15
+ ### Contributors to this release
16
+
17
+ ([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2025-03-28&to=2025-04-04&type=c))
18
+
19
+ [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-03-28..2025-04-04&type=Issues)
20
+
21
+ <!-- <END NEW CHANGELOG ENTRY> -->
22
+
23
+ ## 0.7.6
24
+
25
+ ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.5...510ab6902fb8701df90fb542511b7daa2f7a9537))
26
+
27
+ ### Merged PRs
28
+
29
+ - Convert repo to use releaser from repo [#474](https://github.com/jupyter-server/jupyverse/pull/474) ([@davidbrochart](https://github.com/davidbrochart))
30
+ - Fix kernel shutdown [#473](https://github.com/jupyter-server/jupyverse/pull/473) ([@davidbrochart](https://github.com/davidbrochart))
31
+ - Bump FPS v0.1.5 [#467](https://github.com/jupyter-server/jupyverse/pull/467) ([@davidbrochart](https://github.com/davidbrochart))
32
+ - Use zmq-anyio [#466](https://github.com/jupyter-server/jupyverse/pull/466) ([@davidbrochart](https://github.com/davidbrochart))
33
+ - Fix connection to existing kernel [#463](https://github.com/jupyter-server/jupyverse/pull/463) ([@davidbrochart](https://github.com/davidbrochart))
34
+ - Bump FPS v0.1.3 [#462](https://github.com/jupyter-server/jupyverse/pull/462) ([@davidbrochart](https://github.com/davidbrochart))
35
+
36
+ ### Contributors to this release
37
+
38
+ ([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2025-02-26&to=2025-03-28&type=c))
39
+
40
+ [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-02-26..2025-03-28&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2025-02-26..2025-03-28&type=Issues)
41
+
5
42
  ## 0.7.5
6
43
 
7
44
  ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.4...3c652e450d8ce5e46d7ea1bb00c402d611c4f54f))
@@ -16,8 +53,6 @@
16
53
 
17
54
  [@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
55
 
19
- <!-- <END NEW CHANGELOG ENTRY> -->
20
-
21
56
  ## 0.7.4
22
57
 
23
58
  ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.3...3dee770cdcb8ae2529874a0a73592d2744eed63e))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jupyverse
3
- Version: 0.7.5
3
+ Version: 0.7.7
4
4
  Summary: A set of FPS plugins implementing a Jupyter server
5
5
  Project-URL: Homepage, https://jupyter.org
6
6
  Author-email: Jupyter Development Team <jupyter@googlegroups.com>
@@ -8,6 +8,7 @@ License: BSD 3-Clause License
8
8
  License-File: COPYING.md
9
9
  Keywords: fastapi,jupyter,plugins,server
10
10
  Requires-Python: >=3.9
11
+ Requires-Dist: eval-type-backport; python_version < '3.10'
11
12
  Requires-Dist: fps-contents<1,>=0.7.0
12
13
  Requires-Dist: fps-frontend<1,>=0.7.0
13
14
  Requires-Dist: fps-kernels<1,>=0.7.0
@@ -0,0 +1 @@
1
+ __version__ = "0.7.7"
@@ -1,19 +1,19 @@
1
- from typing import Any, Dict
1
+ from typing import Any
2
2
 
3
3
  from anyio import Event
4
4
  from pydantic import BaseModel
5
5
 
6
6
  from .app import App
7
7
 
8
- __version__ = "0.7.5"
8
+ __version__ = "0.7.7"
9
9
 
10
10
 
11
11
  class Singleton(type):
12
- _instances: Dict = {}
12
+ _instances: dict = {}
13
13
 
14
14
  def __call__(cls, *args, **kwargs):
15
15
  if cls not in cls._instances:
16
- cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
16
+ cls._instances[cls] = super().__call__(*args, **kwargs)
17
17
  return cls._instances[cls]
18
18
 
19
19
 
@@ -45,9 +45,9 @@ class Router:
45
45
 
46
46
 
47
47
  class ResourceLock:
48
- """ResourceLock ensures that accesses cannot be done concurrently on the same resource.
49
- """
50
- _locks: Dict[Any, Event]
48
+ """ResourceLock ensures that accesses cannot be done concurrently on the same resource."""
49
+
50
+ _locks: dict[Any, Event]
51
51
 
52
52
  def __init__(self):
53
53
  self._locks = {}
@@ -58,10 +58,10 @@ class ResourceLock:
58
58
 
59
59
  class _ResourceLock:
60
60
  _idx: Any
61
- _locks: Dict[Any, Event]
61
+ _locks: dict[Any, Event]
62
62
  _lock: Event
63
63
 
64
- def __init__(self, idx: Any, locks: Dict[Any, Event]):
64
+ def __init__(self, idx: Any, locks: dict[Any, Event]):
65
65
  self._idx = idx
66
66
  self._locks = locks
67
67
 
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  from collections import defaultdict
4
4
  from datetime import datetime, timezone
5
- from typing import Dict, List
6
5
 
7
6
  import structlog
8
7
  from fastapi import FastAPI, Request
@@ -16,7 +15,7 @@ class App:
16
15
  """A wrapper around FastAPI that checks for endpoint path conflicts."""
17
16
 
18
17
  _app: FastAPI
19
- _router_paths: Dict[str, List[str]]
18
+ _router_paths: dict[str, list[str]]
20
19
 
21
20
  def __init__(self, app: FastAPI, mount_path: str | None = None):
22
21
  if mount_path is None:
@@ -66,7 +65,7 @@ class App:
66
65
  for _router, _paths in self._router_paths.items():
67
66
  if path in _paths:
68
67
  raise RuntimeError(
69
- f"{_type } mounts a path that is already defined in {_router}: {path}"
68
+ f"{_type} mounts a path that is already defined in {_router}: {path}"
70
69
  )
71
70
  self._router_paths[_type].append(path)
72
71
  logger.debug("Path mounted", type=_type, path=path)
@@ -0,0 +1,27 @@
1
+ from __future__ import annotations
2
+
3
+ from abc import ABC, abstractmethod
4
+ from collections.abc import Awaitable
5
+ from typing import Any, Callable
6
+
7
+ from jupyverse_api import Config
8
+
9
+ from .models import User # noqa
10
+
11
+
12
+ class Auth(ABC):
13
+ @abstractmethod
14
+ def current_user(self, permissions: dict[str, list[str]] | None = None) -> Callable: ...
15
+
16
+ @abstractmethod
17
+ async def update_user(self) -> Callable: ...
18
+
19
+ @abstractmethod
20
+ def websocket_auth(
21
+ self,
22
+ permissions: dict[str, list[str]] | None = None,
23
+ ) -> Callable[[Any], Awaitable[tuple[Any, dict[str, list[str]] | None] | None]]: ...
24
+
25
+
26
+ class AuthConfig(Config):
27
+ pass
@@ -1,4 +1,4 @@
1
- from typing import Optional
1
+ from __future__ import annotations
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
@@ -7,8 +7,8 @@ class User(BaseModel):
7
7
  username: str = ""
8
8
  name: str = ""
9
9
  display_name: str = ""
10
- initials: Optional[str] = None
11
- color: Optional[str] = None
12
- avatar_url: Optional[str] = None
10
+ initials: str | None = None
11
+ color: str | None = None
12
+ avatar_url: str | None = None
13
13
  workspace: str = "{}"
14
14
  settings: str = "{}"
@@ -1,7 +1,7 @@
1
1
  import io
2
2
  import json
3
3
  import sys
4
- from typing import Any, List, Tuple
4
+ from typing import Any
5
5
 
6
6
  import rich_click as click
7
7
  from fps import main as fps_main
@@ -20,6 +20,26 @@ else:
20
20
  default=False,
21
21
  help="Enable debug mode.",
22
22
  )
23
+ @click.option(
24
+ "--show-config",
25
+ is_flag=True,
26
+ show_default=True,
27
+ default=False,
28
+ help="Show the actual configuration.",
29
+ )
30
+ @click.option(
31
+ "--help-all",
32
+ is_flag=True,
33
+ show_default=True,
34
+ default=False,
35
+ help="Show the configuration description.",
36
+ )
37
+ @click.option(
38
+ "--backend",
39
+ show_default=True,
40
+ default="asyncio",
41
+ help="The name of the event loop to use (asyncio or trio).",
42
+ )
23
43
  @click.option(
24
44
  "--open-browser",
25
45
  is_flag=True,
@@ -66,13 +86,16 @@ else:
66
86
  )
67
87
  def main(
68
88
  debug: bool = False,
89
+ show_config: bool = False,
90
+ help_all: bool = False,
91
+ backend: str = "asyncio",
69
92
  open_browser: bool = False,
70
93
  host: str = "127.0.0.1",
71
94
  port: int = 8000,
72
- set_: Tuple[str, ...] = (),
73
- disable: Tuple[str, ...] = (),
74
- allow_origin: Tuple[str, ...] = (),
75
- query_param: Tuple[str, ...] = (),
95
+ set_: tuple[str, ...] = (),
96
+ disable: tuple[str, ...] = (),
97
+ allow_origin: tuple[str, ...] = (),
98
+ query_param: tuple[str, ...] = (),
76
99
  ) -> None:
77
100
  query_params_dict = {}
78
101
  for qp in query_param:
@@ -80,7 +103,7 @@ def main(
80
103
  query_params_dict[key] = value
81
104
  query_params_str = json.dumps(query_params_dict)
82
105
  allow_origins_str = json.dumps(allow_origin)
83
- set_list: List[str] = list(set_)
106
+ set_list: list[str] = list(set_)
84
107
  set_list.append(f"debug={debug}")
85
108
  set_list.append(f"open_browser={open_browser}")
86
109
  set_list.append(f"host={host}")
@@ -92,24 +115,20 @@ def main(
92
115
  "",
93
116
  set_=set_list,
94
117
  config=pluggin_config,
118
+ show_config=show_config,
119
+ help_all=help_all,
120
+ backend=backend,
95
121
  ) # type: ignore
96
122
 
97
123
 
98
- def get_pluggin_config(disable: Tuple[str, ...]) -> dict[str, Any]:
124
+ def get_pluggin_config(disable: tuple[str, ...]) -> dict[str, Any]:
99
125
  jupyverse_modules = [
100
- ep.name
101
- for ep in entry_points(group="jupyverse.modules")
102
- if ep.name not in disable
126
+ ep.name for ep in entry_points(group="jupyverse.modules") if ep.name not in disable
103
127
  ]
104
128
  config = {
105
129
  "jupyverse": {
106
- "type":"jupyverse_api.main:JupyverseModule",
107
- "modules": {
108
- module: {
109
- "type": module
110
- }
111
- for module in jupyverse_modules
112
- }
130
+ "type": "jupyverse_api.main:JupyverseModule",
131
+ "modules": {module: {"type": module} for module in jupyverse_modules},
113
132
  }
114
133
  }
115
134
  return config
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  from abc import ABC, abstractmethod
4
4
  from pathlib import Path
5
- from typing import Dict, List, Optional, Union
6
5
 
7
6
  from fastapi import APIRouter, Depends, Request, Response
8
7
 
@@ -15,26 +14,20 @@ from .models import Checkpoint, Content, SaveContent
15
14
 
16
15
  class FileIdManager(ABC):
17
16
  @abstractmethod
18
- async def start(self) -> None:
19
- ...
17
+ async def start(self) -> None: ...
20
18
 
21
19
  @abstractmethod
22
- async def stop(self) -> None:
23
- ...
20
+ async def stop(self) -> None: ...
24
21
 
25
22
  @abstractmethod
26
- async def get_path(self, file_id: str) -> str:
27
- ...
23
+ async def get_path(self, file_id: str) -> str: ...
28
24
 
29
25
  @abstractmethod
30
- async def get_id(self, file_path: str) -> str:
31
- ...
26
+ async def get_id(self, file_path: str) -> str: ...
32
27
 
33
- def watch(self, path: str):
34
- ...
28
+ def watch(self, path: str): ...
35
29
 
36
- def unwatch(self, path: str, watcher):
37
- ...
30
+ def unwatch(self, path: str, watcher): ...
38
31
 
39
32
 
40
33
  class Contents(Router, ABC):
@@ -59,7 +52,7 @@ class Contents(Router, ABC):
59
52
  status_code=201,
60
53
  )
61
54
  async def create_content(
62
- path: Optional[str],
55
+ path: str | None,
63
56
  request: Request,
64
57
  user: User = Depends(auth.current_user(permissions={"contents": ["write"]})),
65
58
  ) -> Content:
@@ -75,7 +68,7 @@ class Contents(Router, ABC):
75
68
  @router.get("/api/contents/{path:path}/checkpoints")
76
69
  async def get_checkpoint(
77
70
  path, user: User = Depends(auth.current_user(permissions={"contents": ["read"]}))
78
- ) -> List[Checkpoint]:
71
+ ) -> list[Checkpoint]:
79
72
  return await self.get_checkpoint(path, user)
80
73
 
81
74
  @router.get("/api/contents/{path:path}")
@@ -117,35 +110,30 @@ class Contents(Router, ABC):
117
110
 
118
111
  @property
119
112
  @abstractmethod
120
- def file_id_manager(self) -> FileIdManager:
121
- ...
113
+ def file_id_manager(self) -> FileIdManager: ...
122
114
 
123
115
  @abstractmethod
124
116
  async def read_content(
125
- self, path: Union[str, Path], get_content: bool, file_format: Optional[str] = None
126
- ) -> Content:
127
- ...
117
+ self, path: str | Path, get_content: bool, file_format: str | None = None
118
+ ) -> Content: ...
128
119
 
129
120
  @abstractmethod
130
- async def write_content(self, content: Union[SaveContent, Dict]) -> None:
131
- ...
121
+ async def write_content(self, content: SaveContent | dict) -> None: ...
132
122
 
133
123
  @abstractmethod
134
124
  async def create_checkpoint(
135
125
  self,
136
126
  path,
137
127
  user: User,
138
- ) -> Checkpoint:
139
- ...
128
+ ) -> Checkpoint: ...
140
129
 
141
130
  @abstractmethod
142
131
  async def create_content(
143
132
  self,
144
- path: Optional[str],
133
+ path: str | None,
145
134
  request: Request,
146
135
  user: User,
147
- ) -> Content:
148
- ...
136
+ ) -> Content: ...
149
137
 
150
138
  @abstractmethod
151
139
  async def get_root_content(
@@ -160,8 +148,7 @@ class Contents(Router, ABC):
160
148
  self,
161
149
  path,
162
150
  user: User,
163
- ) -> List[Checkpoint]:
164
- ...
151
+ ) -> list[Checkpoint]: ...
165
152
 
166
153
  @abstractmethod
167
154
  async def get_content(
@@ -169,8 +156,7 @@ class Contents(Router, ABC):
169
156
  path: str,
170
157
  content: int,
171
158
  user: User,
172
- ) -> Content:
173
- ...
159
+ ) -> Content: ...
174
160
 
175
161
  @abstractmethod
176
162
  async def save_content(
@@ -179,16 +165,14 @@ class Contents(Router, ABC):
179
165
  request: Request,
180
166
  response: Response,
181
167
  user: User,
182
- ) -> Content:
183
- ...
168
+ ) -> Content: ...
184
169
 
185
170
  @abstractmethod
186
171
  async def delete_content(
187
172
  self,
188
173
  path,
189
174
  user: User,
190
- ):
191
- ...
175
+ ): ...
192
176
 
193
177
  @abstractmethod
194
178
  async def rename_content(
@@ -196,5 +180,4 @@ class Contents(Router, ABC):
196
180
  path,
197
181
  request: Request,
198
182
  user: User,
199
- ) -> Content:
200
- ...
183
+ ) -> Content: ...
@@ -1,4 +1,4 @@
1
- from typing import Dict, List, Optional, Union
1
+ from __future__ import annotations
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
@@ -11,24 +11,24 @@ class Checkpoint(BaseModel):
11
11
  class Content(BaseModel):
12
12
  name: str
13
13
  path: str
14
- last_modified: Optional[str] = None
15
- created: Optional[str] = None
16
- content: Optional[Union[List[Dict], str, Dict]] = None
17
- format: Optional[str] = None
18
- mimetype: Optional[str] = None
19
- size: Optional[int] = None
14
+ last_modified: str | None = None
15
+ created: str | None = None
16
+ content: list[dict] | str | dict | None = None
17
+ format: str | None = None
18
+ mimetype: str | None = None
19
+ size: int | None = None
20
20
  writable: bool
21
21
  type: str
22
22
 
23
23
 
24
24
  class CreateContent(BaseModel):
25
- ext: Optional[str] = None
25
+ ext: str | None = None
26
26
  path: str
27
27
  type: str
28
28
 
29
29
 
30
30
  class SaveContent(BaseModel):
31
- content: Optional[Union[str, Dict]] = None
31
+ content: str | dict | None = None
32
32
  format: str
33
33
  path: str
34
34
  type: str
@@ -55,19 +55,16 @@ class JupyterLab(Router, ABC):
55
55
  async def get_lab(
56
56
  self,
57
57
  user: User,
58
- ):
59
- ...
58
+ ): ...
60
59
 
61
60
  @abstractmethod
62
61
  async def load_workspace(
63
62
  self,
64
63
  path,
65
- ):
66
- ...
64
+ ): ...
67
65
 
68
66
  @abstractmethod
69
- async def get_workspace_data(self, user: User):
70
- ...
67
+ async def get_workspace_data(self, user: User): ...
71
68
 
72
69
  @abstractmethod
73
70
  async def set_workspace(
@@ -75,16 +72,14 @@ class JupyterLab(Router, ABC):
75
72
  request: Request,
76
73
  user: User,
77
74
  user_update,
78
- ):
79
- ...
75
+ ): ...
80
76
 
81
77
  @abstractmethod
82
78
  async def get_workspace(
83
79
  self,
84
80
  name,
85
81
  user: User,
86
- ):
87
- ...
82
+ ): ...
88
83
 
89
84
 
90
85
  class JupyterLabConfig(Config):