solara 1.30.0__py2.py3-none-any.whl → 1.31.0__py2.py3-none-any.whl

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 (439) hide show
  1. {solara-1.30.0.dist-info → solara-1.31.0.dist-info}/METADATA +7 -42
  2. solara-1.31.0.dist-info/RECORD +5 -0
  3. {solara-1.30.0.dist-info → solara-1.31.0.dist-info}/WHEEL +1 -1
  4. {solara/template/portal → solara-1.31.0.dist-info/licenses}/LICENSE +1 -1
  5. solara/__init__.py +0 -123
  6. solara/__main__.py +0 -734
  7. solara/alias.py +0 -6
  8. solara/autorouting.py +0 -554
  9. solara/cache.py +0 -294
  10. solara/checks.html +0 -71
  11. solara/checks.py +0 -224
  12. solara/comm.py +0 -28
  13. solara/components/__init__.py +0 -59
  14. solara/components/alert.py +0 -155
  15. solara/components/applayout.py +0 -393
  16. solara/components/button.py +0 -85
  17. solara/components/card.py +0 -87
  18. solara/components/checkbox.py +0 -50
  19. solara/components/code_highlight_css.py +0 -11
  20. solara/components/code_highlight_css.vue +0 -63
  21. solara/components/columns.py +0 -159
  22. solara/components/component_vue.py +0 -109
  23. solara/components/cross_filter.py +0 -335
  24. solara/components/dataframe.py +0 -546
  25. solara/components/datatable.py +0 -221
  26. solara/components/datatable.vue +0 -175
  27. solara/components/details.py +0 -21
  28. solara/components/download.vue +0 -35
  29. solara/components/echarts.py +0 -75
  30. solara/components/echarts.vue +0 -128
  31. solara/components/figure_altair.py +0 -39
  32. solara/components/file_browser.py +0 -182
  33. solara/components/file_download.py +0 -199
  34. solara/components/file_drop.py +0 -139
  35. solara/components/file_drop.vue +0 -83
  36. solara/components/file_list_widget.vue +0 -78
  37. solara/components/head.py +0 -27
  38. solara/components/head_tag.py +0 -49
  39. solara/components/head_tag.vue +0 -60
  40. solara/components/image.py +0 -173
  41. solara/components/input.py +0 -440
  42. solara/components/link.py +0 -55
  43. solara/components/markdown.py +0 -371
  44. solara/components/markdown_editor.py +0 -25
  45. solara/components/markdown_editor.vue +0 -362
  46. solara/components/matplotlib.py +0 -74
  47. solara/components/meta.py +0 -47
  48. solara/components/misc.py +0 -333
  49. solara/components/pivot_table.py +0 -258
  50. solara/components/pivot_table.vue +0 -158
  51. solara/components/progress.py +0 -47
  52. solara/components/select.py +0 -186
  53. solara/components/select.vue +0 -27
  54. solara/components/slider.py +0 -442
  55. solara/components/slider_date.vue +0 -56
  56. solara/components/spinner-solara.vue +0 -105
  57. solara/components/spinner.py +0 -30
  58. solara/components/sql_code.py +0 -33
  59. solara/components/sql_code.vue +0 -128
  60. solara/components/style.py +0 -105
  61. solara/components/switch.py +0 -68
  62. solara/components/tab_navigation.py +0 -37
  63. solara/components/title.py +0 -90
  64. solara/components/title.vue +0 -38
  65. solara/components/togglebuttons.py +0 -202
  66. solara/components/tooltip.py +0 -61
  67. solara/datatypes.py +0 -143
  68. solara/express.py +0 -241
  69. solara/hooks/__init__.py +0 -4
  70. solara/hooks/dataframe.py +0 -99
  71. solara/hooks/misc.py +0 -263
  72. solara/hooks/use_reactive.py +0 -129
  73. solara/hooks/use_thread.py +0 -129
  74. solara/kitchensink.py +0 -8
  75. solara/lab/__init__.py +0 -34
  76. solara/lab/components/__init__.py +0 -6
  77. solara/lab/components/chat.py +0 -203
  78. solara/lab/components/confirmation_dialog.py +0 -165
  79. solara/lab/components/cross_filter.py +0 -7
  80. solara/lab/components/input_date.py +0 -298
  81. solara/lab/components/menu.py +0 -181
  82. solara/lab/components/menu.vue +0 -38
  83. solara/lab/components/tabs.py +0 -274
  84. solara/lab/components/theming.py +0 -98
  85. solara/lab/components/theming.vue +0 -72
  86. solara/lab/hooks/__init__.py +0 -0
  87. solara/lab/hooks/dataframe.py +0 -12
  88. solara/lab/toestand.py +0 -3
  89. solara/lab/utils/__init__.py +0 -2
  90. solara/lab/utils/cookies.py +0 -5
  91. solara/lab/utils/dataframe.py +0 -115
  92. solara/lab/utils/headers.py +0 -5
  93. solara/layout.py +0 -44
  94. solara/minisettings.py +0 -133
  95. solara/py.typed +0 -0
  96. solara/reactive.py +0 -93
  97. solara/routing.py +0 -268
  98. solara/scope/__init__.py +0 -87
  99. solara/scope/types.py +0 -55
  100. solara/server/__init__.py +0 -0
  101. solara/server/app.py +0 -490
  102. solara/server/assets/custom.css +0 -1
  103. solara/server/assets/custom.js +0 -1
  104. solara/server/assets/favicon.png +0 -0
  105. solara/server/assets/favicon.svg +0 -5
  106. solara/server/assets/style.css +0 -1665
  107. solara/server/assets/theme-dark.css +0 -437
  108. solara/server/assets/theme-light.css +0 -420
  109. solara/server/assets/theme.js +0 -3
  110. solara/server/cdn_helper.py +0 -77
  111. solara/server/esm.py +0 -69
  112. solara/server/fastapi.py +0 -5
  113. solara/server/flask.py +0 -286
  114. solara/server/jupyter/__init__.py +0 -2
  115. solara/server/jupyter/cdn_handler.py +0 -28
  116. solara/server/jupyter/server_extension.py +0 -29
  117. solara/server/jupytertools.py +0 -46
  118. solara/server/kernel.py +0 -319
  119. solara/server/kernel_context.py +0 -393
  120. solara/server/patch.py +0 -552
  121. solara/server/reload.py +0 -242
  122. solara/server/server.py +0 -437
  123. solara/server/settings.py +0 -212
  124. solara/server/shell.py +0 -240
  125. solara/server/starlette.py +0 -597
  126. solara/server/static/ansi.js +0 -270
  127. solara/server/static/highlight-dark.css +0 -82
  128. solara/server/static/highlight.css +0 -43
  129. solara/server/static/main-vuetify.js +0 -260
  130. solara/server/static/main.js +0 -163
  131. solara/server/static/solara_bootstrap.py +0 -129
  132. solara/server/static/sun.svg +0 -23
  133. solara/server/static/webworker.js +0 -42
  134. solara/server/telemetry.py +0 -212
  135. solara/server/templates/index.html.j2 +0 -1
  136. solara/server/templates/loader-plain.css +0 -11
  137. solara/server/templates/loader-plain.html +0 -20
  138. solara/server/templates/loader-solara.css +0 -111
  139. solara/server/templates/loader-solara.html +0 -40
  140. solara/server/templates/plain.html +0 -82
  141. solara/server/templates/solara.html.j2 +0 -446
  142. solara/server/threaded.py +0 -75
  143. solara/server/utils.py +0 -30
  144. solara/server/websocket.py +0 -44
  145. solara/settings.py +0 -56
  146. solara/tasks.py +0 -847
  147. solara/template/button.py +0 -16
  148. solara/template/markdown.py +0 -42
  149. solara/template/portal/.flake8 +0 -6
  150. solara/template/portal/.pre-commit-config.yaml +0 -28
  151. solara/template/portal/Procfile +0 -7
  152. solara/template/portal/mypy.ini +0 -3
  153. solara/template/portal/pyproject.toml +0 -26
  154. solara/template/portal/solara_portal/__init__.py +0 -3
  155. solara/template/portal/solara_portal/components/__init__.py +0 -2
  156. solara/template/portal/solara_portal/components/article.py +0 -28
  157. solara/template/portal/solara_portal/components/data.py +0 -28
  158. solara/template/portal/solara_portal/components/header.py +0 -6
  159. solara/template/portal/solara_portal/components/layout.py +0 -6
  160. solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -85
  161. solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -70
  162. solara/template/portal/solara_portal/data.py +0 -60
  163. solara/template/portal/solara_portal/pages/__init__.py +0 -67
  164. solara/template/portal/solara_portal/pages/article/__init__.py +0 -26
  165. solara/template/portal/solara_portal/pages/tabular.py +0 -29
  166. solara/template/portal/solara_portal/pages/viz/__init__.py +0 -69
  167. solara/template/portal/solara_portal/pages/viz/overview.py +0 -14
  168. solara/test/__init__.py +0 -0
  169. solara/test/pytest_plugin.py +0 -698
  170. solara/toestand.py +0 -772
  171. solara/util.py +0 -308
  172. solara/website/__init__.py +0 -0
  173. solara/website/assets/custom.css +0 -462
  174. solara/website/assets/images/logo-small.png +0 -0
  175. solara/website/assets/images/logo.svg +0 -17
  176. solara/website/assets/images/logo_white.svg +0 -50
  177. solara/website/assets/theme.js +0 -8
  178. solara/website/components/__init__.py +0 -5
  179. solara/website/components/algolia.vue +0 -24
  180. solara/website/components/algolia_api.vue +0 -157
  181. solara/website/components/docs.py +0 -118
  182. solara/website/components/header.py +0 -72
  183. solara/website/components/hero.py +0 -15
  184. solara/website/components/mailchimp.py +0 -12
  185. solara/website/components/mailchimp.vue +0 -47
  186. solara/website/components/notebook.py +0 -172
  187. solara/website/pages/__init__.py +0 -564
  188. solara/website/pages/apps/__init__.py +0 -16
  189. solara/website/pages/apps/authorization/__init__.py +0 -118
  190. solara/website/pages/apps/authorization/admin.py +0 -12
  191. solara/website/pages/apps/authorization/users.py +0 -12
  192. solara/website/pages/apps/jupyter-dashboard-1.py +0 -116
  193. solara/website/pages/apps/layout-demo.py +0 -40
  194. solara/website/pages/apps/multipage/__init__.py +0 -38
  195. solara/website/pages/apps/multipage/page1.py +0 -26
  196. solara/website/pages/apps/multipage/page2.py +0 -34
  197. solara/website/pages/apps/scatter.py +0 -136
  198. solara/website/pages/apps/scrolling.py +0 -63
  199. solara/website/pages/apps/tutorial-streamlit.py +0 -18
  200. solara/website/pages/changelog/__init__.py +0 -8
  201. solara/website/pages/changelog/changelog.md +0 -180
  202. solara/website/pages/contact/__init__.py +0 -8
  203. solara/website/pages/contact/contact.md +0 -17
  204. solara/website/pages/doc_use_download.py +0 -85
  205. solara/website/pages/documentation/__init__.py +0 -184
  206. solara/website/pages/documentation/advanced/__init__.py +0 -36
  207. solara/website/pages/documentation/advanced/content/00-overview.md +0 -1
  208. solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -1
  209. solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -191
  210. solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +0 -120
  211. solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +0 -149
  212. solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -66
  213. solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -43
  214. solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -120
  215. solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -4
  216. solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -30
  217. solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -38
  218. solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -24
  219. solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -104
  220. solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -19
  221. solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -3
  222. solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -160
  223. solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -13
  224. solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -236
  225. solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +0 -81
  226. solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -7
  227. solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -1
  228. solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +0 -167
  229. solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  230. solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -41
  231. solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -72
  232. solara/website/pages/documentation/advanced/content/__init__.py +0 -0
  233. solara/website/pages/documentation/api/__init__.py +0 -19
  234. solara/website/pages/documentation/api/cross_filter/__init__.py +0 -9
  235. solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +0 -23
  236. solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +0 -22
  237. solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +0 -22
  238. solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +0 -22
  239. solara/website/pages/documentation/api/hooks/__init__.py +0 -9
  240. solara/website/pages/documentation/api/hooks/use_cross_filter.py +0 -25
  241. solara/website/pages/documentation/api/hooks/use_dark_effective.py +0 -13
  242. solara/website/pages/documentation/api/hooks/use_effect.md +0 -43
  243. solara/website/pages/documentation/api/hooks/use_effect.py +0 -9
  244. solara/website/pages/documentation/api/hooks/use_exception.py +0 -33
  245. solara/website/pages/documentation/api/hooks/use_memo.md +0 -16
  246. solara/website/pages/documentation/api/hooks/use_memo.py +0 -9
  247. solara/website/pages/documentation/api/hooks/use_previous.py +0 -32
  248. solara/website/pages/documentation/api/hooks/use_reactive.py +0 -15
  249. solara/website/pages/documentation/api/hooks/use_state.py +0 -11
  250. solara/website/pages/documentation/api/hooks/use_state_or_update.py +0 -68
  251. solara/website/pages/documentation/api/hooks/use_thread.md +0 -58
  252. solara/website/pages/documentation/api/hooks/use_thread.py +0 -44
  253. solara/website/pages/documentation/api/hooks/use_trait_observe.py +0 -13
  254. solara/website/pages/documentation/api/routing/__init__.py +0 -9
  255. solara/website/pages/documentation/api/routing/generate_routes.py +0 -11
  256. solara/website/pages/documentation/api/routing/generate_routes_directory.py +0 -11
  257. solara/website/pages/documentation/api/routing/resolve_path.py +0 -36
  258. solara/website/pages/documentation/api/routing/route.py +0 -32
  259. solara/website/pages/documentation/api/routing/use_route.py +0 -80
  260. solara/website/pages/documentation/api/routing/use_router.py +0 -15
  261. solara/website/pages/documentation/api/utilities/__init__.py +0 -9
  262. solara/website/pages/documentation/api/utilities/component_vue.py +0 -11
  263. solara/website/pages/documentation/api/utilities/computed.py +0 -16
  264. solara/website/pages/documentation/api/utilities/display.py +0 -15
  265. solara/website/pages/documentation/api/utilities/get_kernel_id.py +0 -16
  266. solara/website/pages/documentation/api/utilities/get_session_id.py +0 -16
  267. solara/website/pages/documentation/api/utilities/memoize.py +0 -36
  268. solara/website/pages/documentation/api/utilities/on_kernel_start.py +0 -27
  269. solara/website/pages/documentation/api/utilities/reactive.py +0 -15
  270. solara/website/pages/documentation/api/utilities/widget.py +0 -104
  271. solara/website/pages/documentation/components/__init__.py +0 -12
  272. solara/website/pages/documentation/components/advanced/__init__.py +0 -9
  273. solara/website/pages/documentation/components/advanced/link.py +0 -28
  274. solara/website/pages/documentation/components/advanced/meta.py +0 -21
  275. solara/website/pages/documentation/components/advanced/style.py +0 -44
  276. solara/website/pages/documentation/components/common.py +0 -9
  277. solara/website/pages/documentation/components/data/__init__.py +0 -9
  278. solara/website/pages/documentation/components/data/dataframe.py +0 -44
  279. solara/website/pages/documentation/components/data/pivot_table.py +0 -81
  280. solara/website/pages/documentation/components/enterprise/__init__.py +0 -9
  281. solara/website/pages/documentation/components/enterprise/avatar.py +0 -19
  282. solara/website/pages/documentation/components/enterprise/avatar_menu.py +0 -20
  283. solara/website/pages/documentation/components/input/__init__.py +0 -9
  284. solara/website/pages/documentation/components/input/button.py +0 -22
  285. solara/website/pages/documentation/components/input/checkbox.py +0 -12
  286. solara/website/pages/documentation/components/input/file_browser.py +0 -33
  287. solara/website/pages/documentation/components/input/file_drop.py +0 -75
  288. solara/website/pages/documentation/components/input/input.py +0 -18
  289. solara/website/pages/documentation/components/input/select.py +0 -21
  290. solara/website/pages/documentation/components/input/slider.py +0 -28
  291. solara/website/pages/documentation/components/input/switch.py +0 -12
  292. solara/website/pages/documentation/components/input/togglebuttons.py +0 -20
  293. solara/website/pages/documentation/components/lab/__init__.py +0 -9
  294. solara/website/pages/documentation/components/lab/chat.py +0 -108
  295. solara/website/pages/documentation/components/lab/confirmation_dialog.py +0 -55
  296. solara/website/pages/documentation/components/lab/cookies_headers.py +0 -48
  297. solara/website/pages/documentation/components/lab/input_date.py +0 -19
  298. solara/website/pages/documentation/components/lab/menu.py +0 -21
  299. solara/website/pages/documentation/components/lab/tab.py +0 -24
  300. solara/website/pages/documentation/components/lab/tabs.py +0 -44
  301. solara/website/pages/documentation/components/lab/task.py +0 -12
  302. solara/website/pages/documentation/components/lab/theming.py +0 -72
  303. solara/website/pages/documentation/components/lab/use_task.py +0 -12
  304. solara/website/pages/documentation/components/layout/__init__.py +0 -9
  305. solara/website/pages/documentation/components/layout/app_bar.py +0 -15
  306. solara/website/pages/documentation/components/layout/app_bar_title.py +0 -15
  307. solara/website/pages/documentation/components/layout/app_layout.py +0 -23
  308. solara/website/pages/documentation/components/layout/card.py +0 -14
  309. solara/website/pages/documentation/components/layout/card_actions.py +0 -15
  310. solara/website/pages/documentation/components/layout/column.py +0 -29
  311. solara/website/pages/documentation/components/layout/columns.py +0 -26
  312. solara/website/pages/documentation/components/layout/columns_responsive.py +0 -67
  313. solara/website/pages/documentation/components/layout/griddraggable.py +0 -61
  314. solara/website/pages/documentation/components/layout/gridfixed.py +0 -21
  315. solara/website/pages/documentation/components/layout/hbox.py +0 -17
  316. solara/website/pages/documentation/components/layout/row.py +0 -29
  317. solara/website/pages/documentation/components/layout/sidebar.py +0 -23
  318. solara/website/pages/documentation/components/layout/vbox.py +0 -19
  319. solara/website/pages/documentation/components/output/__init__.py +0 -9
  320. solara/website/pages/documentation/components/output/file_download.py +0 -12
  321. solara/website/pages/documentation/components/output/html.py +0 -22
  322. solara/website/pages/documentation/components/output/image.py +0 -12
  323. solara/website/pages/documentation/components/output/markdown.py +0 -59
  324. solara/website/pages/documentation/components/output/markdown_editor.py +0 -53
  325. solara/website/pages/documentation/components/output/sql_code.py +0 -84
  326. solara/website/pages/documentation/components/output/tooltip.py +0 -12
  327. solara/website/pages/documentation/components/page/__init__.py +0 -9
  328. solara/website/pages/documentation/components/page/head.py +0 -19
  329. solara/website/pages/documentation/components/page/title.py +0 -28
  330. solara/website/pages/documentation/components/status/__init__.py +0 -9
  331. solara/website/pages/documentation/components/status/error.py +0 -40
  332. solara/website/pages/documentation/components/status/info.py +0 -40
  333. solara/website/pages/documentation/components/status/progress.py +0 -10
  334. solara/website/pages/documentation/components/status/spinner.py +0 -10
  335. solara/website/pages/documentation/components/status/success.py +0 -40
  336. solara/website/pages/documentation/components/status/warning.py +0 -47
  337. solara/website/pages/documentation/components/viz/__init__.py +0 -9
  338. solara/website/pages/documentation/components/viz/altair.py +0 -44
  339. solara/website/pages/documentation/components/viz/echarts.py +0 -78
  340. solara/website/pages/documentation/components/viz/matplotlib.py +0 -32
  341. solara/website/pages/documentation/components/viz/plotly.py +0 -63
  342. solara/website/pages/documentation/components/viz/plotly_express.py +0 -41
  343. solara/website/pages/documentation/examples/__init__.py +0 -52
  344. solara/website/pages/documentation/examples/ai/__init__.py +0 -10
  345. solara/website/pages/documentation/examples/ai/chatbot.py +0 -96
  346. solara/website/pages/documentation/examples/ai/tokenizer.py +0 -106
  347. solara/website/pages/documentation/examples/basics/__init__.py +0 -2
  348. solara/website/pages/documentation/examples/basics/sine.py +0 -28
  349. solara/website/pages/documentation/examples/fullscreen/__init__.py +0 -9
  350. solara/website/pages/documentation/examples/fullscreen/authorization.py +0 -3
  351. solara/website/pages/documentation/examples/fullscreen/layout_demo.py +0 -3
  352. solara/website/pages/documentation/examples/fullscreen/multipage.py +0 -3
  353. solara/website/pages/documentation/examples/fullscreen/scatter.py +0 -3
  354. solara/website/pages/documentation/examples/fullscreen/scrolling.py +0 -3
  355. solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +0 -3
  356. solara/website/pages/documentation/examples/general/__init__.py +0 -9
  357. solara/website/pages/documentation/examples/general/custom_storage.py +0 -69
  358. solara/website/pages/documentation/examples/general/deploy_model.py +0 -114
  359. solara/website/pages/documentation/examples/general/live_update.py +0 -38
  360. solara/website/pages/documentation/examples/general/login_oauth.py +0 -76
  361. solara/website/pages/documentation/examples/general/mycard.vue +0 -58
  362. solara/website/pages/documentation/examples/general/pokemon_search.py +0 -51
  363. solara/website/pages/documentation/examples/general/vue_component.py +0 -50
  364. solara/website/pages/documentation/examples/ipycanvas.py +0 -49
  365. solara/website/pages/documentation/examples/libraries/__init__.py +0 -9
  366. solara/website/pages/documentation/examples/libraries/altair.py +0 -63
  367. solara/website/pages/documentation/examples/libraries/bqplot.py +0 -39
  368. solara/website/pages/documentation/examples/libraries/ipyleaflet.py +0 -32
  369. solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +0 -65
  370. solara/website/pages/documentation/examples/utilities/__init__.py +0 -9
  371. solara/website/pages/documentation/examples/utilities/calculator.py +0 -157
  372. solara/website/pages/documentation/examples/utilities/countdown_timer.py +0 -64
  373. solara/website/pages/documentation/examples/utilities/todo.py +0 -195
  374. solara/website/pages/documentation/examples/visualization/__init__.py +0 -6
  375. solara/website/pages/documentation/examples/visualization/annotator.py +0 -68
  376. solara/website/pages/documentation/examples/visualization/linked_views.py +0 -84
  377. solara/website/pages/documentation/examples/visualization/plotly.py +0 -43
  378. solara/website/pages/documentation/faq/__init__.py +0 -11
  379. solara/website/pages/documentation/faq/content/99-faq.md +0 -73
  380. solara/website/pages/documentation/getting_started/__init__.py +0 -15
  381. solara/website/pages/documentation/getting_started/content/00-quickstart.md +0 -84
  382. solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -121
  383. solara/website/pages/documentation/getting_started/content/02-installing.md +0 -81
  384. solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -9
  385. solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +0 -13
  386. solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +0 -84
  387. solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -120
  388. solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -141
  389. solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -140
  390. solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +0 -64
  391. solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
  392. solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +0 -445
  393. solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +0 -1000
  394. solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +0 -7
  395. solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -218
  396. solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -83
  397. solara/website/pages/documentation/getting_started/content/06-reference/00-overview.md +0 -3
  398. solara/website/pages/documentation/getting_started/content/06-reference/40-static_files.md +0 -27
  399. solara/website/pages/documentation/getting_started/content/06-reference/41-asset-files.md +0 -32
  400. solara/website/pages/documentation/getting_started/content/06-reference/60-static-site-generation.md +0 -55
  401. solara/website/pages/documentation/getting_started/content/06-reference/70-search.md +0 -30
  402. solara/website/pages/documentation/getting_started/content/06-reference/80-reloading.md +0 -30
  403. solara/website/pages/documentation/getting_started/content/06-reference/90-notebook-support.md +0 -4
  404. solara/website/pages/documentation/getting_started/content/06-reference/95-caching.md +0 -143
  405. solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -3
  406. solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +0 -269
  407. solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -76
  408. solara/website/pages/documentation/getting_started/content/08-lab/00-what-is-lab.md +0 -3
  409. solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -22
  410. solara/website/pages/documentation/getting_started/content/__init__.py +0 -0
  411. solara/website/pages/docutils.py +0 -38
  412. solara/website/pages/showcase/__init__.py +0 -105
  413. solara/website/pages/showcase/domino_code_assist.py +0 -60
  414. solara/website/pages/showcase/planeto_tessa.py +0 -19
  415. solara/website/pages/showcase/solara_dev.py +0 -54
  416. solara/website/pages/showcase/solarathon_2023_team_2.py +0 -22
  417. solara/website/pages/showcase/solarathon_2023_team_4.py +0 -22
  418. solara/website/pages/showcase/solarathon_2023_team_5.py +0 -23
  419. solara/website/pages/showcase/solarathon_2023_team_6.py +0 -34
  420. solara/website/pages/showcase/wanderlust.py +0 -27
  421. solara/website/public/beach.jpeg +0 -0
  422. solara/website/public/logo.svg +0 -6
  423. solara/website/public/social/discord.svg +0 -1
  424. solara/website/public/social/github.svg +0 -1
  425. solara/website/public/social/twitter.svg +0 -3
  426. solara/website/public/success.html +0 -25
  427. solara/website/templates/index.html.j2 +0 -117
  428. solara/website/utils.py +0 -51
  429. solara/widgets/__init__.py +0 -1
  430. solara/widgets/vue/gridlayout.vue +0 -110
  431. solara/widgets/vue/html.vue +0 -4
  432. solara/widgets/vue/navigator.vue +0 -104
  433. solara/widgets/vue/vegalite.vue +0 -115
  434. solara/widgets/widgets.py +0 -65
  435. solara-1.30.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -7
  436. solara-1.30.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json +0 -7
  437. solara-1.30.0.dist-info/RECORD +0 -438
  438. solara-1.30.0.dist-info/entry_points.txt +0 -5
  439. /solara-1.30.0.dist-info/licenses/LICENSE → /LICENSE +0 -0
