pyobservablejs 0.1.2__tar.gz → 0.2.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 (267) hide show
  1. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/.agent-plugin/skills/pyobservablejs/SKILL.md +12 -12
  2. pyobservablejs-0.2.0/.agent-plugin/skills/pyobservablejs/references/data.md +79 -0
  3. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/.agent-plugin/skills/pyobservablejs/references/diagnose.md +5 -5
  4. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/.agent-plugin/skills/pyobservablejs/references/hosts.md +7 -7
  5. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/.agent-plugin/skills/pyobservablejs/references/workflows.md +6 -5
  6. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/NOTICE +8 -3
  7. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/PKG-INFO +17 -3
  8. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/README.md +12 -0
  9. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/hatch_build.py +3 -0
  10. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/pyproject.toml +6 -3
  11. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/__init__.py +2 -1
  12. pyobservablejs-0.2.0/src/observablejs/_async_data.py +423 -0
  13. pyobservablejs-0.2.0/src/observablejs/_controller.py +239 -0
  14. pyobservablejs-0.2.0/src/observablejs/_conversions.py +286 -0
  15. pyobservablejs-0.2.0/src/observablejs/_data.py +305 -0
  16. pyobservablejs-0.2.0/src/observablejs/_data_types.py +136 -0
  17. pyobservablejs-0.2.0/src/observablejs/_evaluation_pool.py +129 -0
  18. pyobservablejs-0.2.0/src/observablejs/_execution.py +485 -0
  19. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_factories.py +3 -2
  20. pyobservablejs-0.2.0/src/observablejs/_file_access.py +222 -0
  21. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_graph.py +22 -0
  22. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_html.py +5 -1
  23. pyobservablejs-0.2.0/src/observablejs/_imports.py +106 -0
  24. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_inspection.py +88 -19
  25. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_model.py +1 -75
  26. pyobservablejs-0.2.0/src/observablejs/_namespaces.py +162 -0
  27. pyobservablejs-0.2.0/src/observablejs/_notebook.py +512 -0
  28. pyobservablejs-0.2.0/src/observablejs/_observable_fetch.py +251 -0
  29. pyobservablejs-0.1.2/src/observablejs/_observable.py → pyobservablejs-0.2.0/src/observablejs/_observable_legacy.py +3 -139
  30. pyobservablejs-0.2.0/src/observablejs/_observable_model.py +235 -0
  31. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_readback.py +46 -3
  32. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_serialize.py +7 -0
  33. pyobservablejs-0.2.0/src/observablejs/_server_process.py +350 -0
  34. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_variables.py +6 -2
  35. pyobservablejs-0.2.0/src/observablejs/_view.py +629 -0
  36. pyobservablejs-0.2.0/src/observablejs/_widget_session.py +64 -0
  37. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/errors.py +11 -4
  38. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/anywidget.json +13 -13
  39. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/app.js +6898 -6166
  40. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-DgpCdwPV.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-BDdN9cXu.js +1 -1
  41. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-CFlKfnzc.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-BdjsY35J.js +1 -1
  42. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-DsnOPDWZ.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-Bu0VYkhs.js +1 -1
  43. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-C5NbHGnt.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-CQ6Czty8.js +2 -2
  44. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-M-i_p5Qj.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-CgNgsTSD.js +1 -1
  45. pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-CjoaAvvV.js +22 -0
  46. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-CKnoFeIz.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-D3EE-r9a.js +1 -1
  47. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-CwIc0tyQ.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-DNEMXgu0.js +1 -1
  48. pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-DeGp0jpb.js +1668 -0
  49. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-Djkl5DVJ.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-DwJ8S3oT.js +4 -4
  50. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-DPke2Mkf.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-LJrdqDPE.js +1 -1
  51. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-DVSTjygl.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-NJ73jJOK.js +2 -2
  52. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-Cq37UgwU.js → pyobservablejs-0.2.0/src/observablejs/static/chunks/chunk-VYnLkzJM.js +1 -1
  53. pyobservablejs-0.2.0/src/observablejs/static/index.js +673 -0
  54. pyobservablejs-0.2.0/src/observablejs/static/server/Arrow.node.js +8854 -0
  55. pyobservablejs-0.2.0/src/observablejs/static/server/browser/Arrow.dom.js +8879 -0
  56. pyobservablejs-0.2.0/src/observablejs/static/server/browser/browser.js +15874 -0
  57. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist.js +1243 -0
  58. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist2.js +838 -0
  59. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist3.js +227 -0
  60. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist4.js +337 -0
  61. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist5.js +435 -0
  62. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist6.js +1004 -0
  63. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist7.js +350 -0
  64. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist8.js +4964 -0
  65. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dist9.js +2377 -0
  66. pyobservablejs-0.2.0/src/observablejs/static/server/browser/dot.js +22 -0
  67. pyobservablejs-0.2.0/src/observablejs/static/server/browser/duckdb.js +255 -0
  68. pyobservablejs-0.2.0/src/observablejs/static/server/browser/fileAttachment.js +215 -0
  69. pyobservablejs-0.2.0/src/observablejs/static/server/browser/github-light-default.js +4 -0
  70. pyobservablejs-0.2.0/src/observablejs/static/server/browser/highlight.js +110 -0
  71. pyobservablejs-0.2.0/src/observablejs/static/server/browser/html.js +8 -0
  72. pyobservablejs-0.2.0/src/observablejs/static/server/browser/inputs.js +1 -0
  73. pyobservablejs-0.2.0/src/observablejs/static/server/browser/javascript.js +2 -0
  74. pyobservablejs-0.2.0/src/observablejs/static/server/browser/javascript2.js +3 -0
  75. pyobservablejs-0.2.0/src/observablejs/static/server/browser/leaflet.js +11 -0
  76. pyobservablejs-0.2.0/src/observablejs/static/server/browser/mapboxgl.js +6 -0
  77. pyobservablejs-0.2.0/src/observablejs/static/server/browser/markdown.js +3 -0
  78. pyobservablejs-0.2.0/src/observablejs/static/server/browser/md.js +4887 -0
  79. pyobservablejs-0.2.0/src/observablejs/static/server/browser/mermaid.js +14 -0
  80. pyobservablejs-0.2.0/src/observablejs/static/server/browser/rolldown-runtime.js +11 -0
  81. pyobservablejs-0.2.0/src/observablejs/static/server/browser/sql.js +3 -0
  82. pyobservablejs-0.2.0/src/observablejs/static/server/browser/src.js +1668 -0
  83. pyobservablejs-0.2.0/src/observablejs/static/server/browser/tex.js +19 -0
  84. pyobservablejs-0.2.0/src/observablejs/static/server/browser/typescript.js +3 -0
  85. pyobservablejs-0.2.0/src/observablejs/static/server/browser/vega-lite.js +7 -0
  86. pyobservablejs-0.2.0/src/observablejs/static/server/browser/xlsx.js +88 -0
  87. pyobservablejs-0.2.0/src/observablejs/static/server/browser/zip.js +52 -0
  88. pyobservablejs-0.2.0/src/observablejs/static/server/chromium.js +159 -0
  89. pyobservablejs-0.2.0/src/observablejs/static/server/dist.js +1243 -0
  90. pyobservablejs-0.2.0/src/observablejs/static/server/dist2.js +838 -0
  91. pyobservablejs-0.2.0/src/observablejs/static/server/dist3.js +227 -0
  92. pyobservablejs-0.2.0/src/observablejs/static/server/dist4.js +337 -0
  93. pyobservablejs-0.2.0/src/observablejs/static/server/dist5.js +435 -0
  94. pyobservablejs-0.2.0/src/observablejs/static/server/dist6.js +1004 -0
  95. pyobservablejs-0.2.0/src/observablejs/static/server/dist7.js +350 -0
  96. pyobservablejs-0.2.0/src/observablejs/static/server/dom.js +32079 -0
  97. pyobservablejs-0.2.0/src/observablejs/static/server/dot.js +22 -0
  98. pyobservablejs-0.2.0/src/observablejs/static/server/driver/LICENSE +202 -0
  99. pyobservablejs-0.2.0/src/observablejs/static/server/driver/NOTICE +5 -0
  100. pyobservablejs-0.2.0/src/observablejs/static/server/driver/README.md +3 -0
  101. pyobservablejs-0.2.0/src/observablejs/static/server/driver/ThirdPartyNotices.txt +13 -0
  102. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/install_media_pack.ps1 +5 -0
  103. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/install_webkit_wsl.ps1 +33 -0
  104. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_chrome_beta_linux.sh +42 -0
  105. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_chrome_beta_mac.sh +13 -0
  106. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_chrome_beta_win.ps1 +24 -0
  107. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_chrome_stable_linux.sh +42 -0
  108. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_chrome_stable_mac.sh +12 -0
  109. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_chrome_stable_win.ps1 +24 -0
  110. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_beta_linux.sh +48 -0
  111. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_beta_mac.sh +11 -0
  112. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_beta_win.ps1 +23 -0
  113. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_dev_linux.sh +48 -0
  114. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_dev_mac.sh +11 -0
  115. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_dev_win.ps1 +23 -0
  116. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_stable_linux.sh +48 -0
  117. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_stable_mac.sh +11 -0
  118. pyobservablejs-0.2.0/src/observablejs/static/server/driver/bin/reinstall_msedge_stable_win.ps1 +24 -0
  119. pyobservablejs-0.2.0/src/observablejs/static/server/driver/browsers.json +52 -0
  120. pyobservablejs-0.2.0/src/observablejs/static/server/driver/cli.js +21 -0
  121. pyobservablejs-0.2.0/src/observablejs/static/server/driver/index.d.ts +17 -0
  122. pyobservablejs-0.2.0/src/observablejs/static/server/driver/index.js +17 -0
  123. pyobservablejs-0.2.0/src/observablejs/static/server/driver/index.mjs +28 -0
  124. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/bootstrap.js +88 -0
  125. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/coreBundle.js +75813 -0
  126. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/entry/cliDaemon.js +5 -0
  127. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/entry/dashboardApp.js +3 -0
  128. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/entry/mcp.js +10 -0
  129. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/entry/oopBrowserDownload.js +3 -0
  130. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/package.js +50 -0
  131. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/server/chromium/appIcon.png +0 -0
  132. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/server/electron/loader.js +116 -0
  133. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/serverRegistry.js +1939 -0
  134. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/serverRegistry.js.LICENSE +65 -0
  135. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/cli-client/channelSessions.js +141 -0
  136. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/cli-client/cli.js +6 -0
  137. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/cli-client/help.json +721 -0
  138. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/cli-client/minimist.js +128 -0
  139. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/cli-client/output.js +351 -0
  140. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/cli-client/program.js +418 -0
  141. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/cli-client/registry.js +180 -0
  142. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/cli-client/session.js +259 -0
  143. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/dashboard/appIcon.png +0 -0
  144. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/SKILL.md +425 -0
  145. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/element-attributes.md +23 -0
  146. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/playwright-tests.md +39 -0
  147. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/request-mocking.md +87 -0
  148. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/running-code.md +241 -0
  149. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/session-management.md +225 -0
  150. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/storage-state.md +275 -0
  151. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/test-generation.md +433 -0
  152. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/tracing.md +139 -0
  153. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-cli/references/video-recording.md +143 -0
  154. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-component-testing/SKILL.md +136 -0
  155. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-component-testing/references/gallery-spec.md +144 -0
  156. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-component-testing/references/migration.md +89 -0
  157. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-component-testing/references/react.md +69 -0
  158. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-component-testing/references/typing.md +173 -0
  159. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-component-testing/references/vue.md +77 -0
  160. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/skills/playwright-trace/SKILL.md +174 -0
  161. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/utils/extension.js +112 -0
  162. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/tools/utils/socketConnection.js +108 -0
  163. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/utilsBundle.js +85357 -0
  164. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/utilsBundle.js.LICENSE +1890 -0
  165. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/codeMirrorModule--QdMvsKi.css +1 -0
  166. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/codeMirrorModule-CQ8RZGBm.js +32 -0
  167. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
  168. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
  169. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
  170. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
  171. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/index-AwgwcYie.css +1 -0
  172. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/index-hRvO4yU2.js +12 -0
  173. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
  174. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/index.html +29 -0
  175. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/dashboard/playwright-logo.svg +24 -0
  176. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/htmlReport/index.html +16 -0
  177. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/htmlReport/report.css +2 -0
  178. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/htmlReport/report.js +32 -0
  179. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +1 -0
  180. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/recorder/assets/codeMirrorModule-CVQWJZAA.js +32 -0
  181. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  182. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/recorder/assets/index-BZpYJZ-P.css +1 -0
  183. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/recorder/assets/index-hrlLqLtq.js +129 -0
  184. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/recorder/index.html +29 -0
  185. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/recorder/playwright-logo.svg +9 -0
  186. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/assets/codeMirrorModule-BbkfBe3n.js +32 -0
  187. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/assets/defaultSettingsView-Ds6CBOo0.js +182 -0
  188. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +1 -0
  189. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/assets/xtermModule-DywYcAf8.js +7 -0
  190. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +1 -0
  191. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  192. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/defaultSettingsView.Bqk9acqE.css +1 -0
  193. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/index.B4cLoZK3.js +1 -0
  194. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/index.B_TqY17P.css +1 -0
  195. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/index.html +44 -0
  196. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/manifest.webmanifest +16 -0
  197. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/playwright-logo.svg +9 -0
  198. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +1 -0
  199. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/snapshot.html +10 -0
  200. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/sw.bundle.js +4 -0
  201. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/uiMode.CU5KtEkS.js +5 -0
  202. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/uiMode.CyMfwkXJ.css +1 -0
  203. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/uiMode.html +18 -0
  204. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +1 -0
  205. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/webp_codec.LICENSE +173 -0
  206. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/webp_codec.wasm +0 -0
  207. pyobservablejs-0.2.0/src/observablejs/static/server/driver/lib/xdg-open +1267 -0
  208. pyobservablejs-0.2.0/src/observablejs/static/server/driver/package.json +34 -0
  209. pyobservablejs-0.2.0/src/observablejs/static/server/driver/types/protocol.d.ts +24645 -0
  210. pyobservablejs-0.2.0/src/observablejs/static/server/driver/types/structs.d.ts +52 -0
  211. pyobservablejs-0.2.0/src/observablejs/static/server/driver/types/types.d.ts +26632 -0
  212. pyobservablejs-0.2.0/src/observablejs/static/server/duckdb.js +255 -0
  213. pyobservablejs-0.2.0/src/observablejs/static/server/fileAttachment.js +215 -0
  214. pyobservablejs-0.2.0/src/observablejs/static/server/highlight.js +110 -0
  215. pyobservablejs-0.2.0/src/observablejs/static/server/inputs.js +2 -0
  216. pyobservablejs-0.2.0/src/observablejs/static/server/leaflet.js +12 -0
  217. pyobservablejs-0.2.0/src/observablejs/static/server/main.js +14406 -0
  218. pyobservablejs-0.2.0/src/observablejs/static/server/mapboxgl.js +6 -0
  219. pyobservablejs-0.2.0/src/observablejs/static/server/md.js +4887 -0
  220. pyobservablejs-0.2.0/src/observablejs/static/server/mermaid.js +14 -0
  221. pyobservablejs-0.2.0/src/observablejs/static/server/rolldown-runtime.js +21 -0
  222. pyobservablejs-0.2.0/src/observablejs/static/server/server.js +4 -0
  223. pyobservablejs-0.2.0/src/observablejs/static/server/src.js +1668 -0
  224. pyobservablejs-0.2.0/src/observablejs/static/server/tex.js +19 -0
  225. pyobservablejs-0.2.0/src/observablejs/static/server/transport.js +708 -0
  226. pyobservablejs-0.2.0/src/observablejs/static/server/vega-lite.js +7 -0
  227. pyobservablejs-0.2.0/src/observablejs/static/server/xlsx.js +88 -0
  228. pyobservablejs-0.2.0/src/observablejs/static/server/zip.js +52 -0
  229. pyobservablejs-0.2.0/src/observablejs/static/widget.css +2 -0
  230. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/types.py +90 -8
  231. pyobservablejs-0.1.2/.agent-plugin/skills/pyobservablejs/references/data.md +0 -140
  232. pyobservablejs-0.1.2/src/observablejs/_notebook.py +0 -1384
  233. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-DZxWsvlF.js +0 -619
  234. pyobservablejs-0.1.2/src/observablejs/static/chunks/chunk-Do_x3Fr4.js +0 -25
  235. pyobservablejs-0.1.2/src/observablejs/static/index.js +0 -469
  236. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/.agent-plugin/plugin.json +0 -0
  237. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/.agent-plugin/skills/pyobservablejs/agents/openai.yaml +0 -0
  238. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/LICENSE +0 -0
  239. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_cell_ids.py +0 -0
  240. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_cells.py +0 -0
  241. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_files.py +0 -0
  242. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_graph_diagram.py +0 -0
  243. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_requests.py +0 -0
  244. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_themes.py +0 -0
  245. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/_view_options.py +0 -0
  246. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/agent.py +0 -0
  247. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/py.typed +0 -0
  248. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-8yGiBzpe.js +0 -0
  249. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-9wrQFRY9.js +0 -0
  250. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-BJBuA-nX.js +0 -0
  251. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-BbYPAYwa.js +0 -0
  252. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-Bk0bJ4nQ.js +0 -0
  253. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-CE8y8yOz.js +0 -0
  254. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-CWz50zkY.js +0 -0
  255. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-DB9UtIZp.js +0 -0
  256. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-DFOfyqo1.js +0 -0
  257. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-DWy2KXvB.js +0 -0
  258. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-DvCCsF21.js +0 -0
  259. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-Dy4uBu1J.js +0 -0
  260. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-J-B4Amup.js +0 -0
  261. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-OcPggk94.js +0 -0
  262. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-XwrUO7iV.js +0 -0
  263. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-YNPpR7K-.js +0 -0
  264. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-eHnX08no.js +0 -0
  265. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-hBpTZX5r.js +0 -0
  266. {pyobservablejs-0.1.2 → pyobservablejs-0.2.0}/src/observablejs/static/chunks/chunk-nUtTZkU8.js +0 -0
  267. /pyobservablejs-0.1.2/src/observablejs/static/widget.css → /pyobservablejs-0.2.0/src/observablejs/static/server/browser/server.css +0 -0
