jupyverse 0.7.7__tar.gz → 0.7.8__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.7 → jupyverse-0.7.8}/.pre-commit-config.yaml +1 -1
  2. {jupyverse-0.7.7 → jupyverse-0.7.8}/CHANGELOG.md +18 -2
  3. {jupyverse-0.7.7 → jupyverse-0.7.8}/PKG-INFO +1 -1
  4. jupyverse-0.7.8/jupyverse/__init__.py +1 -0
  5. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/__init__.py +1 -1
  6. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/pyproject.toml +1 -1
  7. jupyverse-0.7.8/plugins/auth/fps_auth/__init__.py +1 -0
  8. jupyverse-0.7.8/plugins/auth_fief/fps_auth_fief/__init__.py +1 -0
  9. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/fps_auth_jupyterhub/__init__.py +1 -1
  10. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/fps_auth_jupyterhub/main.py +1 -5
  11. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/fps_auth_jupyterhub/routes.py +1 -0
  12. jupyverse-0.7.8/plugins/contents/fps_contents/__init__.py +1 -0
  13. jupyverse-0.7.8/plugins/frontend/fps_frontend/__init__.py +1 -0
  14. jupyverse-0.7.8/plugins/jupyterlab/fps_jupyterlab/__init__.py +1 -0
  15. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/jupyterlab/pyproject.toml +1 -1
  16. jupyverse-0.7.8/plugins/kernels/fps_kernels/__init__.py +1 -0
  17. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_driver/driver.py +4 -8
  18. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/main.py +1 -4
  19. jupyverse-0.7.8/plugins/lab/fps_lab/__init__.py +1 -0
  20. jupyverse-0.7.8/plugins/login/fps_login/__init__.py +1 -0
  21. jupyverse-0.7.8/plugins/nbconvert/fps_nbconvert/__init__.py +1 -0
  22. jupyverse-0.7.8/plugins/noauth/fps_noauth/__init__.py +1 -0
  23. jupyverse-0.7.8/plugins/notebook/fps_notebook/__init__.py +1 -0
  24. jupyverse-0.7.8/plugins/resource_usage/fps_resource_usage/__init__.py +1 -0
  25. jupyverse-0.7.8/plugins/terminals/fps_terminals/__init__.py +1 -0
  26. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/terminals/fps_terminals/main.py +1 -4
  27. jupyverse-0.7.8/plugins/webdav/fps_webdav/__init__.py +1 -0
  28. jupyverse-0.7.8/plugins/yjs/fps_yjs/__init__.py +1 -0
  29. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/main.py +2 -7
  30. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/routes.py +4 -2
  31. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/pyproject.toml +1 -0
  32. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/test_execute.py +1 -1
  33. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/test_server.py +2 -2
  34. jupyverse-0.7.7/jupyverse/__init__.py +0 -1
  35. jupyverse-0.7.7/plugins/auth/fps_auth/__init__.py +0 -1
  36. jupyverse-0.7.7/plugins/auth_fief/fps_auth_fief/__init__.py +0 -1
  37. jupyverse-0.7.7/plugins/contents/fps_contents/__init__.py +0 -1
  38. jupyverse-0.7.7/plugins/frontend/fps_frontend/__init__.py +0 -1
  39. jupyverse-0.7.7/plugins/jupyterlab/fps_jupyterlab/__init__.py +0 -1
  40. jupyverse-0.7.7/plugins/kernels/fps_kernels/__init__.py +0 -1
  41. jupyverse-0.7.7/plugins/lab/fps_lab/__init__.py +0 -1
  42. jupyverse-0.7.7/plugins/login/fps_login/__init__.py +0 -1
  43. jupyverse-0.7.7/plugins/nbconvert/fps_nbconvert/__init__.py +0 -1
  44. jupyverse-0.7.7/plugins/noauth/fps_noauth/__init__.py +0 -1
  45. jupyverse-0.7.7/plugins/notebook/fps_notebook/__init__.py +0 -1
  46. jupyverse-0.7.7/plugins/resource_usage/fps_resource_usage/__init__.py +0 -1
  47. jupyverse-0.7.7/plugins/terminals/fps_terminals/__init__.py +0 -1
  48. jupyverse-0.7.7/plugins/webdav/fps_webdav/__init__.py +0 -1
  49. jupyverse-0.7.7/plugins/yjs/fps_yjs/__init__.py +0 -1
  50. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/__init__.py +0 -8
  51. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/utils.py +0 -26
  52. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/ybasedoc.py +0 -82
  53. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/yblob.py +0 -43
  54. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/yfile.py +0 -5
  55. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/ynotebook.py +0 -151
  56. jupyverse-0.7.7/plugins/yjs/fps_yjs/ydocs/yunicode.py +0 -35
  57. {jupyverse-0.7.7 → jupyverse-0.7.8}/.devcontainer/devcontainer.json +0 -0
  58. {jupyverse-0.7.7 → jupyverse-0.7.8}/.devcontainer/requirements.txt +0 -0
  59. {jupyverse-0.7.7 → jupyverse-0.7.8}/.github/workflows/check-release.yml +0 -0
  60. {jupyverse-0.7.7 → jupyverse-0.7.8}/.github/workflows/prep-release.yml +0 -0
  61. {jupyverse-0.7.7 → jupyverse-0.7.8}/.github/workflows/publish-release.yml +0 -0
  62. {jupyverse-0.7.7 → jupyverse-0.7.8}/.github/workflows/test.yml +0 -0
  63. {jupyverse-0.7.7 → jupyverse-0.7.8}/.gitignore +0 -0
  64. {jupyverse-0.7.7 → jupyverse-0.7.8}/CONTRIBUTING.md +0 -0
  65. {jupyverse-0.7.7 → jupyverse-0.7.8}/COPYING.md +0 -0
  66. {jupyverse-0.7.7 → jupyverse-0.7.8}/README.md +0 -0
  67. {jupyverse-0.7.7 → jupyverse-0.7.8}/binder/environment.yml +0 -0
  68. {jupyverse-0.7.7 → jupyverse-0.7.8}/binder/jupyter_notebook_config.py +0 -0
  69. {jupyverse-0.7.7 → jupyverse-0.7.8}/binder/postBuild +0 -0
  70. {jupyverse-0.7.7 → jupyverse-0.7.8}/binder/start +0 -0
  71. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/index.md +0 -0
  72. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/install.md +0 -0
  73. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/jupyter.svg +0 -0
  74. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/auth.md +0 -0
  75. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/contents.md +0 -0
  76. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/frontend.md +0 -0
  77. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/jupyterlab.md +0 -0
  78. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/kernels.md +0 -0
  79. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/lab.md +0 -0
  80. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/login.md +0 -0
  81. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/nbconvert.md +0 -0
  82. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/notebook.md +0 -0
  83. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/resource_usage.md +0 -0
  84. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/terminals.md +0 -0
  85. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/plugins/yjs.md +0 -0
  86. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/tutorials/jupyterhub_jupyverse_deployment.md +0 -0
  87. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/tutorials/standalone_jupyverse_deployment.md +0 -0
  88. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/usage/microservices.md +0 -0
  89. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/usage/multi_user.md +0 -0
  90. {jupyverse-0.7.7 → jupyverse-0.7.8}/docs/usage/single_user.md +0 -0
  91. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse/py.typed +0 -0
  92. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/COPYING.md +0 -0
  93. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/README.md +0 -0
  94. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/app/__init__.py +0 -0
  95. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/auth/__init__.py +0 -0
  96. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/auth/models.py +0 -0
  97. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/cli.py +0 -0
  98. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/contents/__init__.py +0 -0
  99. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/contents/models.py +0 -0
  100. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/exceptions.py +0 -0
  101. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/frontend/__init__.py +0 -0
  102. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/jupyterlab/__init__.py +0 -0
  103. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/kernels/__init__.py +0 -0
  104. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/kernels/models.py +0 -0
  105. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/lab/__init__.py +0 -0
  106. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/login/__init__.py +0 -0
  107. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/main/__init__.py +0 -0
  108. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/nbconvert/__init__.py +0 -0
  109. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/notebook/__init__.py +0 -0
  110. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/py.typed +0 -0
  111. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/resource_usage/__init__.py +0 -0
  112. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/terminals/__init__.py +0 -0
  113. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/terminals/models.py +0 -0
  114. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/yjs/__init__.py +0 -0
  115. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/jupyverse_api/yjs/models.py +0 -0
  116. {jupyverse-0.7.7 → jupyverse-0.7.8}/jupyverse_api/tests/test_resource_lock.py +0 -0
  117. {jupyverse-0.7.7 → jupyverse-0.7.8}/mkdocs.yml +0 -0
  118. {jupyverse-0.7.7 → jupyverse-0.7.8}/notebooks/admin_users.ipynb +0 -0
  119. {jupyverse-0.7.7 → jupyverse-0.7.8}/notebooks/admin_users.py +0 -0
  120. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/COPYING.md +0 -0
  121. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/README.md +0 -0
  122. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/fps_auth/backends.py +0 -0
  123. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/fps_auth/config.py +0 -0
  124. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/fps_auth/db.py +0 -0
  125. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/fps_auth/main.py +0 -0
  126. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/fps_auth/models.py +0 -0
  127. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/fps_auth/py.typed +0 -0
  128. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/fps_auth/routes.py +0 -0
  129. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth/pyproject.toml +0 -0
  130. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_fief/COPYING.md +0 -0
  131. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_fief/README.md +0 -0
  132. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_fief/fps_auth_fief/backend.py +0 -0
  133. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_fief/fps_auth_fief/config.py +0 -0
  134. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_fief/fps_auth_fief/main.py +0 -0
  135. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_fief/fps_auth_fief/py.typed +0 -0
  136. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_fief/fps_auth_fief/routes.py +0 -0
  137. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_fief/pyproject.toml +0 -0
  138. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/COPYING.md +0 -0
  139. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/README.md +0 -0
  140. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/fps_auth_jupyterhub/config.py +0 -0
  141. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/fps_auth_jupyterhub/db.py +0 -0
  142. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/fps_auth_jupyterhub/launch.py +0 -0
  143. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/fps_auth_jupyterhub/models.py +0 -0
  144. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/fps_auth_jupyterhub/py.typed +0 -0
  145. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/auth_jupyterhub/pyproject.toml +0 -0
  146. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/contents/COPYING.md +0 -0
  147. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/contents/README.md +0 -0
  148. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/contents/fps_contents/fileid.py +0 -0
  149. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/contents/fps_contents/main.py +0 -0
  150. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/contents/fps_contents/py.typed +0 -0
  151. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/contents/fps_contents/routes.py +0 -0
  152. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/contents/pyproject.toml +0 -0
  153. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/frontend/COPYING.md +0 -0
  154. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/frontend/README.md +0 -0
  155. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/frontend/fps_frontend/main.py +0 -0
  156. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/frontend/fps_frontend/py.typed +0 -0
  157. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/frontend/pyproject.toml +0 -0
  158. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/jupyterlab/COPYING.md +0 -0
  159. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/jupyterlab/README.md +0 -0
  160. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/jupyterlab/fps_jupyterlab/index.py +0 -0
  161. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/jupyterlab/fps_jupyterlab/main.py +0 -0
  162. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/jupyterlab/fps_jupyterlab/py.typed +0 -0
  163. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/jupyterlab/fps_jupyterlab/routes.py +0 -0
  164. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/COPYING.md +0 -0
  165. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/README.md +0 -0
  166. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_driver/__init__.py +0 -0
  167. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_driver/connect.py +0 -0
  168. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_driver/kernelspec.py +0 -0
  169. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_driver/message.py +0 -0
  170. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_driver/paths.py +0 -0
  171. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_server/__init__.py +0 -0
  172. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_server/message.py +0 -0
  173. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/kernel_server/server.py +0 -0
  174. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/py.typed +0 -0
  175. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/fps_kernels/routes.py +0 -0
  176. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/kernels/pyproject.toml +0 -0
  177. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/lab/COPYING.md +0 -0
  178. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/lab/README.md +0 -0
  179. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/lab/fps_lab/main.py +0 -0
  180. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/lab/fps_lab/py.typed +0 -0
  181. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/lab/fps_lab/routes.py +0 -0
  182. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/lab/fps_lab/static/favicon.ico +0 -0
  183. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/lab/pyproject.toml +0 -0
  184. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/COPYING.md +0 -0
  185. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/README.md +0 -0
  186. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/main.py +0 -0
  187. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/py.typed +0 -0
  188. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/routes.py +0 -0
  189. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/favicons/favicon-busy-1.ico +0 -0
  190. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/favicons/favicon-busy-2.ico +0 -0
  191. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/favicons/favicon-busy-3.ico +0 -0
  192. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/favicons/favicon-file.ico +0 -0
  193. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/favicons/favicon-notebook.ico +0 -0
  194. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/favicons/favicon-terminal.ico +0 -0
  195. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/favicons/favicon.ico +0 -0
  196. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/index.html +0 -0
  197. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/logo/github.svg +0 -0
  198. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/logo/logo.png +0 -0
  199. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/fps_login/static/style/index.css +0 -0
  200. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/login/pyproject.toml +0 -0
  201. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/nbconvert/COPYING.md +0 -0
  202. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/nbconvert/README.md +0 -0
  203. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/nbconvert/fps_nbconvert/main.py +0 -0
  204. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/nbconvert/fps_nbconvert/py.typed +0 -0
  205. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/nbconvert/fps_nbconvert/routes.py +0 -0
  206. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/nbconvert/pyproject.toml +0 -0
  207. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/noauth/COPYING.md +0 -0
  208. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/noauth/README.md +0 -0
  209. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/noauth/fps_noauth/backends.py +0 -0
  210. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/noauth/fps_noauth/main.py +0 -0
  211. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/noauth/fps_noauth/py.typed +0 -0
  212. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/noauth/pyproject.toml +0 -0
  213. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/notebook/COPYING.md +0 -0
  214. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/notebook/README.md +0 -0
  215. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/notebook/fps_notebook/main.py +0 -0
  216. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/notebook/fps_notebook/py.typed +0 -0
  217. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/notebook/fps_notebook/routes.py +0 -0
  218. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/notebook/pyproject.toml +0 -0
  219. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/resource_usage/COPYING.md +0 -0
  220. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/resource_usage/README.md +0 -0
  221. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/resource_usage/fps_resource_usage/main.py +0 -0
  222. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/resource_usage/fps_resource_usage/py.typed +0 -0
  223. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/resource_usage/fps_resource_usage/routes.py +0 -0
  224. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/resource_usage/pyproject.toml +0 -0
  225. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/terminals/COPYING.md +0 -0
  226. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/terminals/README.md +0 -0
  227. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/terminals/fps_terminals/py.typed +0 -0
  228. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/terminals/fps_terminals/routes.py +0 -0
  229. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/terminals/fps_terminals/server.py +0 -0
  230. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/terminals/fps_terminals/win_server.py +0 -0
  231. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/terminals/pyproject.toml +0 -0
  232. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/COPYING.md +0 -0
  233. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/README.md +0 -0
  234. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/fps_webdav/config.py +0 -0
  235. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/fps_webdav/main.py +0 -0
  236. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/fps_webdav/py.typed +0 -0
  237. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/fps_webdav/routes.py +0 -0
  238. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/pyproject.toml +0 -0
  239. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/tests/conftest.py +0 -0
  240. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/webdav/tests/test_webdav.py +0 -0
  241. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/COPYING.md +0 -0
  242. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/README.md +0 -0
  243. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/py.typed +0 -0
  244. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/__init__.py +0 -0
  245. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/asgi_server.py +0 -0
  246. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/awareness.py +0 -0
  247. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/django_channels_consumer.py +0 -0
  248. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/websocket.py +0 -0
  249. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/websocket_provider.py +0 -0
  250. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/websocket_server.py +0 -0
  251. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/yroom.py +0 -0
  252. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/ystore.py +0 -0
  253. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywebsocket/yutils.py +0 -0
  254. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywidgets/__init__.py +0 -0
  255. {jupyverse-0.7.7 → jupyverse-0.7.8}/plugins/yjs/fps_yjs/ywidgets/widgets.py +0 -0
  256. {jupyverse-0.7.7 → jupyverse-0.7.8}/pyproject.toml +0 -0
  257. {jupyverse-0.7.7 → jupyverse-0.7.8}/pytest.ini +0 -0
  258. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/conftest.py +0 -0
  259. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/data/notebook0.ipynb +0 -0
  260. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/data/notebook1.ipynb +0 -0
  261. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/test_app.py +0 -0
  262. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/test_auth.py +0 -0
  263. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/test_contents.py +0 -0
  264. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/test_kernels.py +0 -0
  265. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/test_settings.py +0 -0
  266. {jupyverse-0.7.7 → jupyverse-0.7.8}/tests/utils.py +0 -0