@@ -1,236 +0,0 @@
1
- # Routing
2
-
3
- Routing takes care of linking a web address (more specifically the [pathname](https://developer.mozilla.org/en-US/docs/Web/API/Location), e.g. "/docs/basics/solara") to a state of the UI,
4
- usually in the form of what appears as pages to a user.
5
-
6
-
7
- Routing includes navigation (hitting the back and forward button of your browser) without causing a page reload.
8
-
9
-
10
- ## Automatic routing
11
-
12
- Setting up routing can be repetitive, and therefore Solara comes also with a more opinionated method for setting up routing automatically.
13
-
14
- ### Based on a directory
15
-
16
- Using [`generate_routes_directory(path: Path) -> List[solara.Route]:`](/documentation/api/routing/generate_routes_directory) we can request Solara to give us a list of
17
- routes by scanning a directory for Python scripts, Notebooks and Markdown files.
18
-
19
- This function is being used by Solara if you run solara server with a directory as argument name, as used in [our Multi Page guide](/documentation/advanced/howto/multipage). More details can be found there.
20
-
21
-
22
- ### Based on a Python package
23
-
24
- Similar to the previous section [`generate_routes(module: ModuleType) -> List[solara.Route]:`](/documentation/api/routing/generate_routes) will return a list of routes by scanning a Python package or module for `Page` components, or `app` elements. Again, more information can be found at [our Multi Page guide](/documentation/advanced/howto/multipage).
25
-
26
- ## Manually defining routes
27
-
28
- In Solara, we set up routing by defining a list of `solara.Route` objects, where each route can have another list of routes, its children, forming
29
- a tree of routes. We assign this list to the `routes` variable in your main app script or module.
30
-
31
- ### Defining route components
32
-
33
- If no `Page` component is found in your main script or module, Solara will assume you have either set the `component` or the `module` argument of the `solara.Route` object.
34
-
35
- For example
36
-
37
- ```python
38
- import solara
39
- from solara.website.pages.examples.utilities import calculator
40
-
41
-
42
- @solara.component
43
- def Home():
44
- solara.Markdown("Home")
45
-
46
-
47
- @solara.component
48
- def About():
49
- solara.Markdown("About")
50
-
51
-
52
- routes = [
53
- solara.Route(path="/", component=Home, label="Home"),
54
- # the calculator module should have a Page component
55
- solara.Route(path="calculator", module=calculator, label="Calculator"),
56
- solara.Route(path="about", component=About, label="About"),
57
- ]
58
- ```
59
-
60
- ### Defining route components
61
-
62
- If you do define a `Page` component, you are fully responsible for how routing is done, but we recommend using [use_route](/documentation/api/routing/use_route).
63
-
64
- An example route definition could be something like this:
65
-
66
- ```python
67
- import solara as sol
68
-
69
- routes = [
70
- # route level == 0
71
- solara.Route(path="/"), # matches empty path ''
72
- solara.Route(
73
- # route level == 1
74
- path="docs", # matches '/docs'
75
- children=[
76
- # route level == 2
77
- solara.Route(path="basics", children=[ # matches '/docs/basics'
78
- # route level == 3
79
- solara.Route(path="react"), # matches '/docs/basics/react'
80
- solara.Route(path="ipywidgets"), # matches '/docs/basics/ipywidgets'
81
- solara.Route(path="solara"), # matches '/docs/basics/solara'
82
- ]),
83
- solara.Route(path="advanced") # matches '/docs/advanced'
84
- ],
85
- ),
86
- solara.Route(
87
- path="blog",
88
- # route level == 1
89
- children=[
90
- solara.Route(path="/"), # matches '/blog'
91
- solara.Route(path="foo"), # matches '/blog/foo'
92
- solara.Route(path="bar"), # matches '/blog/bar'
93
- ],
94
- ),
95
- solara.Route(path="contact") # matches '/contact'
96
- ]
97
-
98
- # Lets assume our pathname is `/docs/basics/react`,
99
- @solara.component
100
- def Page():
101
- level = solara.use_route_level() # returns 0
102
- route_current, routes_current_level = solara.use_routes()
103
- # route_current is routes[1], i.e. solara.Route(path="docs", children=[...])
104
- # routes_current_level is [routes[0], routes[1], routes[2], routes[3]], i.e.:
105
- # [solara.Route(path="/"), solara.Route(path="docs", children=[...]),
106
- # solara.Route(path="blog", children=[...]), solara.Route(path="contact")]
107
- if route_current is None: # no matching route
108
- return solara.Error("oops, page not found")
109
- else:
110
- # we could render some top level navigation here based on route_current_level and route_current
111
- return MyFirstLevelChildComponent()
112
- ```
113
-
114
- Routes are matched by splitting the pathname around the slash ("/") and matching each part to the routes. The level of the depth into the tree is what we call the `route_level`, which starts at 0, the top level.
115
- Each call to `use_route` will return the current route (if there is a match to the current path) and the list of siblings including itself.
116
-
117
-
118
- Now the `MyFirstLevelChildComponent` component is responsible for rendering the second level navigation:
119
-
120
- ```python
121
- @solara.component
122
- def MyFirstLevelChildComponent():
123
- level = solara.use_route_level() # returns 1
124
- route_current, routes_current_level = solara.use_routes()
125
- # route_current is routes[1].children[0], i.e. solara.Route(path="basics", children=[...])
126
- # routes_current_level is [routes[1].children[0], routes[1].children[1]], i.e.:
127
- # [solara.Route(path="basics", children=[...]), solara.Route(path="advanced")]
128
- if route_current is None: # no matching route
129
- return solara.Error("oops, page not found")
130
- else:
131
- # we could render some mid level navigation here based on route_current_level and route_current
132
- return MySecondLevelChildComponent()
133
-
134
- ```
135
-
136
- And the `MySecondLevelChildComponent` component is responsible for rendering the third level navigation:
137
-
138
- ```python
139
- @solara.component
140
- def MySecondLevelChildComponent():
141
- level = solara.use_route_level() # returns 2
142
- route_current, routes_current_level = solara.use_routes()
143
- # route_current is routes[1].children[0].children[0], i.e. solara.Route(path="react")
144
- # routes_current_level is [routes[1].children[0].children[0], routes[1].children[0].children[1], routes[1].children[0].children[2]], i.e.
145
- # [solara.Route(path="react"), solara.Route(path="ipywidgets"), solara.Route(path="solara")]
146
- if route_current is None: # no matching route
147
- return solara.Error("oops, page not found")
148
- else:
149
- # we could render some mid level navigation here based on route_current_level and route_current
150
- if route_current.path == "react":
151
- return DocsBasicReact() # render the actual content
152
- elif route_current.path == "ipywidgets":
153
- return DocsBasicIpyWidgets()
154
- elif route_current.path == "solara":
155
- return DocsBasicSolara()
156
- else:
157
- return solara.Error("oops, not possible!")
158
-
159
- ```
160
-
161
- From this code, we can see we are free how we transform the routes into the state of the UI (i.e. which components are rendered).
162
-
163
- ## Adding data
164
-
165
- Often, your render logic needs some extra data on what to display. For instance, you may want to dynamically render tabs based on the routes,
166
- which requires you to have a label, and know which component to add.
167
- For this purposed we added `label: str` and the `component' attributes, so you can defines routes likes:
168
-
169
- ```python
170
- routes = [
171
- solara.Route("/", component=Home, label="What is Solara ☀️?"),
172
- solara.Route("docs", component=docs.App, label="Docs", children=docs.routes),
173
- solara.Route(
174
- "demo",
175
- component=demo.Demo,
176
- children=demo.routes,
177
- label="Demo",
178
- ),
179
- ...
180
- ]
181
- ```
182
-
183
- In the case where you did not specify a `Page` component, label is used for the [Title](/documentation/components/page/title) component.
184
-
185
- If you need to store more data in the route, you are free to put whatever you want in the `data` attribute, see also [Route](/documentation/api/routing/route).
186
-
187
-
188
-
189
- ## Linking
190
-
191
- Note that all routes are relative, since a component does not know if it is embedded into a larger application, which may also do routing.
192
-
193
-
194
- Therefore you should never use the `route.path` for navigation since the route object has no knowledge of the full url
195
- (e.g. `/docs/basics/ipywigets`) but only knows its small piece of the pathname (e.g. `ipywidgets`)
196
-
197
- Using [`resolve_path`](/documentation/api/routing/resolve_path) we can request the full url for navigation.
198
-
199
- ```python
200
- def resolve_path(path_or_route: Union[str, solara.Route], level=0) -> str:
201
- ...
202
- ```
203
-
204
- We can pass this full URL to the [`solara.Link`](/documentation/components/advanced/link) component, e.g. like:
205
-
206
- ```python
207
- @solara.component
208
- def LinkToIpywidgets():
209
- route_ipywidgets = routes.children[1].children[0].children[1]
210
- # route_ipywidgets.path == "ipywidgets"
211
- path = solara.resolve_path(route_ipywidgets)
212
- # path == '/docs/basics/ipywidgets
213
- with solara.Link(path) as main:
214
- solara.Button("read about ipywidgets")
215
- return main
216
- ```
217
-
218
- ## Fully manual routing
219
-
220
- If you want to do routing fully manually, you can use the [`solara.use_router`](/documentation/api/routing/use_router) hook, and use the `.path` attribute.
221
-
222
- ```python
223
- import solara
224
-
225
-
226
- @solara.component
227
- def Page():
228
- router = solara.use_router()
229
- path = router.path
230
- parts = path.split("/")
231
- solara.Markdown(f"Path = {path!r}, and split up into {parts!r}")
232
- # now you can do anything with path or parts.
233
- # e.g.
234
- # if parts[0] == "docs":
235
- # solara.Markdown("You are in the docs section")
236
- ```
@@ -1,81 +0,0 @@
1
- # Solara server
2
-
3
- The solara server enables running ipywidgets based applications without a real Jupyter kernel, allowing multiple "Virtual kernels" to share the same process for better performance and scalability.
4
-
5
- ## WebSocket in Solara
6
- Solara uses a WebSocket to transmit state and updates directly from the server to the browser. This ensures that the state remains centralized on the server, facilitating state transitions server-side and enabling live updates to be pushed directly to the browser.
7
-
8
-
9
- ## Virtual Kernels
10
- Normally when a browser page connects to a Solara server, a virtual kernel is created and is assigned a unique identifier termed a "Kernel ID." Should a WebSocket disconnection occur, Solara attempts to re-establish the connection, sending the Kernel ID during this process. If the server recognizes this ID (and the requested kernel hasn't expired) the Solara app resumes operations seamlessly.
11
-
12
- ### Virtual kernel lifecycle
13
- Closing a browser page will directly shut the virtual kernel down (if this page was the last known page to the Solara server). This ensures that active closing of pages will directly clean up any memory usage on the server side for this kernel.
14
-
15
- However, when the websocket between the web page and the server disconnects, the server keeps the kernel alive for 24 hours after the closure of the last WebSocket connection. The duration is customizable through the `SOLARA_KERNEL_CULL_TIMEOUT` environment variable. This feature is particularly handy in scenarios where devices like computers hibernate, leading to WebSocket disconnections. Upon awakening and subsequent WebSocket reconnection, the Solara app picks up right where it left off.
16
-
17
- To optimize memory usage or address specific needs, one might opt for a shorter expiration duration. For instance, setting `SOLARA_KERNEL_CULL_TIMEOUT=1m` will cause sessions to expire after just 1 minute. Other possible options are `2d` (2 days), `3h` (3 hours), `30s` (30 seconds), etc. If no units are given, seconds are assumed.
18
-
19
- ### Maximum number of kernels connected
20
-
21
- Each virtual kernel runs in its own thread, this ensures that one particular user (actually browser page) cannot block the execution of another virtual kernel. However, each thread consumes a bit of resources. If you want to limit the number of kernels, this can be done by setting the `SOLARA_KERNELS_MAX_COUNT` environment variable. The default is unlimited (empty string), but you can set it to any number you like. If the limit is reached, the server will refuse new connections until a kernel is closed.
22
-
23
-
24
- ## Handling Multiple Workers
25
- In setups with multiple workers, it's possible for a page to reconnect to a different worker than its original. This would result in a loss of the virtual kernel (since it lives on a different worker), prompting the Solara app to initiate a fresh start. To prevent this scenario, a sticky session configuration is recommended, ensuring consistent client-worker connections. Utilizing a load balancer, such as [nginx](https://www.nginx.com/), can achieve this.
26
-
27
- If you have questions about setting this up, or require assistance, please [contact us](https://solara.dev/docs/contact).
28
-
29
- ## Sessions
30
-
31
- Solara uses a browser cookie (named `solara-session-id`) to store a unique session id. This session id is available via [get_session_id()](https://solara.dev/api/get_session_id) and is the same for all
32
- browser pages. This can be used to store state that outlives a page refresh.
33
-
34
- We recommend storing the state in an external database, especially in the case of multiple workers/nodes. If you want to store state associated to a session in-memory, make sure to set up sticky sessions.
35
-
36
-
37
-
38
-
39
- ## Readiness check
40
-
41
- To check if the server is ready to accept request, the `/readyz` endpoint is added, and should return a 200 HTTP status code, e.g.:
42
-
43
- ```
44
- $ curl http://localhost:8765/readyz
45
- curl -I localhost:8765
46
-
47
- HTTP/1.1 200 OK
48
- ...
49
- ```
50
-
51
- ## Live resource information
52
-
53
-
54
- To check resource usage of the server (CPU, memory, etc.), the `/resourcez` endpoint is added, and should return a 200 HTTP status code and include
55
- various resource information, like threads created and running, number of virtual kernels, etc. in JSON format. To get also memory and cpu usage, you can include
56
- the `?verbose` query parameter, e.g.:
57
-
58
- ```
59
- $ curl http://localhost:8765/resourcez\?verbose
60
- ```
61
-
62
- The JSON format may be subject to change.
63
-
64
-
65
-
66
- ## Production mode
67
-
68
- By default, solara runs in development mode. This means, it will:
69
-
70
- * Automatically [reload your project files](/documentation/getting_started/reference/reloading) by watching files on the filesystemn
71
- * Load debug version of the CSS files and JavaScript files for improved error messages (which leads to larger asset files).
72
-
73
- To disabled all of these option, pass the `--production` flag, or set the environment variable `SOLARA_MODE=production`.
74
-
75
- ## Telemetry
76
-
77
- Solara uses Mixpanel to collect usage of the solara server. We track when a server is started, stopped and a daily report of the number of unique users and connections made. To opt out of mixpanel telemetry, either:
78
-
79
- * Set the environmental variable `SOLARA_TELEMETRY_MIXPANEL_ENABLE` to `False`.
80
- * Install [python-dotenv](https://pypi.org/project/python-dotenv/) and put `SOLARA_TELEMETRY_MIXPANEL_ENABLE=False` in a `.env` file.
81
- * Run in auto restart mode (e.g. using `$ solara run sol.py --auto-restart`)
@@ -1,7 +0,0 @@
1
- # Voilà
2
-
3
- [Voilà](https://voila.readthedocs.io/) allows you to convert a Jupyter Notebook into an interactive dashboard that allows you to share your work with others.
4
-
5
- Voilà is Jupyter notebook focused, meaning that it will render all output from your notebook. Using [`voila-vuetify`](https://github.com/voila-dashboards/voila-vuetify) Voilà allows for a more app like experience, showing only the output you want.
6
-
7
- Voilà, together with `voila-vuetify` is an alternative to [Solara server](./solara-server). The most significant difference is that Voilà will start one kernel/process per page request, while [Solara server](./solara-server) can serve many more users from a single process. Sharing the same process means Solara apps can share memory among users (e.g. a large dataset), which will usually lead to better performance and less resource usage.
@@ -1,167 +0,0 @@
1
- # OAuth: authentication and authorization support
2
-
3
- ## What is OAuth
4
-
5
- OAuth (Open Authorization) is an open standard for token-based authentication and authorization. It enables third-party applications to obtain limited access to a user's resources on another service without exposing their credentials. The user can grant access to their resources on one site to another site without sharing their credentials, providing a secure and efficient way to authenticate users.
6
-
7
- You have probably used OAuth without realizing it when signing into various online services and applications. For example, when you use "Sign in with Google" or "Log in with Facebook" to access a third-party website or application, you are using OAuth. By leveraging OAuth, these services allow users to authenticate themselves using their existing Google or Facebook credentials, simplifying the login process and reducing the need for users to remember multiple usernames and passwords. OAuth has become an essential aspect of online identity management and is widely used by companies and developers to provide a seamless and secure authentication experience.
8
-
9
- ## Installing
10
-
11
- To install Solara with OAuth support, make sure you have [Solara Enterprise](/documentation/advanced/enterprise) install by run the following command:
12
-
13
- ```bash
14
- $ pip install solara solara-enterprise[auth]
15
- ```
16
-
17
-
18
- ## OAuth support in Solara
19
-
20
- Solara offers two modes for enabling OAuth: private mode and application controlled mode.
21
-
22
- ### Private mode
23
-
24
- In private mode, Solara pages or any static resources are not accessible without being authenticated. This mode is suitable for web servers that should not be publicly accessible. To enable private mode, set the following environment variable:
25
- ```bash
26
- SOLARA_OAUTH_PRIVATE=True
27
- ```
28
-
29
-
30
- ### Application controlled mode
31
-
32
- In application controlled mode, the application is responsible for checking if a user is authenticated. The application can show a login or logout link and provide user information when the user is logged in. Solara comes preconfigured to run on localhost out of the box, and no additional setup is required to enable OAuth for local development and testing.
33
-
34
- Here's an example of how to implement OAuth in application controlled mode:
35
-
36
- ```solara
37
- import solara
38
- from solara_enterprise import auth
39
-
40
- @solara.component
41
- def Page():
42
- if not auth.user.value:
43
- solara.Button("Login", icon_name="mdi-login", href=auth.get_login_url())
44
- else:
45
- userinfo = auth.user.value['userinfo']
46
- if 'name' in userinfo:
47
- solara.Markdown(f"### Welcome {userinfo['name']}")
48
- solara.Button("Logout", icon_name="mdi-logout", href=auth.get_logout_url())
49
- ```
50
- ## How to configure OAuth
51
-
52
- Solara supports the following OAuth providers: [Auth0](https://auth0.com/) and [Fief](https://fief.dev/).
53
-
54
-
55
- ### Configuring Auth0
56
-
57
- By default, Solara is configured with a test Auth0 account. This is useful for testing, but you should not use this in production. This account does limit solara running on localhost, port 8765 to 8770 (and 18765 to 18770 for running the tests).
58
-
59
- To configure your own Auth0 provider, you need to change the following environment variables from their defaults:
60
-
61
- ```bash
62
- # required if you don't use the default test account
63
- SOLARA_SESSION_SECRET_KEY="change me"
64
- # found in the Auth0 dashboard Applications->Applications->Client ID
65
- SOLARA_OAUTH_CLIENT_ID="cW7owP5Q52YHMZAnJwT8FPlH2ZKvvL3U"
66
- # found in the Auth0 dashboard Applications->Applications->Client secret
67
- SOLARA_OAUTH_CLIENT_SECRET="zxITXxoz54OjuSmdn-PluQgAwbeYyoB7ALlnLoodftvAn81usDXW0quchvoNvUYD"
68
- # found in the Auth0 dashboard Applications->Applications->Domain
69
- SOLARA_OAUTH_API_BASE_URL="dev-y02f02f2bpr8skxu785.us.auth0.com"
70
- ```
71
-
72
- You can optionally set the following environment variables:
73
-
74
- ```bash
75
- SOLARA_OAUTH_SCOPE = "openid profile email"
76
- ```
77
-
78
- ### Create your own Auth0 Application
79
-
80
-
81
- To create your own Auth0 application, follow these steps:
82
-
83
- 1. Go to the [Auth0 dashboard](https://manage.auth0.com/dashboard/) and click on "Applications" on the left side navigation menu.
84
-
85
- ![Auth0 dashboard](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/goto-applications.webp)
86
-
87
- 2. Click on "Create Application".
88
-
89
- ![Create Application](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/click-create-application.webp)
90
-
91
- 3. Enter a name for your application and select "Regular Web Applications" as the application type. Click on "Create".
92
-
93
- ![Create Application](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/name-type-create.webp)
94
-
95
- 4. Click "Skip Integration" to skip the integration step.
96
-
97
- 5. Click on the "Settings" tabs and enter the following information:
98
-
99
- - Allowed Callback URLs: `http://localhost:8765/_solara/auth/authorize, https://yourdomain.com/_solara/auth/authorize`
100
- - Allowed Logout URLs: `http://localhost:8765/_solara/auth/logout, https://yourdomain.com/_solara/auth/logout`
101
-
102
- Note that the localhost URLs are only meant for testing. You can remove them once you are ready to deploy your application.
103
- We recommend setting up a new application for each environment (e.g. development, staging, production).
104
-
105
- ![Callback URLs](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/callbacks.webp)
106
-
107
- 6. Configure Solara.
108
-
109
- At the top of the "Settings" tab, you should see your "Domain", "Client ID" and "Client Secret". You will need to set the following environment variables to these values:
110
-
111
- ```bash
112
- SOLARA_OAUTH_API_BASE_URL="dev-y02f2bpr8skxu785.us.auth0.com" # replace with your domain
113
- SOLARA_OAUTH_CLIENT_ID="ELOFERLovc7e7dPwkxO6WFAljtYj9UzJ" # replace with your client ID
114
- SOLARA_OAUTH_CLIENT_SECRET="..." # not shown here, replace with your client secret
115
- ```
116
-
117
- ![Settings](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/configuration-values.webp)
118
-
119
- Set your `SOLARA_SESSION_SECRET_KEY` to a random string. See the [Generating a secret key](#generating-a-secret-key) for a convenient way to generate a secret key.
120
-
121
- If you want to test on localhost, you might also want to set `SOLARA_SESSION_HTTPS_ONLY="false"`
122
-
123
- Now you can run the above solara example using your own auth0 provider.
124
-
125
-
126
- ### Configuring Fief
127
-
128
- You can also configure Solara to use our Fief test account. To do this, you need to set the following environment variables:
129
-
130
- ```bash
131
- SOLARA_SESSION_SECRET_KEY="change me" # required if you don't use the default test account
132
- SOLARA_OAUTH_CLIENT_ID="x2np62qgwp6hnEGTP4JYUE3igdZWhT-AvjpjwwDyKXU" # found in the Auth0 dashboard Clients->General Tab->Secret
133
- SOLARA_OAUTH_CLIENT_SECRET="XQlByE1pVIz5h2SBN2GYDwT_ziqArHJgLD3KqMlCHjg" # found in the Auth0 dashboard Clients->General Tab->ID
134
- SOLARA_OAUTH_API_BASE_URL="solara-dev.fief.dev" # found in the Fief dashboard Tenants->Base URL
135
- # different from Solara's default
136
- SOLARA_OAUTH_LOGOUT_PATH="logout"
137
- ```
138
-
139
- ### Generating a secret key
140
-
141
- To generate a secret key, you can use the following code:
142
-
143
- ```bash
144
- $ python -c "import secrets; print(secrets.token_urlsafe(32))"
145
- ZgrzSLUyft-JvnNMNJ2LgbCFVqcxPOatANAQhMD5EYU
146
- ```
147
-
148
- *Note: do not copy this key, run this yourself in a terminal.*
149
-
150
-
151
- ## OAuth Component
152
-
153
- Solara provides two convenient components for creating a user interface for login and logout:
154
-
155
- 1. [Avatar](/documentation/components/enterprise/avatar): This component shows the user's avatar.
156
- 2. [AvatarMenu](/documentation/components/enterprise/avatar_menu): This component shows a menu with the user's avatar and a logout button.
157
-
158
- ## Python version support
159
-
160
- Please note that Python 3.6 is not supported for Solara OAuth.
161
-
162
-
163
- ## Possible issues
164
-
165
- ### Wrong redirection
166
-
167
- If the redirection back to solara return to the wrong address, it might be due to solara not choosing the right default for `SOLARA_BASE_URL`. For instance this variable could be set to `SOLARA_BASE_URL=https://solara.dev` for the solara.dev server. If you application runs behind a subpath, e.g. `/myapp`, you might have to set `SOLARA_ROOT_PATH=/myapp`.
@@ -1,41 +0,0 @@
1
- # Contributing to Solara
2
-
3
- You do not need to be a developer to contribute to Solara. We welcome all contributions, bug reports, documentation improvements and code contributions.
4
-
5
-
6
- ## Bug reports
7
-
8
- We use [GitHub to manage issues](https://github.com/widgetti/solara/issues/new) and you should not hesitate to report any bug you find. Please include as much information as possible for us to be able to reproduce the bug. Yes, reporting a bug/issue is a contribution!
9
-
10
- It might take a while for us to get back to you. If the bug is urgent, and you are able to provide financial support for its rapid resolution, please [contact us](/contact).
11
- If you can fix the bug yourself, please consider submitting a pull request instead, see [the development guide](/documentation/advanced/development/setup) for more information.
12
-
13
- If you are unable to address the bug yourself and find it challenging to provide financial support, please be assured we are still committed to rectifying bugs and resolving issues. However, please understand that our ability to address these issues may be impacted by our resources at hand, as sustaining this project also entails financial obligations. Your patience and understanding in this matter is highly appreciated 🙇.
14
-
15
- ## Documentation
16
-
17
- The documentation is mostly written in Markdown, and can be found at [in the main repository](https://github.com/widgetti/solara/tree/master/solara/website/pages).
18
-
19
- You can use the GitHub web interface to edit the files, or clone the repository and edit them locally. See [the development guide](/documentation/advanced/development/setup) for more information.
20
-
21
- If you locally want to render the documentation, run:
22
-
23
- ```bash
24
- $ solara run solara.website.pages
25
- ```
26
-
27
- ## Examples or showcase
28
-
29
- If you have a complete program you want to share, and you think it would be cool to be listed at [our showcase page](/showcase), [please contact us](/contact).
30
-
31
- If you want to show a particular way of using Solara that you think is very useful
32
- for others, but it is not a complete program, consider adding to [the examples](/documentation/examples/). See [the development guide](/documentation/advanced/development/setup) for more information.
33
-
34
- ## Share your experiences and ideas
35
-
36
- If you want to share your thoughts, share your experiences, or just want to talk
37
- to other people using and developing on Solara, consider using [GitHub discussions](https://github.com/widgetti/solara/discussions) for asynchronous discussions
38
- or consider joining discord for more synchronous discussions.
39
-
40
-
41
- [![Discord Shield](https://discordapp.com/api/guilds/1106593685241614489/widget.png?style=banner2)](https://discord.gg/dm4GKNDjXN)
@@ -1,72 +0,0 @@
1
- # Development
2
-
3
- See also [the contributing guide](/documentation/advanced/development/contribute) for more information on how to contribute to Solara.
4
- ## Development setup
5
-
6
- Assuming you have created a virtual environment as described in [the installation guide](/documentation/getting_started/installing), you can install a development install of Solara using:
7
-
8
- $ git clone git@github.com:widgetti/solara.git
9
- $ cd solara
10
- $ pip install ".[dev,documentation]" # documentation is optional
11
-
12
-
13
- ## Running Solara server in auto restart mode
14
-
15
- By passing the `--auto-restart/-a` flag, the solara server will automatically restart when the sourcecode of the solara server changes, which makes it friendlier for development
16
-
17
- $ solara run myscript.py -a
18
-
19
- This will:
20
-
21
- * Automatically restart the server if any of the source code of solara changes (excluding solara.website)
22
-
23
- ## Contributing
24
-
25
- If you plan to contribute, also run the following:
26
-
27
- $ pre-commit install
28
-
29
- This will cause a test of linters/formatters and mypy to run so the code is in good quality before you git commit.
30
-
31
- $ playwright install
32
-
33
- This will install playwright, for when you want to run the integration tests.
34
-
35
- ### Test suite
36
-
37
- If you want to run the unit tests (quick run when doing development, or when you do test driven development)
38
-
39
- $ py.test tests/unit
40
-
41
-
42
- If you want to run the integration tests (uses playwright to open a browser to test the live server with a real browser)
43
-
44
- $ py.test tests/integration
45
-
46
- Pass the `--headed` flag to see what is going on, [or check out the docs](https://playwright.dev/python/docs/intro)
47
-
48
-
49
- ### Creating a PR
50
-
51
- Make sure you forked the repository, and set up the remote and origin correctly.
52
-
53
- ```
54
- # rename origin to upstream
55
- $ git remote rename origin upstream
56
- # add your fork as origin
57
- $ git remote add origin https://github.com/yourusername/solara.git
58
- ```
59
-
60
- Now we will create a branch, push it, and open a PR
61
-
62
- ```
63
- # create a branch
64
- $ git checkout -b fix_some_thing
65
- # add whatever changes you want to make
66
- $ git add -p
67
- # commit your changes
68
- $ git commit -m "fix: some thing"
69
- # push your changes
70
- $ git push
71
- # click the link that is printed to open a PR
72
- ```
@@ -1,19 +0,0 @@
1
- """
2
- # Overview
3
- Click on one of the items on the left.
4
- """
5
-
6
- import solara
7
- from solara.website.components import CategoryLayout, Gallery
8
-
9
- _title = "API"
10
-
11
-
12
- @solara.component
13
- def Page(route_external=None):
14
- Gallery(route_external)
15
-
16
-
17
- @solara.component
18
- def Layout(children=[]):
19
- CategoryLayout(children=children)
@@ -1,9 +0,0 @@
1
- import solara
2
- from solara.website.components import NoPage, SubCategoryLayout
3
-
4
- Page = NoPage
5
-
6
-
7
- @solara.component
8
- def Layout(children=[]):
9
- SubCategoryLayout(children=children)
@@ -1,23 +0,0 @@
1
- """# CrossFilterDataFrame
2
- """
3
- import plotly
4
-
5
- import solara
6
- import solara.lab
7
- from solara.website.utils import apidoc
8
-
9
- title = "CrossFilterDataFrame"
10
- df = plotly.data.gapminder()
11
-
12
-
13
- @solara.component
14
- def Page():
15
- solara.provide_cross_filter()
16
- with solara.VBox() as main:
17
- solara.CrossFilterReport(df, classes=["py-2"])
18
- solara.CrossFilterSelect(df, "country")
19
- solara.CrossFilterDataFrame(df)
20
- return main
21
-
22
-
23
- __doc__ += apidoc(solara.CrossFilterDataFrame.f) # type: ignore