@@ -125,20 +125,20 @@ still produce an empty or misleading chart. Follow
125
125
 
126
126
  ## Choose the access path
127
127
 
128
- | Task | API or reference |
129
- | ------------------------------------------------- | ---------------------------------------------------------------------- |
130
- | Change Python inputs | `notebook.update_variables(patch)` |
131
- | Replace the Python-owned environment | `notebook.replace_variables(mapping)` |
132
- | Restore authored computation | `notebook.reset_variables(*names)` |
133
- | Check or raise browser failures | `view.diagnostics`, `view.raise_for_errors()`, `await view.ready()` |
134
- | Read a selected cell's preview | `state.result("chart").values` |
135
- | Find source, dependencies, and imports | `view.inspection`, `notebook.cells` |
136
- | List tables or read exact data | `view.datasets`, `await view.read(...)`, [data.md](references/data.md) |
137
- | Configure hosts or live code-mode editing | [hosts.md](references/hosts.md) |
138
- | Compose views, use files, import or export source | [workflows.md](references/workflows.md) |
128
+ | Task | API or reference |
129
+ | ------------------------------------------------- | ----------------------------------------------------------------------------------- |
130
+ | Change Python inputs | `notebook.update_variables(patch)` |
131
+ | Replace the Python-owned environment | `notebook.replace_variables(mapping)` |
132
+ | Restore authored computation | `notebook.reset_variables(*names)` |
133
+ | Check or raise browser failures | `view.diagnostics`, `view.raise_for_errors()`, `await view.ready()` |
134
+ | Read a selected cell's preview | `state.result("chart").values` |
135
+ | Find source, dependencies, and imports | `view.inspection`, `notebook.cells` |
136
+ | List tables or read exact data | `view.datasets`, `await view.data[name].to_python()`, [data.md](references/data.md) |
137
+ | Configure hosts or live code-mode editing | [hosts.md](references/hosts.md) |
138
+ | Compose views, use files, import or export source | [workflows.md](references/workflows.md) |
139
139
 
