jupyverse 0.2.5__tar.gz → 0.4.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.2.5/.github/workflows/main.yml → jupyverse-0.4.0/.github/workflows/test.yml +31 -18
  2. {jupyverse-0.2.5 → jupyverse-0.4.0}/.gitignore +3 -0
  3. {jupyverse-0.2.5 → jupyverse-0.4.0}/.pre-commit-config.yaml +2 -7
  4. {jupyverse-0.2.5 → jupyverse-0.4.0}/CHANGELOG.md +38 -2
  5. {jupyverse-0.2.5 → jupyverse-0.4.0}/PKG-INFO +6 -4
  6. {jupyverse-0.2.5 → jupyverse-0.4.0}/README.md +1 -2
  7. jupyverse-0.4.0/jupyverse/__init__.py +1 -0
  8. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/__init__.py +1 -2
  9. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/app/__init__.py +1 -2
  10. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/auth/models.py +1 -0
  11. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/contents/__init__.py +3 -2
  12. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/contents/models.py +8 -8
  13. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +3 -1
  14. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/kernels/__init__.py +18 -2
  15. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/kernels/models.py +1 -1
  16. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/lab/__init__.py +2 -1
  17. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/login/__init__.py +1 -0
  18. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +1 -0
  19. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +3 -2
  20. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/retrolab/__init__.py +1 -0
  21. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/terminals/__init__.py +2 -1
  22. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/yjs/__init__.py +2 -1
  23. jupyverse-0.4.0/plugins/auth/fps_auth/__init__.py +1 -0
  24. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/fps_auth/db.py +1 -2
  25. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/fps_auth/models.py +1 -0
  26. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/fps_auth/routes.py +2 -3
  27. jupyverse-0.4.0/plugins/auth_fief/fps_auth_fief/__init__.py +1 -0
  28. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_fief/fps_auth_fief/backend.py +1 -0
  29. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_fief/fps_auth_fief/config.py +2 -1
  30. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_fief/fps_auth_fief/main.py +2 -1
  31. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_fief/fps_auth_fief/routes.py +1 -0
  32. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +1 -1
  33. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +2 -1
  34. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +3 -2
  35. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +2 -1
  36. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +4 -3
  37. jupyverse-0.4.0/plugins/contents/fps_contents/__init__.py +1 -0
  38. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/contents/fps_contents/fileid.py +5 -4
  39. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/contents/fps_contents/main.py +1 -0
  40. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/contents/fps_contents/routes.py +6 -1
  41. jupyverse-0.4.0/plugins/frontend/fps_frontend/__init__.py +1 -0
  42. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/frontend/fps_frontend/main.py +1 -0
  43. jupyverse-0.4.0/plugins/jupyterlab/fps_jupyterlab/__init__.py +1 -0
  44. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/jupyterlab/fps_jupyterlab/main.py +1 -0
  45. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/jupyterlab/fps_jupyterlab/routes.py +7 -2
  46. jupyverse-0.4.0/plugins/kernels/fps_kernels/__init__.py +1 -0
  47. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_driver/driver.py +131 -43
  48. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_driver/message.py +2 -1
  49. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_server/server.py +1 -2
  50. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/main.py +10 -4
  51. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/routes.py +11 -7
  52. jupyverse-0.4.0/plugins/lab/fps_lab/__init__.py +1 -0
  53. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/lab/fps_lab/main.py +1 -0
  54. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/lab/fps_lab/routes.py +0 -1
  55. jupyverse-0.4.0/plugins/login/fps_login/__init__.py +1 -0
  56. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/main.py +2 -1
  57. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/routes.py +1 -0
  58. jupyverse-0.4.0/plugins/nbconvert/fps_nbconvert/__init__.py +1 -0
  59. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/nbconvert/fps_nbconvert/main.py +2 -1
  60. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/nbconvert/fps_nbconvert/routes.py +1 -0
  61. jupyverse-0.4.0/plugins/noauth/fps_noauth/__init__.py +1 -0
  62. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/noauth/fps_noauth/backends.py +1 -0
  63. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/noauth/fps_noauth/main.py +1 -0
  64. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/noauth/pyproject.toml +2 -2
  65. jupyverse-0.4.0/plugins/resource_usage/fps_resource_usage/__init__.py +1 -0
  66. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/resource_usage/fps_resource_usage/main.py +2 -1
  67. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/resource_usage/fps_resource_usage/routes.py +1 -0
  68. jupyverse-0.4.0/plugins/retrolab/fps_retrolab/__init__.py +1 -0
  69. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/retrolab/fps_retrolab/main.py +2 -1
  70. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/retrolab/fps_retrolab/routes.py +1 -0
  71. jupyverse-0.4.0/plugins/terminals/fps_terminals/__init__.py +1 -0
  72. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/terminals/fps_terminals/main.py +2 -1
  73. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/terminals/fps_terminals/routes.py +1 -0
  74. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/terminals/fps_terminals/server.py +1 -0
  75. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/terminals/fps_terminals/win_server.py +5 -4
  76. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/terminals/pyproject.toml +1 -0
  77. jupyverse-0.4.0/plugins/webdav/fps_webdav/__init__.py +1 -0
  78. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/webdav/fps_webdav/main.py +1 -0
  79. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/webdav/fps_webdav/routes.py +1 -2
  80. jupyverse-0.4.0/plugins/yjs/fps_yjs/__init__.py +1 -0
  81. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/yjs/fps_yjs/main.py +1 -0
  82. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/yjs/fps_yjs/routes.py +21 -15
  83. jupyverse-0.4.0/plugins/yjs/fps_yjs/ydocs/__init__.py +8 -0
  84. jupyverse-0.4.0/plugins/yjs/fps_yjs/ydocs/utils.py +26 -0
  85. jupyverse-0.4.0/plugins/yjs/fps_yjs/ydocs/ybasedoc.py +77 -0
  86. jupyverse-0.4.0/plugins/yjs/fps_yjs/ydocs/yblob.py +39 -0
  87. jupyverse-0.4.0/plugins/yjs/fps_yjs/ydocs/yfile.py +5 -0
  88. jupyverse-0.4.0/plugins/yjs/fps_yjs/ydocs/ynotebook.py +146 -0
  89. jupyverse-0.4.0/plugins/yjs/fps_yjs/ydocs/yunicode.py +33 -0
  90. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/__init__.py +5 -0
  91. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +92 -0
  92. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/awareness.py +65 -0
  93. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +196 -0
  94. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/websocket.py +58 -0
  95. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +139 -0
  96. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +205 -0
  97. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/yroom.py +239 -0
  98. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/ystore.py +447 -0
  99. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywebsocket/yutils.py +155 -0
  100. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywidgets/__init__.py +1 -0
  101. jupyverse-0.4.0/plugins/yjs/fps_yjs/ywidgets/widgets.py +52 -0
  102. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/yjs/pyproject.toml +7 -3
  103. {jupyverse-0.2.5 → jupyverse-0.4.0}/pyproject.toml +22 -6
  104. jupyverse-0.4.0/tests/data/notebook1.ipynb +55 -0
  105. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/test_auth.py +2 -3
  106. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/test_contents.py +2 -2
  107. jupyverse-0.4.0/tests/test_execute.py +150 -0
  108. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/test_server.py +103 -5
  109. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/test_settings.py +1 -2
  110. jupyverse-0.2.5/jupyverse/__init__.py +0 -1
  111. jupyverse-0.2.5/plugins/auth/fps_auth/__init__.py +0 -1
  112. jupyverse-0.2.5/plugins/auth_fief/fps_auth_fief/__init__.py +0 -1
  113. jupyverse-0.2.5/plugins/contents/fps_contents/__init__.py +0 -1
  114. jupyverse-0.2.5/plugins/frontend/fps_frontend/__init__.py +0 -1
  115. jupyverse-0.2.5/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -1
  116. jupyverse-0.2.5/plugins/kernels/fps_kernels/__init__.py +0 -1
  117. jupyverse-0.2.5/plugins/lab/fps_lab/__init__.py +0 -1
  118. jupyverse-0.2.5/plugins/login/fps_login/__init__.py +0 -1
  119. jupyverse-0.2.5/plugins/nbconvert/fps_nbconvert/__init__.py +0 -1
  120. jupyverse-0.2.5/plugins/noauth/fps_noauth/__init__.py +0 -1
  121. jupyverse-0.2.5/plugins/resource_usage/fps_resource_usage/__init__.py +0 -1
  122. jupyverse-0.2.5/plugins/retrolab/fps_retrolab/__init__.py +0 -1
  123. jupyverse-0.2.5/plugins/terminals/fps_terminals/__init__.py +0 -1
  124. jupyverse-0.2.5/plugins/webdav/fps_webdav/__init__.py +0 -1
  125. jupyverse-0.2.5/plugins/yjs/fps_yjs/__init__.py +0 -1
  126. {jupyverse-0.2.5 → jupyverse-0.4.0}/.devcontainer/devcontainer.json +0 -0
  127. {jupyverse-0.2.5 → jupyverse-0.4.0}/.devcontainer/requirements.txt +0 -0
  128. {jupyverse-0.2.5 → jupyverse-0.4.0}/.github/workflows/check-release.yml +0 -0
  129. {jupyverse-0.2.5 → jupyverse-0.4.0}/CONTRIBUTING.md +0 -0
  130. {jupyverse-0.2.5 → jupyverse-0.4.0}/COPYING.md +0 -0
  131. {jupyverse-0.2.5 → jupyverse-0.4.0}/MANIFEST.in +0 -0
  132. {jupyverse-0.2.5 → jupyverse-0.4.0}/binder/environment.yml +0 -0
  133. {jupyverse-0.2.5 → jupyverse-0.4.0}/binder/jupyter_notebook_config.py +0 -0
  134. {jupyverse-0.2.5 → jupyverse-0.4.0}/binder/postBuild +0 -0
  135. {jupyverse-0.2.5 → jupyverse-0.4.0}/binder/start +0 -0
  136. {jupyverse-0.2.5 → jupyverse-0.4.0}/config.yaml +0 -0
  137. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/index.md +0 -0
  138. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/install.md +0 -0
  139. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/jupyter.svg +0 -0
  140. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/auth.md +0 -0
  141. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/contents.md +0 -0
  142. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/frontend.md +0 -0
  143. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/jupyterlab.md +0 -0
  144. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/kernels.md +0 -0
  145. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/lab.md +0 -0
  146. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/login.md +0 -0
  147. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/nbconvert.md +0 -0
  148. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/resource_usage.md +0 -0
  149. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/retrolab.md +0 -0
  150. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/terminals.md +0 -0
  151. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/plugins/yjs.md +0 -0
  152. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
  153. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
  154. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/usage/microservices.md +0 -0
  155. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/usage/multi_user.md +0 -0
  156. {jupyverse-0.2.5 → jupyverse-0.4.0}/docs/usage/single_user.md +0 -0
  157. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse/py.typed +0 -0
  158. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/COPYING.md +0 -0
  159. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/README.md +0 -0
  160. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
  161. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/cli.py +1 -1
  162. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
  163. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
  164. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/main/__init__.py +0 -0
  165. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/py.typed +0 -0
  166. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
  167. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
  168. {jupyverse-0.2.5 → jupyverse-0.4.0}/jupyverse_api/pyproject.toml +0 -0
  169. {jupyverse-0.2.5 → jupyverse-0.4.0}/mkdocs.yml +0 -0
  170. {jupyverse-0.2.5 → jupyverse-0.4.0}/notebooks/admin_users.ipynb +0 -0
  171. {jupyverse-0.2.5 → jupyverse-0.4.0}/notebooks/admin_users.py +3 -3
  172. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/COPYING.md +0 -0
  173. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/MANIFEST.in +0 -0
  174. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/README.md +0 -0
  175. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/fps_auth/backends.py +2 -2
  176. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/fps_auth/config.py +0 -0
  177. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/fps_auth/main.py +2 -2
  178. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/fps_auth/py.typed +0 -0
  179. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth/pyproject.toml +0 -0
  180. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_fief/COPYING.md +0 -0
  181. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_fief/MANIFEST.in +0 -0
  182. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_fief/README.md +0 -0
  183. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_fief/pyproject.toml +0 -0
  184. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/COPYING.md +0 -0
  185. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/README.md +0 -0
  186. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
  187. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
  188. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/auth_jupyterhub/pyproject.toml +0 -0
  189. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/contents/COPYING.md +0 -0
  190. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/contents/MANIFEST.in +0 -0
  191. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/contents/README.md +0 -0
  192. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/contents/fps_contents/py.typed +0 -0
  193. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/contents/pyproject.toml +0 -0
  194. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/frontend/COPYING.md +0 -0
  195. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/frontend/MANIFEST.in +0 -0
  196. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/frontend/README.md +0 -0
  197. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/frontend/fps_frontend/py.typed +0 -0
  198. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/frontend/pyproject.toml +0 -0
  199. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/jupyterlab/COPYING.md +0 -0
  200. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/jupyterlab/MANIFEST.in +0 -0
  201. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/jupyterlab/README.md +0 -0
  202. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
  203. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
  204. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/jupyterlab/pyproject.toml +0 -0
  205. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/COPYING.md +0 -0
  206. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/MANIFEST.in +0 -0
  207. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/README.md +0 -0
  208. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
  209. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_driver/connect.py +0 -0
  210. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
  211. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
  212. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
  213. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/fps_kernels/kernel_server/message.py +0 -0
  214. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/kernels/pyproject.toml +0 -0
  215. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/lab/COPYING.md +0 -0
  216. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/lab/MANIFEST.in +0 -0
  217. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/lab/README.md +0 -0
  218. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/lab/fps_lab/static/favicon.ico +0 -0
  219. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/lab/pyproject.toml +0 -0
  220. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/COPYING.md +0 -0
  221. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/MANIFEST.in +0 -0
  222. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/README.md +0 -0
  223. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
  224. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
  225. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
  226. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
  227. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
  228. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
  229. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
  230. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/index.html +0 -0
  231. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/logo/github.svg +0 -0
  232. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/logo/logo.png +0 -0
  233. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/fps_login/static/style/index.css +0 -0
  234. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/login/pyproject.toml +0 -0
  235. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/nbconvert/COPYING.md +0 -0
  236. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/nbconvert/MANIFEST.in +0 -0
  237. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/nbconvert/README.md +0 -0
  238. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/nbconvert/pyproject.toml +0 -0
  239. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/noauth/COPYING.md +0 -0
  240. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/noauth/MANIFEST.in +0 -0
  241. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/noauth/README.md +0 -0
  242. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/noauth/fps_noauth/py.typed +0 -0
  243. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/resource_usage/COPYING.md +0 -0
  244. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/resource_usage/README.md +0 -0
  245. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/resource_usage/pyproject.toml +0 -0
  246. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/retrolab/COPYING.md +0 -0
  247. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/retrolab/MANIFEST.in +0 -0
  248. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/retrolab/README.md +0 -0
  249. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/retrolab/pyproject.toml +0 -0
  250. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/terminals/COPYING.md +0 -0
  251. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/terminals/MANIFEST.in +0 -0
  252. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/terminals/README.md +0 -0
  253. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/webdav/COPYING.md +0 -0
  254. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/webdav/README.md +0 -0
  255. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/webdav/fps_webdav/config.py +0 -0
  256. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/webdav/fps_webdav/py.typed +0 -0
  257. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/webdav/pyproject.toml +0 -0
  258. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/webdav/tests/test_webdav.py +1 -1
  259. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/yjs/COPYING.md +0 -0
  260. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/yjs/MANIFEST.in +0 -0
  261. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/yjs/README.md +0 -0
  262. {jupyverse-0.2.5 → jupyverse-0.4.0}/plugins/yjs/fps_yjs/py.typed +0 -0
  263. {jupyverse-0.2.5 → jupyverse-0.4.0}/pytest.ini +0 -0
  264. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/conftest.py +0 -0
  265. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/data/notebook0.ipynb +0 -0
  266. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/test_app.py +2 -2
  267. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/test_kernels.py +3 -3
  268. {jupyverse-0.2.5 → jupyverse-0.4.0}/tests/utils.py +1 -1
