jupyverse 0.7.5__tar.gz → 0.7.6__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 (266) hide show
  1. {jupyverse-0.7.5 → jupyverse-0.7.6}/.github/workflows/check-release.yml +1 -1
  2. jupyverse-0.7.6/.github/workflows/prep-release.yml +48 -0
  3. jupyverse-0.7.6/.github/workflows/publish-release.yml +58 -0
  4. {jupyverse-0.7.5 → jupyverse-0.7.6}/.pre-commit-config.yaml +1 -1
  5. {jupyverse-0.7.5 → jupyverse-0.7.6}/CHANGELOG.md +21 -2
  6. {jupyverse-0.7.5 → jupyverse-0.7.6}/PKG-INFO +1 -1
  7. jupyverse-0.7.6/jupyverse/__init__.py +1 -0
  8. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/__init__.py +1 -1
  9. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/cli.py +26 -0
  10. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/pyproject.toml +1 -1
  11. jupyverse-0.7.6/plugins/auth/fps_auth/__init__.py +1 -0
  12. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/fps_auth/main.py +10 -10
  13. jupyverse-0.7.6/plugins/auth_fief/fps_auth_fief/__init__.py +1 -0
  14. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_fief/fps_auth_fief/main.py +3 -3
  15. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +1 -1
  16. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +3 -3
  17. jupyverse-0.7.6/plugins/contents/fps_contents/__init__.py +1 -0
  18. jupyverse-0.7.6/plugins/frontend/fps_frontend/__init__.py +1 -0
  19. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/frontend/fps_frontend/main.py +2 -2
  20. jupyverse-0.7.6/plugins/jupyterlab/fps_jupyterlab/__init__.py +1 -0
  21. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/jupyterlab/fps_jupyterlab/main.py +3 -3
  22. jupyverse-0.7.6/plugins/kernels/fps_kernels/__init__.py +1 -0
  23. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_driver/connect.py +27 -3
  24. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_driver/driver.py +11 -0
  25. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_driver/message.py +8 -5
  26. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_server/message.py +5 -5
  27. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_server/server.py +104 -73
  28. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/main.py +4 -4
  29. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/routes.py +15 -8
  30. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/pyproject.toml +1 -0
  31. jupyverse-0.7.6/plugins/lab/fps_lab/__init__.py +1 -0
  32. jupyverse-0.7.6/plugins/login/fps_login/__init__.py +1 -0
  33. jupyverse-0.7.6/plugins/nbconvert/fps_nbconvert/__init__.py +1 -0
  34. jupyverse-0.7.6/plugins/noauth/fps_noauth/__init__.py +1 -0
  35. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/noauth/fps_noauth/main.py +0 -1
  36. jupyverse-0.7.6/plugins/notebook/fps_notebook/__init__.py +1 -0
  37. jupyverse-0.7.6/plugins/resource_usage/fps_resource_usage/__init__.py +1 -0
  38. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/resource_usage/fps_resource_usage/main.py +2 -2
  39. jupyverse-0.7.6/plugins/terminals/fps_terminals/__init__.py +1 -0
  40. jupyverse-0.7.6/plugins/webdav/fps_webdav/__init__.py +1 -0
  41. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/fps_webdav/main.py +2 -2
  42. jupyverse-0.7.6/plugins/yjs/fps_yjs/__init__.py +1 -0
  43. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/main.py +2 -2
  44. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/conftest.py +0 -1
  45. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/test_kernels.py +1 -1
  46. jupyverse-0.7.5/jupyverse/__init__.py +0 -1
  47. jupyverse-0.7.5/plugins/auth/fps_auth/__init__.py +0 -1
  48. jupyverse-0.7.5/plugins/auth_fief/fps_auth_fief/__init__.py +0 -1
  49. jupyverse-0.7.5/plugins/contents/fps_contents/__init__.py +0 -1
  50. jupyverse-0.7.5/plugins/frontend/fps_frontend/__init__.py +0 -1
  51. jupyverse-0.7.5/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -1
  52. jupyverse-0.7.5/plugins/kernels/fps_kernels/__init__.py +0 -1
  53. jupyverse-0.7.5/plugins/lab/fps_lab/__init__.py +0 -1
  54. jupyverse-0.7.5/plugins/login/fps_login/__init__.py +0 -1
  55. jupyverse-0.7.5/plugins/nbconvert/fps_nbconvert/__init__.py +0 -1
  56. jupyverse-0.7.5/plugins/noauth/fps_noauth/__init__.py +0 -1
  57. jupyverse-0.7.5/plugins/notebook/fps_notebook/__init__.py +0 -1
  58. jupyverse-0.7.5/plugins/resource_usage/fps_resource_usage/__init__.py +0 -1
  59. jupyverse-0.7.5/plugins/terminals/fps_terminals/__init__.py +0 -1
  60. jupyverse-0.7.5/plugins/webdav/fps_webdav/__init__.py +0 -1
  61. jupyverse-0.7.5/plugins/yjs/fps_yjs/__init__.py +0 -1
  62. {jupyverse-0.7.5 → jupyverse-0.7.6}/.devcontainer/devcontainer.json +0 -0
  63. {jupyverse-0.7.5 → jupyverse-0.7.6}/.devcontainer/requirements.txt +0 -0
  64. {jupyverse-0.7.5 → jupyverse-0.7.6}/.github/workflows/test.yml +0 -0
  65. {jupyverse-0.7.5 → jupyverse-0.7.6}/.gitignore +0 -0
  66. {jupyverse-0.7.5 → jupyverse-0.7.6}/CONTRIBUTING.md +0 -0
  67. {jupyverse-0.7.5 → jupyverse-0.7.6}/COPYING.md +0 -0
  68. {jupyverse-0.7.5 → jupyverse-0.7.6}/README.md +0 -0
  69. {jupyverse-0.7.5 → jupyverse-0.7.6}/binder/environment.yml +0 -0
  70. {jupyverse-0.7.5 → jupyverse-0.7.6}/binder/jupyter_notebook_config.py +0 -0
  71. {jupyverse-0.7.5 → jupyverse-0.7.6}/binder/postBuild +0 -0
  72. {jupyverse-0.7.5 → jupyverse-0.7.6}/binder/start +0 -0
  73. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/index.md +0 -0
  74. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/install.md +0 -0
  75. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/jupyter.svg +0 -0
  76. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/auth.md +0 -0
  77. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/contents.md +0 -0
  78. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/frontend.md +0 -0
  79. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/jupyterlab.md +0 -0
  80. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/kernels.md +0 -0
  81. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/lab.md +0 -0
  82. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/login.md +0 -0
  83. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/nbconvert.md +0 -0
  84. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/notebook.md +0 -0
  85. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/resource_usage.md +0 -0
  86. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/terminals.md +0 -0
  87. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/plugins/yjs.md +0 -0
  88. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
  89. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
  90. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/usage/microservices.md +0 -0
  91. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/usage/multi_user.md +0 -0
  92. {jupyverse-0.7.5 → jupyverse-0.7.6}/docs/usage/single_user.md +0 -0
  93. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse/py.typed +0 -0
  94. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/COPYING.md +0 -0
  95. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/README.md +0 -0
  96. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/app/__init__.py +0 -0
  97. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
  98. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/auth/models.py +0 -0
  99. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/contents/__init__.py +0 -0
  100. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/contents/models.py +0 -0
  101. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
  102. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
  103. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +0 -0
  104. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/kernels/__init__.py +0 -0
  105. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/kernels/models.py +0 -0
  106. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/lab/__init__.py +0 -0
  107. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/login/__init__.py +0 -0
  108. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/main/__init__.py +0 -0
  109. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +0 -0
  110. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/notebook/__init__.py +0 -0
  111. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/py.typed +0 -0
  112. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +0 -0
  113. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/terminals/__init__.py +0 -0
  114. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
  115. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/yjs/__init__.py +0 -0
  116. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
  117. {jupyverse-0.7.5 → jupyverse-0.7.6}/jupyverse_api/tests/test_resource_lock.py +0 -0
  118. {jupyverse-0.7.5 → jupyverse-0.7.6}/mkdocs.yml +0 -0
  119. {jupyverse-0.7.5 → jupyverse-0.7.6}/notebooks/admin_users.ipynb +0 -0
  120. {jupyverse-0.7.5 → jupyverse-0.7.6}/notebooks/admin_users.py +0 -0
  121. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/COPYING.md +0 -0
  122. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/README.md +0 -0
  123. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/fps_auth/backends.py +0 -0
  124. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/fps_auth/config.py +0 -0
  125. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/fps_auth/db.py +0 -0
  126. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/fps_auth/models.py +0 -0
  127. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/fps_auth/py.typed +0 -0
  128. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/fps_auth/routes.py +0 -0
  129. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth/pyproject.toml +0 -0
  130. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_fief/COPYING.md +0 -0
  131. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_fief/README.md +0 -0
  132. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_fief/fps_auth_fief/backend.py +0 -0
  133. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
  134. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
  135. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_fief/fps_auth_fief/routes.py +0 -0
  136. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_fief/pyproject.toml +0 -0
  137. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/COPYING.md +0 -0
  138. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/README.md +0 -0
  139. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
  140. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
  141. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
  142. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +0 -0
  143. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
  144. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +0 -0
  145. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/auth_jupyterhub/pyproject.toml +0 -0
  146. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/contents/COPYING.md +0 -0
  147. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/contents/README.md +0 -0
  148. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/contents/fps_contents/fileid.py +0 -0
  149. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/contents/fps_contents/main.py +0 -0
  150. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/contents/fps_contents/py.typed +0 -0
  151. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/contents/fps_contents/routes.py +0 -0
  152. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/contents/pyproject.toml +0 -0
  153. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/frontend/COPYING.md +0 -0
  154. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/frontend/README.md +0 -0
  155. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/frontend/fps_frontend/py.typed +0 -0
  156. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/frontend/pyproject.toml +0 -0
  157. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/jupyterlab/COPYING.md +0 -0
  158. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/jupyterlab/README.md +0 -0
  159. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
  160. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
  161. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/jupyterlab/fps_jupyterlab/routes.py +0 -0
  162. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/jupyterlab/pyproject.toml +0 -0
  163. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/COPYING.md +0 -0
  164. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/README.md +0 -0
  165. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
  166. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
  167. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
  168. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
  169. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/kernels/fps_kernels/py.typed +0 -0
  170. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/lab/COPYING.md +0 -0
  171. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/lab/README.md +0 -0
  172. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/lab/fps_lab/main.py +0 -0
  173. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/lab/fps_lab/py.typed +0 -0
  174. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/lab/fps_lab/routes.py +0 -0
  175. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/lab/fps_lab/static/favicon.ico +0 -0
  176. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/lab/pyproject.toml +0 -0
  177. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/COPYING.md +0 -0
  178. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/README.md +0 -0
  179. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/main.py +0 -0
  180. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/py.typed +0 -0
  181. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/routes.py +0 -0
  182. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
  183. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
  184. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
  185. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
  186. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
  187. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
  188. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
  189. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/index.html +0 -0
  190. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/logo/github.svg +0 -0
  191. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/logo/logo.png +0 -0
  192. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/fps_login/static/style/index.css +0 -0
  193. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/login/pyproject.toml +0 -0
  194. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/nbconvert/COPYING.md +0 -0
  195. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/nbconvert/README.md +0 -0
  196. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
  197. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
  198. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
  199. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/nbconvert/pyproject.toml +0 -0
  200. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/noauth/COPYING.md +0 -0
  201. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/noauth/README.md +0 -0
  202. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/noauth/fps_noauth/backends.py +0 -0
  203. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/noauth/fps_noauth/py.typed +0 -0
  204. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/noauth/pyproject.toml +0 -0
  205. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/notebook/COPYING.md +0 -0
  206. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/notebook/README.md +0 -0
  207. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/notebook/fps_notebook/main.py +0 -0
  208. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/notebook/fps_notebook/py.typed +0 -0
  209. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/notebook/fps_notebook/routes.py +0 -0
  210. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/notebook/pyproject.toml +0 -0
  211. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/resource_usage/COPYING.md +0 -0
  212. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/resource_usage/README.md +0 -0
  213. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
  214. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
  215. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/resource_usage/pyproject.toml +0 -0
  216. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/terminals/COPYING.md +0 -0
  217. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/terminals/README.md +0 -0
  218. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/terminals/fps_terminals/main.py +0 -0
  219. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/terminals/fps_terminals/py.typed +0 -0
  220. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/terminals/fps_terminals/routes.py +0 -0
  221. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/terminals/fps_terminals/server.py +0 -0
  222. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/terminals/fps_terminals/win_server.py +0 -0
  223. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/terminals/pyproject.toml +0 -0
  224. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/COPYING.md +0 -0
  225. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/README.md +0 -0
  226. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/fps_webdav/config.py +0 -0
  227. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/fps_webdav/py.typed +0 -0
  228. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/fps_webdav/routes.py +0 -0
  229. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/pyproject.toml +0 -0
  230. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/tests/conftest.py +0 -0
  231. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/webdav/tests/test_webdav.py +0 -0
  232. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/COPYING.md +0 -0
  233. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/README.md +0 -0
  234. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/py.typed +0 -0
  235. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/routes.py +0 -0
  236. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ydocs/__init__.py +0 -0
  237. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ydocs/utils.py +0 -0
  238. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ydocs/ybasedoc.py +0 -0
  239. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ydocs/yblob.py +0 -0
  240. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ydocs/yfile.py +0 -0
  241. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ydocs/ynotebook.py +0 -0
  242. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ydocs/yunicode.py +0 -0
  243. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
  244. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +0 -0
  245. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
  246. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
  247. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +0 -0
  248. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
  249. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
  250. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +0 -0
  251. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +0 -0
  252. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
  253. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
  254. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
  255. {jupyverse-0.7.5 → jupyverse-0.7.6}/plugins/yjs/pyproject.toml +0 -0
  256. {jupyverse-0.7.5 → jupyverse-0.7.6}/pyproject.toml +0 -0
  257. {jupyverse-0.7.5 → jupyverse-0.7.6}/pytest.ini +0 -0
  258. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/data/notebook0.ipynb +0 -0
  259. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/data/notebook1.ipynb +0 -0
  260. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/test_app.py +0 -0
  261. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/test_auth.py +0 -0
  262. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/test_contents.py +0 -0
  263. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/test_execute.py +0 -0
  264. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/test_server.py +0 -0
  265. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/test_settings.py +0 -0
  266. {jupyverse-0.7.5 → jupyverse-0.7.6}/tests/utils.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,27 @@