140
140
  Strings passed to `state.result()` and `notebook.view()` are cell keys.
141
- Strings passed to `view.read()` are JavaScript variable names. Keep that
141
+ Strings passed to `view.data[name]` are JavaScript variable names. Keep that
142
142
  distinction explicit in code.
143
143
 
144
144
  Let `obs.errors.ObservableError` subclasses propagate when the agent needs a
@@ -0,0 +1,79 @@
1
+ # Inspect source and extract data
2
+
3
+ Use `notebook.cells`, `notebook.files`, `notebook.data`, and `notebook.graph`.
4
+ Cell keys identify authored cells. Data names identify JavaScript variables.
5
+ Conversions return Python objects and dataframes directly.
6
+
7
+ ```python
8
+ notebook.cells["chart"].source
9
+ notebook.files["sales.csv"].url
10
+ notebook.data.names()
11
+ notebook.graph.upstream("chart")
12
+ frame = notebook.data["sales"].to_polars(columns=["category", "value"], limit=1000)
13
+ ```
14
+
15
+ Notebook data and graph inspection use the optional server extra. The default
16
+ engine is Deno. Network access is enabled by default; use
17
+ `notebook.data.using(network=False)` for offline execution. Use `notebook.data.using(engine="chromium")` for
18
+ actual browser capabilities. A notebook owns its lazy executions and closes
19
+ them through `close()` or its context manager.
20
+
21
+ ## Widget route
22
+
23
+ A displayed view uses anywidget and needs no Deno:
24
+
25
+ ```python
26
+ names = await view.data.names()
27
+ frame = await view.data["sales"].to_polars()
28
+ rows = await view.data["sales"].to_python(limit=10)
29
+ graph = await view.graph.snapshot()
30
+ ```
31
+
32
+ Reads cover the view's evaluated cells and hidden dependencies. They work with
33
+ `capture_state=False`. In Jupyter, await reads after display. In marimo, schedule
34
+ an async task and let the executing cell finish, as described in [hosts.md](hosts.md).
35
+
36
+ For passive reactive observation, `view.inspection`, `view.datasets`, and
37
+ `view.diagnostics` publish readonly snapshots through traitlets. `view.state`
38
+ contains bounded previews, not full dataframe exports.
39
+
40
+ ## Discovery and provenance
41
+
42
+ ```python
43
+ catalog = await view.data.discover()
44
+ for dataset in catalog.datasets:
45
+ print(dataset.name, await dataset.describe())
46
+ frame = await catalog.datasets["sales"].to_polars()
47
+ ```
48
+
49
+ Discovery retains datasets when independent cells fail. Inspect `catalog.errors`
50
+ and `catalog.pending`. Discovered references pin value revisions and reject
51
+ stale reads. Direct `view.data[name]` references request the current value.
52
+
53
+ `describe()` reports kind, schema, row count, and native versus sampled schema
54
+ metadata. A sampled schema may not include every type or column in later rows.
55
+ `reference.sources` contains known static file and literal URL references, not
56
+ proof of actual fetches or exhaustive lineage. It is `None` before analysis is
57
+ available on an async reference.
58
+
59
+ ## Conversions and files
60
+
61
+ Use `to_python()`, `to_polars()`, `to_pandas()`, or `to_arrow()`. Install the target
62
+ library. Evaluated pandas conversion also requires PyArrow. Polars consumes IPC
63
+ directly. Use `columns`, `offset`, `limit`, and `path` to bound reads. A conversion
64
+ returns one coherent detached value or raises, rather than silently truncating.
65
+
66
+ ```python
67
+ raw = notebook.files["sales.csv"].read_bytes()
68
+ frame = notebook.files["sales.csv"].to_polars()
69
+ config = notebook.files["config.json"].to_python()
70
+ raw_from_browser = await view.files["sales.csv"].read_bytes()
71
+ ```
72
+
73
+ Notebook file operations use Python I/O and need no Deno. View file operations use
74
+ the originating browser. Pass `format=` when filename, content type, and content
75
+ signatures cannot establish the parser. For advanced parsing, pass `read_bytes()`
76
+ to the dataframe library's own reader.
77
+
78
+ Headless data and Python files are synchronous by default. Their explicit async
79
+ accessors are `notebook.data.aio` and `notebook.files.aio`.
@@ -72,7 +72,7 @@ that operation's exception:
72
72
 