@@ -1,4 +1,4 @@
1
- name: CI
1
+ name: test
2
2
 
3
3
  on:
4
4
  push:
@@ -13,8 +13,31 @@ concurrency:
13
13
  cancel-in-progress: true
14
14
 
15
15
  jobs:
16
+ types:
17
+ name: Types
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v3
22
+ - uses: actions/setup-python@v4
23
+ with:
24
+ python-version: '3.11'
25
+ cache: 'pip'
26
+ - name: Install hatch
27
+ run: |
28
+ python3 -m pip install --upgrade pip
29
+ python3 -m pip install hatch
30
+ - name: Check types
31
+ run: |
32
+ hatch run dev.jupyterlab-noauth:typecheck
33
+ hatch run dev.jupyterlab-auth:typecheck
34
+ hatch run dev.jupyterlab-auth_fief:typecheck
35
+ hatch run dev.retrolab-noauth:typecheck
36
+ hatch run dev.retrolab-auth:typecheck
37
+ hatch run dev.retrolab-auth_fief:typecheck
38
+
16
39
  test:
17
- name: Test
40
+ name: Tests
18
41
  runs-on: ${{ matrix.os }}
19
42
  strategy:
20
43
  fail-fast: false
@@ -31,23 +54,13 @@ jobs:
31
54
  python-version: ${{ matrix.python-version }}