@@ -16,7 +16,7 @@ repos:
16
16
  - id: trailing-whitespace
17
17
 
18
18
  - repo: https://github.com/astral-sh/ruff-pre-commit
19
- rev: v0.11.2
19
+ rev: v0.11.6
20
20
  hooks:
21
21
  - id: ruff
22
22
  args: ["--fix"]
@@ -2,6 +2,24 @@
2
2
 
3
3
  <!-- <START NEW CHANGELOG ENTRY> -->
4
4
 
5
+ ## 0.7.8
6
+
7
+ ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.7...aef97417f06bbb76e9a6b060b5f662dd555caaae))
8
+
9
+ ### Merged PRs
10
+
11
+ - Use jupyter-ydoc instead of vendored version [#484](https://github.com/jupyter-server/jupyverse/pull/484) ([@davidbrochart](https://github.com/davidbrochart))
12
+ - Upgrade FPS to v0.3.0 [#482](https://github.com/jupyter-server/jupyverse/pull/482) ([@davidbrochart](https://github.com/davidbrochart))
13
+ - Fix stream outputs [#480](https://github.com/jupyter-server/jupyverse/pull/480) ([@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-04-04&to=2025-04-23&type=c))
18
+
19
+ [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-04-04..2025-04-23&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Apre-commit-ci+updated%3A2025-04-04..2025-04-23&type=Issues)
20
+
21
+ <!-- <END NEW CHANGELOG ENTRY> -->
22
+
5
23
  ## 0.7.7
6
24
 
7
25
  ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.6...69a1ecaa8f61a83c441d1c8e69a02835085fceb6))
@@ -18,8 +36,6 @@
18
36
 
19
37
  [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-server%2Fjupyverse+involves%3Adavidbrochart+updated%3A2025-03-28..2025-04-04&type=Issues)
20
38
 
21
- <!-- <END NEW CHANGELOG ENTRY> -->
22
-
23
39
  ## 0.7.6
24
40
 
25
41
  ([Full Changelog](https://github.com/jupyter-server/jupyverse/compare/v0.7.5...510ab6902fb8701df90fb542511b7daa2f7a9537))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jupyverse
3
- Version: 0.7.7
3
+ Version: 0.7.8
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.8"
@@ -5,7 +5,7 @@ from pydantic import BaseModel
5
5
 
6
6
  from .app import App
7
7
 
8
- __version__ = "0.7.7"
8
+ __version__ = "0.7.8"
9
9
 
10
10
 
11
11
  class Singleton(type):
@@ -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.2.1,<0.3.0",
32
+ "fps[web] >=0.3.0,<0.4.0",
33
33
  ]
34
34
  dynamic = ["version"]
35
35
 
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -1,3 +1,3 @@
1
- __version__ = "0.7.7"
1
+ __version__ = "0.7.8"
2
2
 
3
3
  from .launch import launch # noqa
@@ -21,9 +21,5 @@ class AuthJupyterHubModule(Module):
21
21
 
22
22
  async with create_task_group() as self.tg:
23
23
  await self.tg.start(self.auth_jupyterhub.start)
24
- self.put(self.auth_jupyterhub, Auth)
24
+ self.put(self.auth_jupyterhub, Auth, teardown_callback=self.auth_jupyterhub.stop)
25
25
  self.done()
26
-
27
- async def stop(self) -> None:
28
- await self.auth_jupyterhub.stop()
29
- self.tg.cancel_scope.cancel()
@@ -170,6 +170,7 @@ def auth_factory(
170
170
  await self.http_client.aclose()
171
171
  await self.db_session.close()
172
172
  await self.db_engine.dispose()
173
+ self.task_group.cancel_scope.cancel()
173
174
 
174
175
  async def update_user(
175
176
  self, jupyverse_jupyterhub_token: Annotated[str | None, Cookie()] = None
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -8,7 +8,7 @@ description = "An FPS plugin for the JupyterLab API"
8
8
  keywords = [ "jupyter", "server", "fastapi", "plugins" ]
9
9
  requires-python = ">=3.9"
10
10
  dependencies = [
11
- "jupyterlab >=4.0.0,<5",
11
+ "jupyterlab >=4.4.1,<5",
12
12
  "jupyverse-api >=0.7.0,<1",
13
13
  ]
14
14
  dynamic = [ "version",]
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import os
4
3
  import time
5
4
  import uuid
6
5
  from typing import Any, cast
@@ -15,7 +14,7 @@ from anyio import (
15
14
  )
16
15
  from anyio.abc import TaskGroup, TaskStatus
17
16
  from anyio.streams.stapled import StapledObjectStream
18
- from pycrdt import Array, Map
17
+ from pycrdt import Array, Map, Text
19
18
 
20
19
  from jupyverse_api.yjs import Yjs
21
20
 
@@ -271,22 +270,19 @@ class KernelDriver:
271
270
  content = msg["content"]
272
271
  if msg_type == "stream":
273
272
  with outputs.doc.transaction():
274
- # TODO: uncomment when changes are made in jupyter-ydoc
275
- text = content["text"]
276
- if text.endswith((os.linesep, "\n")):
277
- text = text[:-1]
278
273
  if (not outputs) or (outputs[-1]["name"] != content["name"]): # type: ignore
279
274
  outputs.append(
280
275
  Map(
281
276
  {
282
277
  "name": content["name"],
283
278
  "output_type": msg_type,
284
- "text": Array([content["text"]]),
279
+ "text": Text(content["text"]),
285
280
  }
286
281
  )
287
282
  )
288
283
  else:
289
- outputs[-1]["text"].append(content["text"]) # type: ignore
284
+ text = outputs[-1]["text"]
285
+ text += content["text"] # type: ignore
290
286
  elif msg_type in ("display_data", "execute_result"):
291
287
  if "application/vnd.jupyter.ywidget-view+json" in content["data"]:
292
288
  # this is a collaborative widget
@@ -35,11 +35,8 @@ class KernelsModule(Module):
35
35
  )
36
36
 
37
37
  self.kernels = _Kernels(app, self.config, auth, frontend_config, yjs, lifespan)
38
- self.put(self.kernels, Kernels)
38
+ self.put(self.kernels, Kernels, teardown_callback=self.kernels.stop)
39
39
 
40
40
  async with create_task_group() as tg:
41
41
  tg.start_soon(self.kernels.start)
42
42
  self.done()
43
-
44
- async def stop(self) -> None:
45
- await self.kernels.stop()
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -22,10 +22,7 @@ class TerminalsModule(Module):
22
22
  auth = await self.get(Auth) # type: ignore[type-abstract]
23
23
 
24
24
  self.terminals = _Terminals(app, auth, _TerminalServer)
25
- self.put(self.terminals, Terminals)
26
25
  async with create_task_group() as tg:
27
26
  tg.start_soon(self.terminals.start)
27
+ self.put(self.terminals, Terminals, teardown_callback=self.terminals.stop)
28
28
  self.done()
29
-
30
- async def stop(self) -> None:
31
- await self.terminals.stop()
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -0,0 +1 @@
1
+ __version__ = "0.7.8"
@@ -26,13 +26,8 @@ class YjsModule(Module):
26
26
  lifespan = await self.get(Lifespan)
27
27
 
28
28
  self.yjs = _Yjs(app, auth, self.contents, lifespan)
29
- self.put(self.yjs, Yjs)
30
29
 
31
30
  async with create_task_group() as tg:
32
- tg.start_soon(self.yjs.start)
33
- tg.start_soon(self.contents.file_id_manager.start)
31
+ await tg.start(self.yjs.start)
32
+ self.put(self.yjs, Yjs, teardown_callback=self.yjs.stop)
34
33
  self.done()
35
-
36
- async def stop(self) -> None:
37
- await self.yjs.stop()
38
- await self.contents.file_id_manager.stop()
@@ -15,6 +15,8 @@ from fastapi import (
15
15
  WebSocketDisconnect,
16
16
  status,
17
17
  )
18
+ from jupyter_ydoc import ydocs as YDOCS
19
+ from jupyter_ydoc.ybasedoc import YBaseDoc
18
20
  from pycrdt import Doc, YMessageType, YSyncMessageType
19
21
  from websockets.exceptions import ConnectionClosedOK
20
22
 
@@ -26,8 +28,6 @@ from jupyverse_api.main import Lifespan
26
28
  from jupyverse_api.yjs import Yjs
27
29
  from jupyverse_api.yjs.models import CreateDocumentSession
28
30
 
29
- from .ydocs import ydocs as YDOCS
30
- from .ydocs.ybasedoc import YBaseDoc
31
31
  from .ywebsocket.websocket_server import WebsocketServer, YRoom
32
32
  from .ywebsocket.ystore import SQLiteYStore, YDocNotFound
33
33
  from .ywidgets import Widgets
@@ -62,10 +62,12 @@ class _Yjs(Yjs):
62
62
  async with create_task_group() as tg:
63
63
  self.room_manager = RoomManager(self.contents, self.lifespan)
64
64
  tg.start_soon(self.room_manager.start)
65
+ tg.start_soon(self.contents.file_id_manager.start)
65
66
  task_status.started()
66
67
 
67
68
  async def stop(self) -> None:
68
69
  await self.room_manager.stop()
70
+ await self.contents.file_id_manager.stop()
69
71
 
70
72
  async def collaboration_room_websocket(
71
73
  self,
@@ -12,6 +12,7 @@ dependencies = [
12
12
  "pycrdt >=0.9.0,<0.13.0",
13
13
  "jupyverse-api >=0.7.0,<1",
14
14
  "sqlite-anyio >=0.2.0,<0.3.0",
15
+ "jupyter_ydoc>3.0.1,<4.0.0",
15
16
  ]
16
17
  dynamic = [ "version",]
17
18
  [[project.authors]]
@@ -5,10 +5,10 @@ from pathlib import Path
5
5
  import anyio
6
6
  import pytest
7
7
  from fps import get_root_module, merge_config
8
- from fps_yjs.ydocs import ydocs
9
8
  from fps_yjs.ywebsocket import WebsocketProvider
10
9
  from httpx import AsyncClient
11
10
  from httpx_ws import aconnect_ws
11
+ from jupyter_ydoc import ydocs
12
12
  from pycrdt import Doc, Map, Text
13
13
 
14
14
  os.environ["PYDEVD_DISABLE_FILE_VALIDATION"] = "1"
@@ -5,9 +5,9 @@ from pathlib import Path
5
5
  import anyio
6
6
  import pytest
7
7
  import requests
8
- from fps_yjs.ydocs import ydocs
9
8
  from fps_yjs.ywebsocket import WebsocketProvider
10
9
  from httpx_ws import aconnect_ws
10
+ from jupyter_ydoc import ydocs
11
11
  from pycrdt import Array, Doc, Map, Text
12
12
  from utils import Websocket
13
13
 
@@ -113,7 +113,7 @@ async def test_rest_api(start_jupyverse):
113
113
  }
114
114
  ]
115
115
  assert cells[1]["outputs"] == [
116
- {"name": "stdout", "output_type": "stream", "text": ["Hello World!\n"]}
116
+ {"name": "stdout", "output_type": "stream", "text": "Hello World!\n"}
117
117
  ]
118
118
  assert cells[2]["outputs"] == [
119
119
  {
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1 +0,0 @@
1
- __version__ = "0.7.7"
@@ -1,8 +0,0 @@
1
- import sys
2
-
3
- if sys.version_info < (3, 10):
4
- from importlib_metadata import entry_points
5
- else:
6
- from importlib.metadata import entry_points
7
-
8
- ydocs = {ep.name: ep.load() for ep in entry_points(group="jupyverse_ydoc")}
@@ -1,26 +0,0 @@
1
- from typing import Union
2
-
3
- INT = type[int]
4
- FLOAT = type[float]
5
-
6
-
7
- def cast_all(
8
- o: Union[list, dict], from_type: Union[INT, FLOAT], to_type: Union[FLOAT, INT]
9
- ) -> Union[list, dict]:
10
- if isinstance(o, list):
11
- for i, v in enumerate(o):
12
- if type(v) is from_type:
13
- v2 = to_type(v)
14
- if v == v2:
15
- o[i] = v2
16
- elif isinstance(v, (list, dict)):
17
- cast_all(v, from_type, to_type)
18
- elif isinstance(o, dict):
19
- for k, v in o.items():
20
- if type(v) is from_type:
21
- v2 = to_type(v)
22
- if v == v2:
23
- o[k] = v2
24
- elif isinstance(v, (list, dict)):
25
- cast_all(v, from_type, to_type)
26
- return o
@@ -1,82 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from abc import ABC, abstractmethod
4
- from typing import Any, Callable
5
-
6
- from pycrdt import Doc, Map, Subscription
7
-
8
-
9
- class YBaseDoc(ABC):
10
- _ydoc: Doc
11
- _ystate: Map
12
-
13
- def __init__(self, ydoc: Doc | None = None):
14
- if ydoc is None:
15
- self._ydoc = Doc()
16
- else:
17
- self._ydoc = ydoc
18
- self._ystate = Map()
19
- self._ydoc["state"] = self._ystate
20
- self._subscriptions: dict[Any, Subscription] = {}
21
-
22
- @property
23
- @abstractmethod
24
- def version(self) -> str:
25
- ...
26
-
27
- @property
28
- def ystate(self) -> Map:
29
- return self._ystate
30
-
31
- @property
32
- def ydoc(self) -> Doc:
33
- return self._ydoc
34
-
35
- @property
36
- def source(self) -> Any:
37
- return self.get()
38
-
39
- @source.setter
40
- def source(self, value: Any):
41
- return self.set(value)
42
-
43
- @property
44
- def dirty(self) -> bool | None:
45
- return self._ystate.get("dirty")
46
-
47
- @dirty.setter
48
- def dirty(self, value: bool) -> None:
49
- self._ystate["dirty"] = value
50
-
51
- @property
52
- def path(self) -> str | None:
53
- return self._ystate.get("path")
54
-
55
- @path.setter
56
- def path(self, value: str) -> None:
57
- self._ystate["path"] = value
58
-
59
- @property
60
- def file_id(self) -> str | None:
61
- return self._ystate.get("file_id")
62
-
63
- @file_id.setter
64
- def file_id(self, value: str) -> None:
65
- self._ystate["file_id"] = value
66
-
67
- @abstractmethod
68
- def get(self) -> Any:
69
- ...
70
-
71
- @abstractmethod
72
- def set(self, value: Any) -> None:
73
- ...
74
-
75
- @abstractmethod
76
- def observe(self, callback: Callable[[str, Any], None]) -> None:
77
- ...
78
-
79
- def unobserve(self) -> None:
80
- for k, v in self._subscriptions.items():
81
- k.unobserve(v)
82
- self._subscriptions = {}
@@ -1,43 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import base64
4
- from functools import partial
5
- from typing import Any, Callable
6
-
7
- from pycrdt import Doc, Map
8
-
9
- from .ybasedoc import YBaseDoc
10
-
11
-
12
- class YBlob(YBaseDoc):
13
- """
14
- Extends :class:`YBaseDoc`, and represents a blob document.
15
- It is currently encoded as base64 because of:
16
- https://github.com/y-crdt/ypy/issues/108#issuecomment-1377055465
17
- The Y document can be set from bytes or from str, in which case it is assumed to be encoded as
18
- base64.
19
- """
20
-
21
- _ysource: Map
22
-
23
- def __init__(self, ydoc: Doc | None = None):
24
- super().__init__(ydoc)
25
- self._ysource = Map()
26
- self._ydoc["source"] = self._ysource
27
-
28
- @property
29
- def version(self) -> str:
30
- return "1.0.0"
31
-
32
- def get(self) -> bytes:
33
- return base64.b64decode(self._ysource["base64"].encode())
34
-
35
- def set(self, value: bytes | str) -> None:
36
- if isinstance(value, bytes):
37
- value = base64.b64encode(value).decode()
38
- self._ysource["base64"] = value
39
-
40
- def observe(self, callback: Callable[[str, Any], None]) -> None:
41
- self.unobserve()
42
- self._subscriptions[self._ystate] = self._ystate.observe(partial(callback, "state"))
43
- self._subscriptions[self._ysource] = self._ysource.observe(partial(callback, "source"))
@@ -1,5 +0,0 @@
1
- from .yunicode import YUnicode
2
-
3
-
4
- class YFile(YUnicode): # for backwards-compatibility
5
- pass