73
73
  ```python
74
74
  try:
75
- result = await view.read("visible", format="rows", limit=10)
75
+ result = await view.data["visible"].to_python(limit=10)
76
76
  except obs.errors.ObservableError as error:
77
77
  operation_diagnostics = [asdict(diagnostic) for diagnostic in error.diagnostics]
78
78
  raise
@@ -103,7 +103,7 @@ the failed check.
103
103
  For the starter's `chart` key:
104
104
 
105
105
  ```python
106
- print(notebook.cell("chart").source)
106
+ print(notebook.cells["chart"].source)
107
107
  inspection = view.inspection
108
108
  if inspection is not None:
109
109
  chart = inspection.graph.cell("chart")
@@ -137,9 +137,9 @@ import can have `source=None` and `resolved=None`.
137
137
  For the starter, `visible` is the transformed table consumed by the chart:
138
138
 
139
139
  ```python
140
- sample = await view.read("visible", format="rows", limit=10)
141
- count = await view.read("rowCount", format="json")
142
- print(sample.data, count.data)
140
+ sample = await view.data["visible"].to_python(limit=10)
141
+ count = await view.data["rowCount"].to_python()
142
+ print(sample, count)
143
143
  ```
144
144
 
145
145
  Expect two rows and count `2` at `minimum=0`, then one row and count `1` at