32
55
  cache: 'pip'
33
56
 
34
- - name: Upgrade pip
35
- run: python3 -m pip install --upgrade pip
36
-
37
- - name: Create jupyterlab-auth dev environment
57
+ - name: Install hatch
38
58
  run: |
39
- pip install hatch
40
- hatch env create dev.jupyterlab-auth
59
+ python3 -m pip install --upgrade pip
60
+ python3 -m pip install hatch
41
61
 
42
- - name: Check types
43
- run: |
44
- hatch run dev.jupyterlab-noauth:typecheck
45
- hatch run dev.jupyterlab-auth:typecheck
46
- hatch run dev.jupyterlab-auth_fief:typecheck
47
- hatch run dev.retrolab-noauth:typecheck
48
- hatch run dev.retrolab-auth:typecheck
49
- hatch run dev.retrolab-auth_fief:typecheck
62
+ - name: Create jupyterlab-auth dev environment
63
+ run: hatch env create dev.jupyterlab-auth
50
64
 
51
65
  - name: Run tests
52
- run: |
53
- hatch run dev.jupyterlab-auth:test
66
+ run: hatch run dev.jupyterlab-auth:test
@@ -344,3 +344,6 @@ $RECYCLE.BIN/
344
344
  .jupyter_ystore.db
345
345
  .jupyter_ystore.db-journal