2
2
 
3
3
  <!-- <START NEW CHANGELOG ENTRY> -->
4
4
 
5
+ ## 0.7.6
6
+
7
+ ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.5...510ab6902fb8701df90fb542511b7daa2f7a9537))
8
+
9
+ ### Merged PRs
10
+
11
+ - Convert repo to use releaser from repo [#474](https://github.com/jupyter-server/jupyverse/pull/474) ([@davidbrochart](https://github.com/davidbrochart))
12
+ - Fix kernel shutdown [#473](https://github.com/jupyter-server/jupyverse/pull/473) ([@davidbrochart](https://github.com/davidbrochart))
13
+ - Bump FPS v0.1.5 [#467](https://github.com/jupyter-server/jupyverse/pull/467) ([@davidbrochart](https://github.com/davidbrochart))
14
+ - Use zmq-anyio [#466](https://github.com/jupyter-server/jupyverse/pull/466) ([@davidbrochart](https://github.com/davidbrochart))
15
+ - Fix connection to existing kernel [#463](https://github.com/jupyter-server/jupyverse/pull/463) ([@davidbrochart](https://github.com/davidbrochart))
16
+ - Bump FPS v0.1.3 [#462](https://github.com/jupyter-server/jupyverse/pull/462) ([@davidbrochart](https://github.com/davidbrochart))
17
+
18
+ ### Contributors to this release
19
+
20
+ ([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2025-02-26&to=2025-03-28&type=c))
21
+
22
+ [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-02-26..2025-03-28&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2025-02-26..2025-03-28&type=Issues)
23
+
24
+ <!-- <END NEW CHANGELOG ENTRY> -->
25
+
5
26
  ## 0.7.5
6
27
 
7
28
  ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.4...3c652e450d8ce5e46d7ea1bb00c402d611c4f54f))
@@ -16,8 +37,6 @@
16
37
 
17
38
  [@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
39
 
19
- <!-- <END NEW CHANGELOG ENTRY> -->
20
-
21
40
  ## 0.7.4
22
41
 
23
42
  ([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.6
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>
@@ -0,0 +1 @@
1
+ __version__ = "0.7.6"
@@ -5,7 +5,7 @@ from pydantic import BaseModel
5
5
 
6
6
  from .app import App
7
7
 
8
- __version__ = "0.7.5"
8
+ __version__ = "0.7.6"
9
9
 
10
10
 
11
11
  class Singleton(type):
@@ -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,6 +86,9 @@ 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,
@@ -92,6 +115,9 @@ 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
 
@@ -29,7 +29,7 @@ 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.1.1,<0.2.0",
32
+ "fps[web] >=0.2.0,<0.3.0",
33
33
  ]
34
34
  dynamic = ["version"]
35
35
 
@@ -0,0 +1 @@
1
+ __version__ = "0.7.6"
@@ -16,20 +16,20 @@ log = structlog.get_logger()
16
16
  class AuthModule(Module):
17
17
  def __init__(self, name: str, **kwargs):
18
18
  super().__init__(name)
19
- self.auth_config = _AuthConfig(**kwargs)
19
+ self.config = _AuthConfig(**kwargs)
20
20
 
21
21
  async def prepare(self) -> None:
22
- self.put(self.auth_config, AuthConfig)
22
+ self.put(self.config, AuthConfig)
23
23
 
24
24
  app = await self.get(App)
25
25
  frontend_config = await self.get(FrontendConfig)
26
26
 
27
- auth = auth_factory(app, self.auth_config, frontend_config)
27
+ auth = auth_factory(app, self.config, frontend_config)
28
28
  self.put(auth, Auth)
29
29
 
30
30
  await auth.db.create_db_and_tables()
31
31
 
32
- if self.auth_config.test:
32
+ if self.config.test:
33
33
  try:
34
34
  await auth.create_user(
35
35
  username="admin@jupyter.com",
@@ -42,19 +42,19 @@ class AuthModule(Module):
42
42
 
43
43
  try:
44
44
  await auth.create_user(
45
- username=self.auth_config.token,
46
- email=self.auth_config.global_email,
45
+ username=self.config.token,
46
+ email=self.config.global_email,
47
47
  password="",
48
48
  permissions={},
49
49
  )
50
50
  except UserAlreadyExists:
51
- global_user = await auth.get_user_by_email(self.auth_config.global_email)
51
+ global_user = await auth.get_user_by_email(self.config.global_email)
52
52
  await auth._update_user(
53
53
  global_user,
54
- username=self.auth_config.token,
54
+ username=self.config.token,
55
55
  permissions={},
56
56
  )
57
57
 
58
- if self.auth_config.mode == "token":
58
+ if self.config.mode == "token":
59
59
  query_params = await self.get(QueryParams)
60
- query_params.d["token"] = self.auth_config.token
60
+ query_params.d["token"] = self.config.token
@@ -0,0 +1 @@
1
+ __version__ = "0.7.6"
@@ -9,12 +9,12 @@ from .routes import auth_factory
9
9
 
10
10
  class AuthFiefModule(Module):
11
11
  def __init__(self, name: str, **kwargs):
12
- self.auth_fief_config = _AuthFiefConfig(**kwargs)
12
+ self.config = _AuthFiefConfig(**kwargs)
13
13
 
14
14
  async def prepare(self) -> None:
15
- self.put(self.auth_fief_config, AuthConfig)
15
+ self.put(self.config, AuthConfig)
16
16
 
17
17
  app = await self.get(App)
18
18
 
19
- auth_fief = auth_factory(app, self.auth_fief_config)
19
+ auth_fief = auth_factory(app, self.config)
20
20
  self.put(auth_fief, Auth)
@@ -1,3 +1,3 @@
1
- __version__ = "0.7.5"
1
+ __version__ = "0.7.6"
2
2
 
3
3
  from .launch import launch # noqa
@@ -11,13 +11,13 @@ from .routes import auth_factory
11
11
  class AuthJupyterHubModule(Module):
12
12
  def __init__(self, name: str, **kwargs):
13
13
  super().__init__(name)
14
- self.auth_jupyterhub_config = AuthJupyterHubConfig(**kwargs)
14
+ self.config = AuthJupyterHubConfig(**kwargs)
15
15
 
16
16
  async def prepare(self) -> None:
17
- self.put(self.auth_jupyterhub_config, AuthConfig)
17
+ self.put(self.config, AuthConfig)
18
18
  app = await self.get(App)
19
19
 
20
- self.auth_jupyterhub = auth_factory(app, self.auth_jupyterhub_config)
20
+ self.auth_jupyterhub = auth_factory(app, self.config)
21
21
 
22
22
  async with create_task_group() as self.tg:
23
23
  await self.tg.start(self.auth_jupyterhub.start)
@@ -0,0 +1 @@
1
+ __version__ = "0.7.6"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.6"
@@ -6,7 +6,7 @@ from jupyverse_api.frontend import FrontendConfig
6
6
  class FrontendModule(Module):
7
7
  def __init__(self, name: str, **kwargs):
8
8
  super().__init__(name)
9
- self.frontend_config = FrontendConfig(**kwargs)
9
+ self.config = FrontendConfig(**kwargs)
10
10
 
11
11
  async def prepare(self) -> None:
12
- self.put(self.frontend_config, FrontendConfig)
12
+ self.put(self.config, FrontendConfig)
@@ -0,0 +1 @@
1
+ __version__ = "0.7.6"
@@ -12,15 +12,15 @@ from .routes import _JupyterLab
12
12
  class JupyterLabModule(Module):
13
13
  def __init__(self, name: str, **kwargs):
14
14
  super().__init__(name)
15
- self.jupyterlab_config = JupyterLabConfig(**kwargs)
15
+ self.config = JupyterLabConfig(**kwargs)
16
16
 
17
17
  async def prepare(self) -> None:
18
- self.put(self.jupyterlab_config, JupyterLabConfig)
18
+ self.put(self.config, JupyterLabConfig)
19
19
 
20
20
  app = await self.get(App)
21
21
  auth = await self.get(Auth) # type: ignore[type-abstract]
22
22
  frontend_config = await self.get(FrontendConfig)
23
23
  lab = await self.get(Lab) # type: ignore[type-abstract]
24
24
 
25
- jupyterlab = _JupyterLab(app, self.jupyterlab_config, auth, frontend_config, lab)
25
+ jupyterlab = _JupyterLab(app, self.config, auth, frontend_config, lab)
26
26
  self.put(jupyterlab, JupyterLab)
@@ -0,0 +1 @@
1
+ __version__ = "0.7.6"
@@ -12,7 +12,7 @@ from typing import Dict, Optional, Tuple, Union
12
12
  import zmq
13
13
  from anyio import open_process
14
14
  from anyio.abc import Process
15
- from zmq.asyncio import Socket
15
+ from zmq_anyio import Socket
16
16
 
17
17
  channel_socket_types = {
18
18
  "hb": zmq.REQ,
@@ -22,7 +22,30 @@ channel_socket_types = {
22
22
  "control": zmq.DEALER,
23
23
  }
24
24
 
25
- context = zmq.asyncio.Context()
25
+ class HbSocket(Socket):
26
+ pass
27
+
28
+ class ShellSocket(Socket):
29
+ pass
30
+
31
+ class StdinSocket(Socket):
32
+ pass
33
+
34
+ class IOPubSocket(Socket):
35
+ pass
36
+
37
+ class ControlSocket(Socket):
38
+ pass
39
+
40
+ channel_socket_wrapper_types = {
41
+ "hb": HbSocket,
42
+ "shell": ShellSocket,
43
+ "iopub": IOPubSocket,
44
+ "stdin": StdinSocket,
45
+ "control": ControlSocket,
46
+ }
47
+
48
+ context = zmq.Context()
26
49
 
27
50
  cfg_t = Dict[str, Union[str, int]]
28
51
 
@@ -102,7 +125,8 @@ def create_socket(channel: str, cfg: cfg_t, identity: Optional[bytes] = None) ->
102
125
  port = cfg[f"{channel}_port"]
103
126
  url = f"tcp://{ip}:{port}"
104
127
  socket_type = channel_socket_types[channel]
105
- sock = context.socket(socket_type)
128
+ socket_wrapper_type = channel_socket_wrapper_types[channel]
129
+ sock = socket_wrapper_type(context.socket(socket_type))
106
130
  sock.linger = 1000 # set linger to 1s to prevent hangs at exit
107
131
  if identity:
108
132
  sock.identity = identity
@@ -102,6 +102,9 @@ class KernelDriver:
102
102
 
103
103
  async def connect(self, startup_timeout: float = float("inf")) -> None:
104
104
  self.connect_channels()
105
+ await self.task_group.start(self.iopub_channel.start)
106
+ await self.task_group.start(self.shell_channel.start)
107
+ await self.task_group.start(self.control_channel.start)
105
108
  await self._wait_for_ready(startup_timeout)
106
109
  self.listen_channels()
107
110
  self.task_group.start_soon(self._handle_comms)
@@ -117,6 +120,14 @@ class KernelDriver:
117
120
  self.task_group.start_soon(self.listen_shell)
118
121
 
119
122
  async def stop(self) -> None:
123
+ try:
124
+ async with create_task_group() as tg:
125
+ tg.start_soon(self.iopub_channel.stop)
126
+ tg.start_soon(self.shell_channel.stop)
127
+ tg.start_soon(self.control_channel.stop)
128
+ except Exception:
129
+ pass
130
+
120
131
  try:
121
132
  self.kernel_process.terminate()
122
133
  except ProcessLookupError:
@@ -5,8 +5,8 @@ from typing import Any, Dict, List, Optional, Tuple, cast
5
5
  from uuid import uuid4
6
6
 
7
7
  from dateutil.parser import parse as dateutil_parse
8
- from zmq.asyncio import Socket
9
8
  from zmq.utils import jsonapi
9
+ from zmq_anyio import Socket
10
10
 
11
11
  protocol_version_info = (5, 3)
12
12
  protocol_version = "%i.%i" % protocol_version_info
@@ -123,16 +123,19 @@ def deserialize(
123
123
  async def send_message(
124
124
  msg: Dict[str, Any], sock: Socket, key: str, change_date_to_str: bool = False
125
125
  ) -> None:
126
- await sock.send_multipart(serialize(msg, key, change_date_to_str=change_date_to_str), copy=True)
126
+ await sock.asend_multipart(
127
+ serialize(msg, key, change_date_to_str=change_date_to_str),
128
+ copy=True,
129
+ ).wait()
127
130
 
128
131
 
129
132
  async def receive_message(
130
133
  sock: Socket, timeout: float = float("inf"), change_str_to_date: bool = False
131
134
  ) -> Optional[Dict[str, Any]]:
132
135
  timeout *= 1000 # in ms
133
- ready = await sock.poll(timeout)
136
+ ready = await sock.apoll(timeout).wait()
134
137
  if ready:
135
- msg_list = await sock.recv_multipart()
136
- idents, msg_list = feed_identities(msg_list)
138
+ msg_list = await sock.arecv_multipart().wait()
139
+ idents, msg_list = feed_identities(cast(list[bytes], msg_list))
137
140
  return deserialize(msg_list, change_str_to_date=change_str_to_date)
138
141
  return None
@@ -1,8 +1,8 @@
1
1
  import json
2
2
  import struct
3
- from typing import Any, Dict, List, Optional, Tuple
3
+ from typing import Any, Dict, List, Optional, Tuple, cast
4
4
 
5
- from zmq.asyncio import Socket
5
+ from zmq_anyio import Socket
6
6
 
7
7
  from ..kernel_driver.message import DELIM, deserialize, feed_identities, sign, unpack
8
8
 
@@ -38,7 +38,7 @@ async def send_raw_message(parts: List[bytes], sock: Socket, key: str) -> None:
38
38
  msg = parts[:4]
39
39
  buffers = parts[4:]
40
40
  to_send = [DELIM, sign(msg, key)] + msg + buffers
41
- await sock.send_multipart(to_send)
41
+ await sock.asend_multipart(to_send).wait()
42
42
 
43
43
 
44
44
  def deserialize_msg_from_ws_v1(ws_msg: bytes) -> Tuple[str, List[bytes]]:
@@ -53,8 +53,8 @@ def deserialize_msg_from_ws_v1(ws_msg: bytes) -> Tuple[str, List[bytes]]:
53
53
 
54
54
 
55
55
  async def get_zmq_parts(socket: Socket) -> List[bytes]:
56
- parts = await socket.recv_multipart()
57
- idents, parts = feed_identities(parts)
56
+ parts = await socket.arecv_multipart().wait()
57
+ idents, parts = feed_identities(cast(list[bytes], parts))
58
58
  return parts
59
59
 
60
60