@@ -6,7 +6,7 @@ Read [SKILL.md](../SKILL.md) for the object model and first chart.
6
6
 
7
7
  Use the notebook project's dependency manager or the host's package-management
8
8
  API. Apply that project's version pins and lockfile policy. Install `pyarrow`
9
- when Python must decode Arrow exports with `NotebookRead.to_arrow()`.
9
+ when using `reference.to_arrow()` or evaluated `reference.to_pandas()`.
10
10
 
11
11
  Check the running kernel, which may differ from a terminal environment:
12
12
 
@@ -48,8 +48,8 @@ Run checkpoints and reads in a later cell:
48
48
 
49
49
  ```python
50
50
  state = await view.ready(timeout=30)
51
- count = await view.read("rowCount", format="json")
52
- print(count.data)
51
+ count = await view.data["rowCount"].to_python()
52
+ print(count)
53
53
  ```
54
54
 
55
55
  Jupyter can process widget replies while this call awaits. `ready()` waits for
@@ -130,7 +130,7 @@ errors such as duplicate Python definitions must be fixed in the host cells.
130
130
 
131
131
  Current marimo processes widget replies on the same command loop as ordinary
132
132
  cell and code-mode execution. Top-level async syntax does not make a direct
133
- `await view.ready()` or `await view.read(...)` safe inside that executing call.
133
+ `await view.ready()` or `await view.data[name].to_python()` safe inside that executing call.
134
134
  Start the request, return control, and consume its result later.