346
346
  fps_cli_args.toml
347
+
348
+ # pixi environments
349
+ .pixi
@@ -1,6 +1,6 @@
1
1
  repos:
2
2
  - repo: https://github.com/pre-commit/pre-commit-hooks
3
- rev: v4.4.0
3
+ rev: v4.5.0
4
4
  hooks:
5
5
  - id: end-of-file-fixer
6
6
  - id: check-case-conflict
@@ -15,13 +15,8 @@ repos:
15
15
  - id: check-builtin-literals
16
16
  - id: trailing-whitespace
17
17
 
18
- - repo: https://github.com/psf/black
19
- rev: 23.7.0
20
- hooks:
21
- - id: black
22
-
23
18
  - repo: https://github.com/astral-sh/ruff-pre-commit
24
- rev: v0.0.287
19
+ rev: v0.1.7
25
20
  hooks:
26
21
  - id: ruff
27
22
  args: ["--fix"]
@@ -2,6 +2,44 @@
2
2
 
3
3
  <!-- <START NEW CHANGELOG ENTRY> -->
4
4
 
5
+ ## 0.4.0
6
+
7
+ ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.3.0...73a16c326e333838aaa8ec2321c40d5d13a96f05))
8
+
9
+ ### Merged PRs
10
+
11
+ - Check types in a separate CI job [#373](https://github.com/jupyter-server/jupyverse/pull/373) ([@davidbrochart](https://github.com/davidbrochart))
12
+ - Add pytest color [#372](https://github.com/jupyter-server/jupyverse/pull/372) ([@davidbrochart](https://github.com/davidbrochart))
13
+ - Update pycrdt v0.7.2 [#371](https://github.com/jupyter-server/jupyverse/pull/371) ([@davidbrochart](https://github.com/davidbrochart))
14
+ - Implement server-side ypywidgets rendering [#364](https://github.com/jupyter-server/jupyverse/pull/364) ([@davidbrochart](https://github.com/davidbrochart))
15
+ - Improve data read [#362](https://github.com/jupyter-server/jupyverse/pull/362) ([@davidbrochart](https://github.com/davidbrochart))
16
+ - Replace black with ruff formatter [#361](https://github.com/jupyter-server/jupyverse/pull/361) ([@davidbrochart](https://github.com/davidbrochart))
17
+ - Replace Ypy with pycrdt [#359](https://github.com/jupyter-server/jupyverse/pull/359) ([@davidbrochart](https://github.com/davidbrochart))
18
+ - Set optional contents API model fields to None by default [#358](https://github.com/jupyter-server/jupyverse/pull/358) ([@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=2023-10-10&to=2023-12-16&type=c))
23
+
24
+ [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2023-10-10..2023-12-16&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2023-10-10..2023-12-16&type=Issues)
25
+
26
+ <!-- <END NEW CHANGELOG ENTRY> -->
27
+
28
+ ## 0.3.0
29
+
30
+ ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.2.5...88f061e58d22963f7b195b5677c983a7b1056b94))
31
+
32
+ ### Merged PRs
33
+
34
+ - Send notebook cell source as string when type is list [#354](https://github.com/jupyter-server/jupyverse/pull/354) ([@davidbrochart](https://github.com/davidbrochart))
35
+ - Align external kernel connections with jupyter-server [#352](https://github.com/jupyter-server/jupyverse/pull/352) ([@davidbrochart](https://github.com/davidbrochart))
36
+
37
+ ### Contributors to this release
38
+
39
+ ([GitHub contributors page for this release](https://github.com/jupyter-server/jupyverse/graphs/contributors?from=2023-09-06&to=2023-10-10&type=c))
40
+
41
+ [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2023-09-06..2023-10-10&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2023-09-06..2023-10-10&type=Issues)
42
+
5
43
  ## 0.2.5
6
44
 
7
45
  ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.2.4...18f312eb8b3dee262fb512af7e7ec3996674c4d4))
@@ -16,8 +54,6 @@
16
54
 
17
55
  [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2023-08-31..2023-09-06&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2023-08-31..2023-09-06&type=Issues)
18
56
 
19
- <!-- <END NEW CHANGELOG ENTRY> -->
20
-
21
57
  ## 0.2.4
22
58
 
23
59
  ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.2.3...5f49cddd48ea1344f21acc79b4a07ba2068ade51))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jupyverse
3
- Version: 0.2.5
3
+ Version: 0.4.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>
@@ -34,7 +34,7 @@ Provides-Extra: retrolab
34
34
  Requires-Dist: fps-retrolab<1,>=0.1.2; extra == 'retrolab'
35
35
  Provides-Extra: test
36
36
  Requires-Dist: httpx; extra == 'test'
37
- Requires-Dist: httpx-ws; extra == 'test'
37
+ Requires-Dist: httpx-ws>=0.4.1; extra == 'test'
38
38
  Requires-Dist: ipykernel; extra == 'test'
39
39
  Requires-Dist: mypy; extra == 'test'
40
40
  Requires-Dist: pytest; extra == 'test'
@@ -43,12 +43,14 @@ Requires-Dist: pytest-env; extra == 'test'
43
43
  Requires-Dist: pytest-rerunfailures; extra == 'test'
44
44
  Requires-Dist: pytest-timeout; extra == 'test'
45
45
  Requires-Dist: requests; extra == 'test'
46
+ Requires-Dist: ruff>=0.1.2; extra == 'test'
46
47
  Requires-Dist: types-setuptools; extra == 'test'
47
48
  Requires-Dist: websockets; extra == 'test'
49
+ Requires-Dist: ypywidgets-textual<0.3.0,>=0.2.2; extra == 'test'
50
+ Requires-Dist: ypywidgets<0.7.0,>=0.6.4; extra == 'test'
48
51
  Description-Content-Type: text/markdown
49
52
 
50
- [![Build Status](https://github.com/jupyter-server/jupyverse/workflows/CI/badge.svg)](https://github.com/jupyter-server/jupyverse/actions)
51
- [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
53
+ [![Build Status](https://github.com/jupyter-server/jupyverse/workflows/test/badge.svg)](https://github.com/jupyter-server/jupyverse/actions)
52
54
 
53
55
  # jupyverse
54
56
 
@@ -1,5 +1,4 @@
1
- [![Build Status](https://github.com/jupyter-server/jupyverse/workflows/CI/badge.svg)](https://github.com/jupyter-server/jupyverse/actions)
2
- [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
1
+ [![Build Status](https://github.com/jupyter-server/jupyverse/workflows/test/badge.svg)](https://github.com/jupyter-server/jupyverse/actions)
3
2
 
4
3
  # jupyverse
5
4
 
@@ -0,0 +1 @@
1
+ __version__ = "0.4.0"
@@ -4,8 +4,7 @@ from pydantic import BaseModel
4
4
 
5
5
  from .app import App
6
6
 
7
-
8
- __version__ = "0.2.5"
7
+ __version__ = "0.4.0"
9
8
 
10
9
 
11
10
  class Singleton(type):
@@ -1,15 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from datetime import datetime, timezone
5
4
  from collections import defaultdict
5
+ from datetime import datetime, timezone
6
6
  from typing import Dict, List
7
7
 
8
8
  from fastapi import FastAPI, Request
9
9
 
10
10
  from ..exceptions import RedirectException, _redirect_exception_handler
11
11
 
12
-
13
12
  logger = logging.getLogger("app")
14
13
 
15
14
 
@@ -1,4 +1,5 @@
1
1
  from typing import Optional
2
+
2
3
  from pydantic import BaseModel
3
4
 
4
5
 
@@ -4,11 +4,12 @@ from pathlib import Path
4
4
  from typing import Dict, List, Optional, Union
5
5
 
6
6
  from fastapi import APIRouter, Depends, Request, Response
7
+
7
8
  from jupyverse_api import Router
8
9
 
9
- from .models import Checkpoint, Content, SaveContent
10
- from ..auth import Auth, User
11
10
  from ..app import App
11
+ from ..auth import Auth, User
12
+ from .models import Checkpoint, Content, SaveContent
12
13
 
13
14
 
14
15
  class FileIdManager(ABC):
@@ -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]
15
- created: Optional[str]
16
- content: Optional[Union[List[Dict], str, Dict]]
17
- format: Optional[str]
18
- mimetype: Optional[str]
19
- size: Optional[int]
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
20
20
  writable: bool
21
21
  type: str
22
22
 
23
23
 
24
24
  class CreateContent(BaseModel):
25
- ext: Optional[str]
25
+ ext: Optional[str] = None
26
26
  path: str
27
27
  type: str
28
28
 
29
29
 
30
30
  class SaveContent(BaseModel):
31
- content: Optional[Union[str, Dict]]
31
+ content: Optional[Union[str, Dict]] = None
32
32
  format: str
33
33
  path: str
34
34
  type: str
@@ -2,10 +2,11 @@ from abc import ABC, abstractmethod
2
2
 
3
3
  from fastapi import APIRouter, Depends, Request
4
4
  from fastapi.responses import HTMLResponse
5
+
5
6
  from jupyverse_api import Config, Router
6
7
 
7
- from ..auth import Auth, User
8
8
  from ..app import App
9
+ from ..auth import Auth, User
9
10
 
10
11
 
11
12
  class JupyterLab(Router, ABC):
@@ -88,3 +89,4 @@ class JupyterLab(Router, ABC):
88
89
 
89
90
  class JupyterLabConfig(Config):
90
91
  dev_mode: bool = False
92
+ server_side_execution: bool = False
@@ -3,7 +3,9 @@ from pathlib import Path
3
3
  from typing import List, Optional
4
4
 
5
5
  from fastapi import APIRouter, Depends, Request
6
- from jupyverse_api import Router, Config
6
+ from pydantic import Field
7
+
8
+ from jupyverse_api import Config, Router
7
9
 
8
10
  from ..app import App
9
11
  from ..auth import Auth, User
@@ -239,5 +241,19 @@ class Kernels(Router, ABC):
239
241
 
240
242
  class KernelsConfig(Config):
241
243
  default_kernel: str = "python3"
242
- connection_path: Optional[str] = None
244
+ allow_external_kernels: bool = Field(
245
+ description=(
246
+ "Whether or not to allow external kernels, whose connection files are placed in "
247
+ "external_connection_dir."
248
+ ),
249
+ default=False,
250
+ )
251
+ external_connection_dir: Optional[str] = Field(
252
+ description=(
253
+ "The directory to look at for external kernel connection files, if "
254
+ "allow_external_kernels is True. Defaults to Jupyter runtime_dir/external_kernels. "
255
+ "Make sure that this directory is not filled with left-over connection files."
256
+ ),
257
+ default=None,
258
+ )
243
259
  require_yjs: bool = False
@@ -39,4 +39,4 @@ class Session(BaseModel):
39
39
 
40
40
  class Execution(BaseModel):
41
41
  document_id: str
42
- cell_idx: int
42
+ cell_id: str
@@ -5,11 +5,12 @@ from typing import List, Optional, Tuple
5
5
 
6
6
  from fastapi import APIRouter, Depends, Request, Response
7
7
  from fastapi.staticfiles import StaticFiles
8
+
8
9
  from jupyverse_api import Router
9
10
  from jupyverse_api.jupyterlab import JupyterLabConfig
10
11
 
11
- from ..auth import Auth, User
12
12
  from ..app import App
13
+ from ..auth import Auth, User
13
14
 
14
15
 
15
16
  class Lab(Router, ABC):
@@ -1,6 +1,7 @@
1
1
  from abc import ABC, abstractmethod
2
2
 
3
3
  from fastapi import APIRouter
4
+
4
5
  from jupyverse_api import Router
5
6
 
6
7
  from ..app import App
@@ -1,6 +1,7 @@
1
1
  from abc import ABC, abstractmethod
2
2
 
3
3
  from fastapi import APIRouter, Depends
4
+
4
5
  from jupyverse_api import Router
5
6
 
6
7
  from ..app import App
@@ -1,10 +1,11 @@
1
1
  from abc import ABC, abstractmethod
2
2
 
3
3
  from fastapi import APIRouter, Depends
4
- from jupyverse_api import Router, Config
5
4
 
6
- from ..auth import Auth, User
5
+ from jupyverse_api import Config, Router
6
+
7
7
  from ..app import App
8
+ from ..auth import Auth, User
8
9
 
9
10
 
10
11
  class ResourceUsage(Router, ABC):
@@ -2,6 +2,7 @@ from abc import ABC, abstractmethod
2
2
 
3
3
  from fastapi import APIRouter, Depends
4
4
  from fastapi.responses import HTMLResponse
5
+
5
6
  from jupyverse_api import Router
6
7
 
7
8
  from ..app import App
@@ -2,11 +2,12 @@ from abc import ABC, abstractmethod
2
2
  from typing import List
3
3
 
4
4
  from fastapi import APIRouter, Depends
5
+
5
6
  from jupyverse_api import Router
6
7
 
7
- from .models import Terminal
8
8
  from ..app import App
9
9
  from ..auth import Auth, User
10
+ from .models import Terminal
10
11
 
11
12
 
12
13
  class Terminals(Router, ABC):
@@ -2,10 +2,11 @@ from abc import ABC, abstractmethod
2
2
  from typing import Any
3
3
 
4
4
  from fastapi import APIRouter, Depends, Request, Response
5
+
5
6
  from jupyverse_api import Router
6
7
 
7
- from ..auth import Auth, User
8
8
  from ..app import App
9
+ from ..auth import Auth, User
9
10
 
10
11
 
11
12
  class Yjs(Router, ABC):
@@ -0,0 +1 @@
1
+ __version__ = "0.4.0"
@@ -5,8 +5,8 @@ from pathlib import Path
5
5
  from typing import Any, AsyncGenerator, List
6
6
 
7
7
  from fastapi import Depends
8
- from fastapi_users.db import SQLAlchemyBaseOAuthAccountTableUUID
9
8
  from fastapi_users.db import (
9
+ SQLAlchemyBaseOAuthAccountTableUUID,
10
10
  SQLAlchemyBaseUserTableUUID,
11
11
  SQLAlchemyUserDatabase,
12
12
  )
@@ -16,7 +16,6 @@ from sqlalchemy.orm import DeclarativeBase, Mapped, relationship
16
16
 
17
17
  from .config import _AuthConfig
18
18
 
19
-
20
19
  logger = logging.getLogger("auth")
21
20
 
22
21
 
@@ -2,6 +2,7 @@ import uuid
2
2
  from typing import Dict, List
3
3
 
4
4
  from fastapi_users import schemas
5
+
5
6
  from jupyverse_api.auth import User
6
7
 
7
8
 
@@ -5,19 +5,18 @@ import random
5
5
  from typing import Any, Callable, Dict, List, Optional, Tuple
6
6
 
7
7
  from fastapi import APIRouter, Depends
8
+ from sqlalchemy import select # type: ignore
9
+
8
10
  from jupyverse_api import Router
9
11
  from jupyverse_api.app import App
10
12
  from jupyverse_api.auth import Auth
11
13
  from jupyverse_api.frontend import FrontendConfig
12
- from sqlalchemy import select # type: ignore
13
14
 
14
15
  from .backends import get_backend
15
16
  from .config import _AuthConfig
16
17
  from .db import get_db
17
-
18
18
  from .models import UserCreate, UserRead, UserUpdate
19
19
 
20
-
21
20
  logger = logging.getLogger("auth")
22
21
 
23
22
 
@@ -0,0 +1 @@
1
+ __version__ = "0.4.0"
@@ -5,6 +5,7 @@ from fastapi import Depends, HTTPException, Request, Response, WebSocket, status
5
5
  from fastapi.security import APIKeyCookie
6
6
  from fief_client import FiefAccessTokenInfo, FiefAsync, FiefUserInfo
7
7
  from fief_client.integrations.fastapi import FiefAuth
8
+
8
9
  from jupyverse_api.auth import User
9
10
 
10
11
  from .config import _AuthFiefConfig
@@ -1,6 +1,7 @@
1
- from jupyverse_api.auth import AuthConfig
2
1
  from pydantic import Field
3
2
 
3
+ from jupyverse_api.auth import AuthConfig
4
+
4
5
 
5
6
  class _AuthFiefConfig(AuthConfig):
6
7
  base_url: str = Field(description="Base URL of Fief tenant")
@@ -1,6 +1,7 @@
1
1
  from asphalt.core import Component, Context
2
- from jupyverse_api.auth import Auth, AuthConfig
2
+
3
3
  from jupyverse_api.app import App
4
+ from jupyverse_api.auth import Auth, AuthConfig
4
5
 
5
6
  from .config import _AuthFiefConfig
6
7
  from .routes import auth_factory
@@ -5,6 +5,7 @@ import httpx
5
5
  from fastapi import APIRouter, Depends, Query, Request, Response
6
6
  from fastapi.responses import RedirectResponse
7
7
  from fief_client import FiefAccessTokenInfo
8
+
8
9
  from jupyverse_api import Router
9
10
  from jupyverse_api.app import App
10
11
  from jupyverse_api.auth import Auth, User
@@ -1,3 +1,3 @@
1
- __version__ = "0.2.5"
1
+ __version__ = "0.4.0"
2
2
 
3
3
  from .launch import launch # noqa
@@ -1,6 +1,7 @@
1
- from jupyverse_api.auth import AuthConfig
2
1
  from pydantic import Field
3
2
 
3
+ from jupyverse_api.auth import AuthConfig
4
+
4
5
 
5
6
  class AuthJupyterHubConfig(AuthConfig):
6
7
  db_url: str = Field(
@@ -1,9 +1,10 @@
1
1
  import httpx
2
2
  from asphalt.core import Component, ContainerComponent, Context, context_teardown
3
- from jupyverse_api.auth import Auth, AuthConfig
4
- from jupyverse_api.app import App
5
3
  from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession
6
4
 
5
+ from jupyverse_api.app import App
6
+ from jupyverse_api.auth import Auth, AuthConfig
7
+
7
8
  from .config import AuthJupyterHubConfig
8
9
  from .db import Base
9
10
  from .routes import auth_factory
@@ -1,8 +1,9 @@
1
1
  from typing import Dict, List
2
2
 
3
- from jupyverse_api.auth import User
4
3
  from pydantic import ConfigDict
5
4
 
5
+ from jupyverse_api.auth import User
6
+
6
7
 
7
8
  class JupyterHubUser(User):
8
9
  model_config = ConfigDict(from_attributes=True)
@@ -5,18 +5,19 @@ import json
5
5
  import os
6
6
  from datetime import datetime
7
7
  from typing import Any, Callable, Dict, List, Optional, Tuple, Union
8
- from typing_extensions import Annotated
9
8
 
10
9
  import httpx
11
10
  from fastapi import APIRouter, Cookie, Depends, HTTPException, Request, WebSocket, status
12
11
  from fastapi.responses import RedirectResponse
13
12
  from jupyterhub.services.auth import HubOAuth
14
13
  from jupyterhub.utils import isoformat
14
+ from sqlalchemy.ext.asyncio import AsyncSession
15
+ from sqlalchemy.future import select
16
+ from typing_extensions import Annotated
17
+
15
18
  from jupyverse_api import Router
16
19
  from jupyverse_api.app import App
17
20
  from jupyverse_api.auth import Auth, User
18
- from sqlalchemy.ext.asyncio import AsyncSession
19
- from sqlalchemy.future import select
20
21
 
21
22
  from .db import UserDB
22
23
  from .models import JupyterHubUser
@@ -0,0 +1 @@
1
+ __version__ = "0.4.0"
@@ -5,9 +5,10 @@ from uuid import uuid4
5
5
 
6
6
  import aiosqlite
7
7
  from anyio import Path
8
- from jupyverse_api import Singleton
9
8
  from watchfiles import Change, awatch
10
9
 
10
+ from jupyverse_api import Singleton
11
+
11
12
  logger = logging.getLogger("contents")
12
13
 
13
14
 
@@ -49,7 +50,7 @@ class FileIdManager(metaclass=Singleton):
49
50
  async with self.lock:
50
51
  async with aiosqlite.connect(self.db_path) as db:
51
52
  async with db.execute("SELECT id FROM fileids WHERE path = ?", (path,)) as cursor:
52
- async for idx, in cursor:
53
+ async for (idx,) in cursor:
53
54
  return idx
54
55
  return None
55
56
 
@@ -58,7 +59,7 @@ class FileIdManager(metaclass=Singleton):
58
59
  async with self.lock:
59
60
  async with aiosqlite.connect(self.db_path) as db:
60
61
  async with db.execute("SELECT path FROM fileids WHERE id = ?", (idx,)) as cursor:
61
- async for path, in cursor:
62
+ async for (path,) in cursor:
62
63
  return path
63
64
  return None
64
65
 
@@ -174,7 +175,7 @@ class FileIdManager(metaclass=Singleton):
174
175
  async def get_mtime(path, db) -> Optional[float]:
175
176
  if db:
176
177
  async with db.execute("SELECT mtime FROM fileids WHERE path = ?", (path,)) as cursor:
177
- async for mtime, in cursor:
178
+ async for (mtime,) in cursor:
178
179
  return mtime
179
180
  # deleted file is not in database, shouldn't happen
180
181
  return None
@@ -1,4 +1,5 @@
1
1
  from asphalt.core import Component, Context
2
+
2
3
  from jupyverse_api.app import App
3
4
  from jupyverse_api.auth import Auth
4
5
  from jupyverse_api.contents import Contents