135
135
 
136
136
  For reactive data reads, use two separate Python cells. The producer starts a
@@ -145,7 +145,7 @@ get_data, set_data = mo.state(None)
145
145
 
146
146
  async def load_rows():
147
147
  try:
148
- set_data(await view.read("visible", format="rows", limit=10))
148
+ set_data(await view.data["visible"].to_python(limit=10))
149
149
  except Exception as error:
150
150
  set_data(error)
151
151
 
@@ -160,7 +160,7 @@ data = get_data()
160
160
  if isinstance(data, Exception):
161
161
  raise data
162
162
  if data is not None:
163
- print(data.data)
163
+ print(data)
164
164
  ```
165
165
 
166
166
  The displayed `view` comes from the starter. A `None` value means the request
@@ -214,7 +214,7 @@ else:
214
214
  print("Browser checkpoint pending")
215
215
  ```
216
216
 
217
- Use the same container for one-off `view.read(...)` tasks. Cancel unfinished
217
+ Use the same container for one-off `view.data[name].to_python()` tasks. Cancel unfinished
218
218
  tasks and remove consumed entries. Delete a temporary helper cell through
219
219
  `ctx.delete_cell(...)` inside a context when finished, or retain it for repeated
220
220
  checks. Do not spin in the same execution waiting for `task.done()`.
@@ -132,8 +132,8 @@ and its dependencies as executable code with the host page's privileges.
132
132
  imported = obs.Notebook.from_observablehq("@d3/bar-chart", timeout=10)
133
133
  ```
134
134
 
135
- This fetches a public Observable document in Python. The displayed browser view
136
- then resolves its runtime modules and attachments. Inspect `imported.cells`
135
+ This fetches the source model from a public Observable page in Python. The
136
+ displayed browser view then resolves notebook modules and attachments. Inspect `imported.cells`
137
137
  before choosing a selection. Use canonical handles for anonymous cells.
138
138
 
139
139
  For an already loaded document mapping:
@@ -143,9 +143,10 @@ imported = obs.Notebook.from_observablehq_document(document)
143
143
  ```
144
144
 
145
145
  Read JSON or compressed dataset storage with the data tooling appropriate to
146
- that storage, then supply the document mapping. Preserve its `id` and `version`
147
- to retain import provenance and dependency resolution. `source_document` holds
148
- the original record, while `cells` describe the prepared Notebook Kit form.
146
+ that storage, then supply the document mapping. Preserve `id`, `version`, and
147
+ `resolutions` to retain import provenance and declared dependency pins.
148
+ `source_document` holds the original record, while `cells` describe the
149
+ prepared Notebook Kit form.
149
150
  Keep corpus samples and diagnostics in the user's designated artifact location.
150
151
 
151
152
  ## Export and finish
@@ -73,7 +73,7 @@ THE SOFTWARE.
73
73
  Packages
74
74
 
75
75
  - @observablehq/inspector 5.0.1 (ISC)
76
- - @observablehq/runtime 6.0.0 (ISC)
76
+ - @observablehq/runtime 6.0.1 (ISC)
77
77
 
78
78
  -------------------------------------------------------------------------------
79
79
 
@@ -307,7 +307,7 @@ THE SOFTWARE.
307
307
  ===============================================================================
308
308
  Packages
309
309
 
310
- - anywidget-bundle 0.0.1 (MIT)
310
+ - anywidget-bundle 0.1.1 (MIT)
311
311
 
312
312
  -------------------------------------------------------------------------------
313
313
 
@@ -467,7 +467,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
467
467
  ===============================================================================
468
468
  Packages
469
469
 
470
- - es-module-lexer 2.3.1 (MIT)
470
+ - es-module-lexer 2.3.2 (MIT)
471
471
 
472
472
  -------------------------------------------------------------------------------
473
473
 
@@ -906,3 +906,8 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
906
906
  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
907
907
  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
908
908
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
909
+
910
+ The optional server runtime includes the Playwright driver under Apache-2.0.
911
+ Its LICENSE, NOTICE, and ThirdPartyNotices.txt accompany the driver in
912
+ observablejs/static/server/driver/. Chromium is installed into the Playwright
913
+ browser cache when first requested.
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyobservablejs
3
- Version: 0.1.2
4
- Summary: Observable JavaScript notebooks as reusable Python widgets
3
+ Version: 0.2.0
4
+ Summary: Observable notebooks as Python widgets and headless computations
5
5
  Project-URL: Homepage, https://github.com/peter-gy/pyobservablejs
6
6
  Project-URL: Documentation, https://peter-gy.github.io/pyobservablejs/
7
7
  Project-URL: Source, https://github.com/peter-gy/pyobservablejs
@@ -21,9 +21,11 @@ Classifier: Programming Language :: Python :: 3.13
21
21
  Classifier: Programming Language :: Python :: 3.14
22
22
  Requires-Python: <3.15,>=3.11
23
23
  Requires-Dist: agent-plugins>=0.2
24
- Requires-Dist: anywidget-bundle==0.0.1
24
+ Requires-Dist: anywidget-bundle==0.1.1
25
25
  Requires-Dist: anywidget>=0.11.0
26
26
  Requires-Dist: traitlets>=5
27
+ Provides-Extra: server
28
+ Requires-Dist: deno<3,>=2.9.6; extra == 'server'
27
29
  Description-Content-Type: text/markdown
28
30
 
29
31
  # pyobservablejs
@@ -73,6 +75,18 @@ trust, since their JavaScript runs in the host page.
73
75
 
74
76
  **Experimental:** the API may change between releases.
75
77
 
78
+ ## Run headlessly
79
+
80
+ Install `pyobservablejs[server]` to inspect and evaluate notebooks in Python
81
+ scripts and services:
82
+
83
+ ```python
84
+ print(notebook.with_variables(threshold=0.5).data["doubled"].to_python())
85
+ ```
86
+
87
+ Read Python values, Polars or pandas dataframes, Arrow tables, and attachment bytes
88
+ through the data and file namespaces. [Headless Python guide](https://peter-gy.github.io/pyobservablejs/guide/server/).
89
+
76
90
  ## Build on it
77
91
 
78
92
  - **Compose views.** `notebook.view("result")` displays the result and evaluates
@@ -45,6 +45,18 @@ trust, since their JavaScript runs in the host page.
45
45
 
46
46
  **Experimental:** the API may change between releases.
47
47
 
48
+ ## Run headlessly
49
+
50
+ Install `pyobservablejs[server]` to inspect and evaluate notebooks in Python
51
+ scripts and services:
52
+
53
+ ```python
54
+ print(notebook.with_variables(threshold=0.5).data["doubled"].to_python())
55
+ ```
56
+
57
+ Read Python values, Polars or pandas dataframes, Arrow tables, and attachment bytes
58
+ through the data and file namespaces. [Headless Python guide](https://peter-gy.github.io/pyobservablejs/guide/server/).
59
+
48
60
  ## Build on it
49
61
 
50
62
  - **Compose views.** `notebook.view("result")` displays the result and evaluates
@@ -28,6 +28,9 @@ class CustomBuildHook(BuildHookInterface):
28
28
  static = Path(self.root, "src", "observablejs", "static")
29
29
  required = (
30
30
  static / "index.js",
31
+ static / "server" / "server.js",
32
+ static / "server" / "browser" / "browser.js",
33
+ static / "server" / "driver" / "index.mjs",
31
34
  static / "anywidget.json",
32
35
  static / "chunks" / "app.js",
33
36
  )
@@ -4,8 +4,8 @@ build-backend = "agent_plugins.build.hatchling"
4
4
 
5
5
  [project]
6
6
  name = "pyobservablejs"
7
- version = "0.1.2"
8
- description = "Observable JavaScript notebooks as reusable Python widgets"
7
+ version = "0.2.0"
8
+ description = "Observable notebooks as Python widgets and headless computations"
9
9
  readme = "README.md"
10
10
  license = "MIT"
11
11
  license-files = ["LICENSE", "NOTICE"]
@@ -13,7 +13,7 @@ authors = [{ name = "Peter Ferenc Gyarmati", email = "dev.petergy@gmail.com" }]
13
13
  maintainers = [{ name = "Peter Ferenc Gyarmati", email = "dev.petergy@gmail.com" }]
14
14
  requires-python = ">=3.11,<3.15"
15
15
  keywords = ["anywidget", "jupyter", "marimo", "notebooks", "observable", "visualization"]
16
- dependencies = ["agent-plugins>=0.2", "anywidget>=0.11.0", "anywidget-bundle==0.0.1", "traitlets>=5"]
16
+ dependencies = ["agent-plugins>=0.2", "anywidget>=0.11.0", "anywidget-bundle==0.1.1", "traitlets>=5"]
17
17
  classifiers = [
18
18
  "Programming Language :: Python :: 3",
19
19
  "Programming Language :: Python :: 3 :: Only",
@@ -24,6 +24,9 @@ classifiers = [
24
24
  "License :: OSI Approved :: MIT License",
25
25
  ]
26
26
 
27
+ [project.optional-dependencies]
28
+ server = ["deno>=2.9.6,<3"]
29
+
27
30
  [project.urls]
28
31
  Homepage = "https://github.com/peter-gy/pyobservablejs"
29
32
  Documentation = "https://peter-gy.github.io/pyobservablejs/"
@@ -11,8 +11,9 @@ from ._factories import (
11
11
  view_from_observablehq_document,
12
12
  )
13
13
  from ._graph import CellInfo, DependencyEdge, NotebookGraph
14
- from ._notebook import Notebook, NotebookCell, NotebookView
14
+ from ._notebook import Notebook, NotebookCell
15
15
  from ._themes import NOTEBOOK_THEMES
16
+ from ._view import NotebookView
16
17
 
17
18
  __version__ = _version("pyobservablejs")
18
19