solara 1.30.1__py2.py3-none-any.whl → 1.32.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.
- {solara-1.30.1.dist-info → solara-1.32.0.dist-info}/METADATA +12 -42
- solara-1.32.0.dist-info/RECORD +5 -0
- {solara-1.30.1.dist-info → solara-1.32.0.dist-info}/WHEEL +1 -1
- {solara/template/portal → solara-1.32.0.dist-info/licenses}/LICENSE +1 -1
- solara/__init__.py +0 -123
- solara/__main__.py +0 -734
- solara/alias.py +0 -6
- solara/autorouting.py +0 -545
- solara/cache.py +0 -294
- solara/checks.html +0 -71
- solara/checks.py +0 -224
- solara/comm.py +0 -28
- solara/components/__init__.py +0 -59
- solara/components/alert.py +0 -155
- solara/components/applayout.py +0 -393
- solara/components/button.py +0 -85
- solara/components/card.py +0 -87
- solara/components/checkbox.py +0 -50
- solara/components/code_highlight_css.py +0 -11
- solara/components/code_highlight_css.vue +0 -63
- solara/components/columns.py +0 -159
- solara/components/component_vue.py +0 -110
- solara/components/cross_filter.py +0 -335
- solara/components/dataframe.py +0 -546
- solara/components/datatable.py +0 -221
- solara/components/datatable.vue +0 -175
- solara/components/details.py +0 -21
- solara/components/download.vue +0 -35
- solara/components/echarts.py +0 -75
- solara/components/echarts.vue +0 -128
- solara/components/figure_altair.py +0 -39
- solara/components/file_browser.py +0 -182
- solara/components/file_download.py +0 -199
- solara/components/file_drop.py +0 -139
- solara/components/file_drop.vue +0 -83
- solara/components/file_list_widget.vue +0 -78
- solara/components/head.py +0 -27
- solara/components/head_tag.py +0 -49
- solara/components/head_tag.vue +0 -60
- solara/components/image.py +0 -173
- solara/components/input.py +0 -440
- solara/components/link.py +0 -55
- solara/components/markdown.py +0 -371
- solara/components/markdown_editor.py +0 -25
- solara/components/markdown_editor.vue +0 -362
- solara/components/matplotlib.py +0 -74
- solara/components/meta.py +0 -47
- solara/components/misc.py +0 -333
- solara/components/pivot_table.py +0 -258
- solara/components/pivot_table.vue +0 -158
- solara/components/progress.py +0 -47
- solara/components/select.py +0 -186
- solara/components/select.vue +0 -27
- solara/components/slider.py +0 -442
- solara/components/slider_date.vue +0 -56
- solara/components/spinner-solara.vue +0 -105
- solara/components/spinner.py +0 -30
- solara/components/sql_code.py +0 -33
- solara/components/sql_code.vue +0 -128
- solara/components/style.py +0 -105
- solara/components/switch.py +0 -68
- solara/components/tab_navigation.py +0 -37
- solara/components/title.py +0 -90
- solara/components/title.vue +0 -38
- solara/components/togglebuttons.py +0 -202
- solara/components/tooltip.py +0 -61
- solara/datatypes.py +0 -143
- solara/express.py +0 -241
- solara/hooks/__init__.py +0 -4
- solara/hooks/dataframe.py +0 -99
- solara/hooks/misc.py +0 -263
- solara/hooks/use_reactive.py +0 -129
- solara/hooks/use_thread.py +0 -129
- solara/kitchensink.py +0 -8
- solara/lab/__init__.py +0 -34
- solara/lab/components/__init__.py +0 -6
- solara/lab/components/chat.py +0 -203
- solara/lab/components/confirmation_dialog.py +0 -165
- solara/lab/components/cross_filter.py +0 -7
- solara/lab/components/input_date.py +0 -298
- solara/lab/components/menu.py +0 -181
- solara/lab/components/menu.vue +0 -38
- solara/lab/components/tabs.py +0 -274
- solara/lab/components/theming.py +0 -98
- solara/lab/components/theming.vue +0 -72
- solara/lab/hooks/__init__.py +0 -0
- solara/lab/hooks/dataframe.py +0 -12
- solara/lab/toestand.py +0 -3
- solara/lab/utils/__init__.py +0 -2
- solara/lab/utils/cookies.py +0 -5
- solara/lab/utils/dataframe.py +0 -115
- solara/lab/utils/headers.py +0 -5
- solara/layout.py +0 -44
- solara/minisettings.py +0 -133
- solara/py.typed +0 -0
- solara/reactive.py +0 -93
- solara/routing.py +0 -268
- solara/scope/__init__.py +0 -88
- solara/scope/types.py +0 -55
- solara/server/__init__.py +0 -0
- solara/server/app.py +0 -490
- solara/server/assets/custom.css +0 -1
- solara/server/assets/custom.js +0 -1
- solara/server/assets/favicon.png +0 -0
- solara/server/assets/favicon.svg +0 -5
- solara/server/assets/style.css +0 -1665
- solara/server/assets/theme-dark.css +0 -437
- solara/server/assets/theme-light.css +0 -420
- solara/server/assets/theme.js +0 -3
- solara/server/cdn_helper.py +0 -77
- solara/server/esm.py +0 -69
- solara/server/fastapi.py +0 -5
- solara/server/flask.py +0 -286
- solara/server/jupyter/__init__.py +0 -2
- solara/server/jupyter/cdn_handler.py +0 -28
- solara/server/jupyter/server_extension.py +0 -29
- solara/server/jupytertools.py +0 -46
- solara/server/kernel.py +0 -319
- solara/server/kernel_context.py +0 -396
- solara/server/patch.py +0 -552
- solara/server/reload.py +0 -242
- solara/server/server.py +0 -437
- solara/server/settings.py +0 -212
- solara/server/shell.py +0 -240
- solara/server/starlette.py +0 -597
- solara/server/static/ansi.js +0 -270
- solara/server/static/highlight-dark.css +0 -82
- solara/server/static/highlight.css +0 -43
- solara/server/static/main-vuetify.js +0 -260
- solara/server/static/main.js +0 -163
- solara/server/static/solara_bootstrap.py +0 -129
- solara/server/static/sun.svg +0 -23
- solara/server/static/webworker.js +0 -42
- solara/server/telemetry.py +0 -212
- solara/server/templates/index.html.j2 +0 -1
- solara/server/templates/loader-plain.css +0 -11
- solara/server/templates/loader-plain.html +0 -20
- solara/server/templates/loader-solara.css +0 -111
- solara/server/templates/loader-solara.html +0 -40
- solara/server/templates/plain.html +0 -82
- solara/server/templates/solara.html.j2 +0 -446
- solara/server/threaded.py +0 -75
- solara/server/utils.py +0 -30
- solara/server/websocket.py +0 -44
- solara/settings.py +0 -56
- solara/tasks.py +0 -847
- solara/template/button.py +0 -16
- solara/template/markdown.py +0 -42
- solara/template/portal/.flake8 +0 -6
- solara/template/portal/.pre-commit-config.yaml +0 -28
- solara/template/portal/Procfile +0 -7
- solara/template/portal/mypy.ini +0 -3
- solara/template/portal/pyproject.toml +0 -26
- solara/template/portal/solara_portal/__init__.py +0 -3
- solara/template/portal/solara_portal/components/__init__.py +0 -2
- solara/template/portal/solara_portal/components/article.py +0 -28
- solara/template/portal/solara_portal/components/data.py +0 -28
- solara/template/portal/solara_portal/components/header.py +0 -6
- solara/template/portal/solara_portal/components/layout.py +0 -6
- solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -85
- solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -70
- solara/template/portal/solara_portal/data.py +0 -60
- solara/template/portal/solara_portal/pages/__init__.py +0 -67
- solara/template/portal/solara_portal/pages/article/__init__.py +0 -26
- solara/template/portal/solara_portal/pages/tabular.py +0 -29
- solara/template/portal/solara_portal/pages/viz/__init__.py +0 -69
- solara/template/portal/solara_portal/pages/viz/overview.py +0 -14
- solara/test/__init__.py +0 -0
- solara/test/pytest_plugin.py +0 -698
- solara/toestand.py +0 -772
- solara/util.py +0 -308
- solara/website/__init__.py +0 -0
- solara/website/assets/custom.css +0 -462
- solara/website/assets/images/logo-small.png +0 -0
- solara/website/assets/images/logo.svg +0 -17
- solara/website/assets/images/logo_white.svg +0 -50
- solara/website/assets/theme.js +0 -8
- solara/website/components/__init__.py +0 -5
- solara/website/components/algolia.vue +0 -24
- solara/website/components/algolia_api.vue +0 -157
- solara/website/components/docs.py +0 -118
- solara/website/components/header.py +0 -72
- solara/website/components/hero.py +0 -15
- solara/website/components/mailchimp.py +0 -12
- solara/website/components/mailchimp.vue +0 -47
- solara/website/components/markdown.py +0 -30
- solara/website/components/notebook.py +0 -172
- solara/website/pages/__init__.py +0 -575
- solara/website/pages/apps/__init__.py +0 -16
- solara/website/pages/apps/authorization/__init__.py +0 -118
- solara/website/pages/apps/authorization/admin.py +0 -12
- solara/website/pages/apps/authorization/users.py +0 -12
- solara/website/pages/apps/jupyter-dashboard-1.py +0 -116
- solara/website/pages/apps/layout-demo.py +0 -40
- solara/website/pages/apps/multipage/__init__.py +0 -38
- solara/website/pages/apps/multipage/page1.py +0 -26
- solara/website/pages/apps/multipage/page2.py +0 -34
- solara/website/pages/apps/scatter.py +0 -136
- solara/website/pages/apps/scrolling.py +0 -63
- solara/website/pages/apps/tutorial-streamlit.py +0 -18
- solara/website/pages/changelog/__init__.py +0 -8
- solara/website/pages/changelog/changelog.md +0 -195
- solara/website/pages/contact/__init__.py +0 -8
- solara/website/pages/contact/contact.md +0 -17
- solara/website/pages/doc_use_download.py +0 -85
- solara/website/pages/documentation/__init__.py +0 -184
- solara/website/pages/documentation/advanced/__init__.py +0 -9
- solara/website/pages/documentation/advanced/content/00-overview.md +0 -1
- solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -6
- solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -196
- solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +0 -125
- solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +0 -154
- solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -69
- solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -49
- solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -124
- solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -10
- solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -35
- solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -42
- solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -28
- solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -108
- solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -23
- solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -7
- solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -166
- solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -18
- solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -240
- solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +0 -86
- solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -12
- solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -1
- solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +0 -171
- solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
- solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -45
- solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -76
- solara/website/pages/documentation/api/__init__.py +0 -19
- solara/website/pages/documentation/api/cross_filter/__init__.py +0 -9
- solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +0 -23
- solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +0 -22
- solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +0 -22
- solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +0 -22
- solara/website/pages/documentation/api/hooks/__init__.py +0 -9
- solara/website/pages/documentation/api/hooks/use_cross_filter.py +0 -25
- solara/website/pages/documentation/api/hooks/use_dark_effective.py +0 -13
- solara/website/pages/documentation/api/hooks/use_effect.md +0 -43
- solara/website/pages/documentation/api/hooks/use_effect.py +0 -9
- solara/website/pages/documentation/api/hooks/use_exception.py +0 -33
- solara/website/pages/documentation/api/hooks/use_memo.md +0 -16
- solara/website/pages/documentation/api/hooks/use_memo.py +0 -9
- solara/website/pages/documentation/api/hooks/use_previous.py +0 -32
- solara/website/pages/documentation/api/hooks/use_reactive.py +0 -15
- solara/website/pages/documentation/api/hooks/use_state.py +0 -11
- solara/website/pages/documentation/api/hooks/use_state_or_update.py +0 -68
- solara/website/pages/documentation/api/hooks/use_thread.md +0 -58
- solara/website/pages/documentation/api/hooks/use_thread.py +0 -44
- solara/website/pages/documentation/api/hooks/use_trait_observe.py +0 -13
- solara/website/pages/documentation/api/routing/__init__.py +0 -9
- solara/website/pages/documentation/api/routing/generate_routes.py +0 -11
- solara/website/pages/documentation/api/routing/generate_routes_directory.py +0 -11
- solara/website/pages/documentation/api/routing/resolve_path.py +0 -36
- solara/website/pages/documentation/api/routing/route.py +0 -32
- solara/website/pages/documentation/api/routing/use_route.py +0 -80
- solara/website/pages/documentation/api/routing/use_router.py +0 -15
- solara/website/pages/documentation/api/utilities/__init__.py +0 -9
- solara/website/pages/documentation/api/utilities/component_vue.py +0 -11
- solara/website/pages/documentation/api/utilities/computed.py +0 -16
- solara/website/pages/documentation/api/utilities/display.py +0 -15
- solara/website/pages/documentation/api/utilities/get_kernel_id.py +0 -16
- solara/website/pages/documentation/api/utilities/get_session_id.py +0 -16
- solara/website/pages/documentation/api/utilities/memoize.py +0 -36
- solara/website/pages/documentation/api/utilities/on_kernel_start.py +0 -27
- solara/website/pages/documentation/api/utilities/reactive.py +0 -15
- solara/website/pages/documentation/api/utilities/widget.py +0 -104
- solara/website/pages/documentation/components/__init__.py +0 -12
- solara/website/pages/documentation/components/advanced/__init__.py +0 -9
- solara/website/pages/documentation/components/advanced/link.py +0 -28
- solara/website/pages/documentation/components/advanced/meta.py +0 -21
- solara/website/pages/documentation/components/advanced/style.py +0 -44
- solara/website/pages/documentation/components/common.py +0 -9
- solara/website/pages/documentation/components/data/__init__.py +0 -9
- solara/website/pages/documentation/components/data/dataframe.py +0 -44
- solara/website/pages/documentation/components/data/pivot_table.py +0 -81
- solara/website/pages/documentation/components/enterprise/__init__.py +0 -9
- solara/website/pages/documentation/components/enterprise/avatar.py +0 -19
- solara/website/pages/documentation/components/enterprise/avatar_menu.py +0 -20
- solara/website/pages/documentation/components/input/__init__.py +0 -9
- solara/website/pages/documentation/components/input/button.py +0 -22
- solara/website/pages/documentation/components/input/checkbox.py +0 -12
- solara/website/pages/documentation/components/input/file_browser.py +0 -33
- solara/website/pages/documentation/components/input/file_drop.py +0 -75
- solara/website/pages/documentation/components/input/input.py +0 -18
- solara/website/pages/documentation/components/input/select.py +0 -21
- solara/website/pages/documentation/components/input/slider.py +0 -28
- solara/website/pages/documentation/components/input/switch.py +0 -12
- solara/website/pages/documentation/components/input/togglebuttons.py +0 -20
- solara/website/pages/documentation/components/lab/__init__.py +0 -9
- solara/website/pages/documentation/components/lab/chat.py +0 -108
- solara/website/pages/documentation/components/lab/confirmation_dialog.py +0 -55
- solara/website/pages/documentation/components/lab/cookies_headers.py +0 -48
- solara/website/pages/documentation/components/lab/input_date.py +0 -19
- solara/website/pages/documentation/components/lab/menu.py +0 -21
- solara/website/pages/documentation/components/lab/tab.py +0 -24
- solara/website/pages/documentation/components/lab/tabs.py +0 -44
- solara/website/pages/documentation/components/lab/task.py +0 -12
- solara/website/pages/documentation/components/lab/theming.py +0 -72
- solara/website/pages/documentation/components/lab/use_task.py +0 -12
- solara/website/pages/documentation/components/layout/__init__.py +0 -9
- solara/website/pages/documentation/components/layout/app_bar.py +0 -15
- solara/website/pages/documentation/components/layout/app_bar_title.py +0 -15
- solara/website/pages/documentation/components/layout/app_layout.py +0 -23
- solara/website/pages/documentation/components/layout/card.py +0 -14
- solara/website/pages/documentation/components/layout/card_actions.py +0 -15
- solara/website/pages/documentation/components/layout/column.py +0 -29
- solara/website/pages/documentation/components/layout/columns.py +0 -26
- solara/website/pages/documentation/components/layout/columns_responsive.py +0 -67
- solara/website/pages/documentation/components/layout/griddraggable.py +0 -61
- solara/website/pages/documentation/components/layout/gridfixed.py +0 -21
- solara/website/pages/documentation/components/layout/hbox.py +0 -17
- solara/website/pages/documentation/components/layout/row.py +0 -29
- solara/website/pages/documentation/components/layout/sidebar.py +0 -23
- solara/website/pages/documentation/components/layout/vbox.py +0 -19
- solara/website/pages/documentation/components/output/__init__.py +0 -9
- solara/website/pages/documentation/components/output/file_download.py +0 -12
- solara/website/pages/documentation/components/output/html.py +0 -22
- solara/website/pages/documentation/components/output/image.py +0 -12
- solara/website/pages/documentation/components/output/markdown.py +0 -59
- solara/website/pages/documentation/components/output/markdown_editor.py +0 -53
- solara/website/pages/documentation/components/output/sql_code.py +0 -84
- solara/website/pages/documentation/components/output/tooltip.py +0 -12
- solara/website/pages/documentation/components/page/__init__.py +0 -9
- solara/website/pages/documentation/components/page/head.py +0 -19
- solara/website/pages/documentation/components/page/title.py +0 -28
- solara/website/pages/documentation/components/status/__init__.py +0 -9
- solara/website/pages/documentation/components/status/error.py +0 -40
- solara/website/pages/documentation/components/status/info.py +0 -40
- solara/website/pages/documentation/components/status/progress.py +0 -10
- solara/website/pages/documentation/components/status/spinner.py +0 -10
- solara/website/pages/documentation/components/status/success.py +0 -40
- solara/website/pages/documentation/components/status/warning.py +0 -47
- solara/website/pages/documentation/components/viz/__init__.py +0 -9
- solara/website/pages/documentation/components/viz/altair.py +0 -44
- solara/website/pages/documentation/components/viz/echarts.py +0 -78
- solara/website/pages/documentation/components/viz/matplotlib.py +0 -32
- solara/website/pages/documentation/components/viz/plotly.py +0 -63
- solara/website/pages/documentation/components/viz/plotly_express.py +0 -41
- solara/website/pages/documentation/examples/__init__.py +0 -52
- solara/website/pages/documentation/examples/ai/__init__.py +0 -10
- solara/website/pages/documentation/examples/ai/chatbot.py +0 -96
- solara/website/pages/documentation/examples/ai/tokenizer.py +0 -106
- solara/website/pages/documentation/examples/basics/__init__.py +0 -2
- solara/website/pages/documentation/examples/basics/sine.py +0 -28
- solara/website/pages/documentation/examples/fullscreen/__init__.py +0 -9
- solara/website/pages/documentation/examples/fullscreen/authorization.py +0 -3
- solara/website/pages/documentation/examples/fullscreen/layout_demo.py +0 -3
- solara/website/pages/documentation/examples/fullscreen/multipage.py +0 -3
- solara/website/pages/documentation/examples/fullscreen/scatter.py +0 -3
- solara/website/pages/documentation/examples/fullscreen/scrolling.py +0 -3
- solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +0 -3
- solara/website/pages/documentation/examples/general/__init__.py +0 -9
- solara/website/pages/documentation/examples/general/custom_storage.py +0 -69
- solara/website/pages/documentation/examples/general/deploy_model.py +0 -114
- solara/website/pages/documentation/examples/general/live_update.py +0 -38
- solara/website/pages/documentation/examples/general/login_oauth.py +0 -76
- solara/website/pages/documentation/examples/general/mycard.vue +0 -58
- solara/website/pages/documentation/examples/general/pokemon_search.py +0 -51
- solara/website/pages/documentation/examples/general/vue_component.py +0 -50
- solara/website/pages/documentation/examples/ipycanvas.py +0 -49
- solara/website/pages/documentation/examples/libraries/__init__.py +0 -9
- solara/website/pages/documentation/examples/libraries/altair.py +0 -63
- solara/website/pages/documentation/examples/libraries/bqplot.py +0 -39
- solara/website/pages/documentation/examples/libraries/ipyleaflet.py +0 -32
- solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +0 -65
- solara/website/pages/documentation/examples/utilities/__init__.py +0 -9
- solara/website/pages/documentation/examples/utilities/calculator.py +0 -157
- solara/website/pages/documentation/examples/utilities/countdown_timer.py +0 -64
- solara/website/pages/documentation/examples/utilities/todo.py +0 -195
- solara/website/pages/documentation/examples/visualization/__init__.py +0 -6
- solara/website/pages/documentation/examples/visualization/annotator.py +0 -68
- solara/website/pages/documentation/examples/visualization/linked_views.py +0 -84
- solara/website/pages/documentation/examples/visualization/plotly.py +0 -43
- solara/website/pages/documentation/faq/__init__.py +0 -12
- solara/website/pages/documentation/faq/content/99-faq.md +0 -76
- solara/website/pages/documentation/getting_started/__init__.py +0 -9
- solara/website/pages/documentation/getting_started/content/00-quickstart.md +0 -89
- solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -125
- solara/website/pages/documentation/getting_started/content/02-installing.md +0 -85
- solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -14
- solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +0 -13
- solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +0 -89
- solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -124
- solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -146
- solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -144
- solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +0 -64
- solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +0 -445
- solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +0 -1000
- solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +0 -11
- solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -223
- solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -88
- solara/website/pages/documentation/getting_started/content/06-reference/00-overview.md +0 -3
- solara/website/pages/documentation/getting_started/content/06-reference/40-static_files.md +0 -31
- solara/website/pages/documentation/getting_started/content/06-reference/41-asset-files.md +0 -36
- solara/website/pages/documentation/getting_started/content/06-reference/60-static-site-generation.md +0 -59
- solara/website/pages/documentation/getting_started/content/06-reference/70-search.md +0 -34
- solara/website/pages/documentation/getting_started/content/06-reference/80-reloading.md +0 -34
- solara/website/pages/documentation/getting_started/content/06-reference/90-notebook-support.md +0 -7
- solara/website/pages/documentation/getting_started/content/06-reference/95-caching.md +0 -148
- solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -7
- solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +0 -273
- solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -80
- solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +0 -7
- solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -26
- solara/website/pages/docutils.py +0 -38
- solara/website/pages/showcase/__init__.py +0 -105
- solara/website/pages/showcase/domino_code_assist.py +0 -60
- solara/website/pages/showcase/planeto_tessa.py +0 -19
- solara/website/pages/showcase/solara_dev.py +0 -54
- solara/website/pages/showcase/solarathon_2023_team_2.py +0 -22
- solara/website/pages/showcase/solarathon_2023_team_4.py +0 -22
- solara/website/pages/showcase/solarathon_2023_team_5.py +0 -23
- solara/website/pages/showcase/solarathon_2023_team_6.py +0 -34
- solara/website/pages/showcase/wanderlust.py +0 -27
- solara/website/public/beach.jpeg +0 -0
- solara/website/public/logo.svg +0 -6
- solara/website/public/social/discord.svg +0 -1
- solara/website/public/social/github.svg +0 -1
- solara/website/public/social/twitter.svg +0 -3
- solara/website/public/success.html +0 -25
- solara/website/templates/index.html.j2 +0 -117
- solara/website/utils.py +0 -51
- solara/widgets/__init__.py +0 -1
- solara/widgets/vue/gridlayout.vue +0 -110
- solara/widgets/vue/html.vue +0 -4
- solara/widgets/vue/navigator.vue +0 -104
- solara/widgets/vue/vegalite.vue +0 -115
- solara/widgets/widgets.py +0 -65
- solara-1.30.1.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -7
- solara-1.30.1.data/data/etc/jupyter/jupyter_server_config.d/solara.json +0 -7
- solara-1.30.1.dist-info/RECORD +0 -437
- solara-1.30.1.dist-info/entry_points.txt +0 -5
- /solara-1.30.1.dist-info/licenses/LICENSE → /LICENSE +0 -0
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
# Chatbot
|
|
3
|
-
|
|
4
|
-
A way to create a chatbot using OpenAI's GPT-4 API, utilizing their new API, and the streaming feature.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import os
|
|
9
|
-
from typing import List
|
|
10
|
-
|
|
11
|
-
from openai import OpenAI
|
|
12
|
-
from typing_extensions import TypedDict
|
|
13
|
-
|
|
14
|
-
import solara
|
|
15
|
-
import solara.lab
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class MessageDict(TypedDict):
|
|
19
|
-
role: str
|
|
20
|
-
content: str
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if os.getenv("OPENAI_API_KEY") is None and "OPENAI_API_KEY" not in os.environ:
|
|
24
|
-
openai = None
|
|
25
|
-
else:
|
|
26
|
-
openai = OpenAI()
|
|
27
|
-
openai.api_key = os.getenv("OPENAI_API_KEY") # type: ignore
|
|
28
|
-
|
|
29
|
-
messages: solara.Reactive[List[MessageDict]] = solara.reactive([])
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def no_api_key_message():
|
|
33
|
-
messages.value = [
|
|
34
|
-
{
|
|
35
|
-
"role": "assistant",
|
|
36
|
-
"content": "No OpenAI API key found. Please set your OpenAI API key in the environment variable `OPENAI_API_KEY`.",
|
|
37
|
-
},
|
|
38
|
-
]
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def add_chunk_to_ai_message(chunk: str):
|
|
42
|
-
messages.value = [
|
|
43
|
-
*messages.value[:-1],
|
|
44
|
-
{
|
|
45
|
-
"role": "assistant",
|
|
46
|
-
"content": messages.value[-1]["content"] + chunk,
|
|
47
|
-
},
|
|
48
|
-
]
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
@solara.component
|
|
52
|
-
def Page():
|
|
53
|
-
user_message_count = len([m for m in messages.value if m["role"] == "user"])
|
|
54
|
-
|
|
55
|
-
def send(message):
|
|
56
|
-
messages.value = [
|
|
57
|
-
*messages.value,
|
|
58
|
-
{"role": "user", "content": message},
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
def call_openai():
|
|
62
|
-
if user_message_count == 0:
|
|
63
|
-
return
|
|
64
|
-
if openai is None:
|
|
65
|
-
no_api_key_message()
|
|
66
|
-
return
|
|
67
|
-
response = openai.chat.completions.create(
|
|
68
|
-
model="gpt-4-1106-preview",
|
|
69
|
-
messages=messages.value, # type: ignore
|
|
70
|
-
stream=True,
|
|
71
|
-
)
|
|
72
|
-
messages.value = [*messages.value, {"role": "assistant", "content": ""}]
|
|
73
|
-
for chunk in response:
|
|
74
|
-
if chunk.choices[0].finish_reason == "stop": # type: ignore
|
|
75
|
-
return
|
|
76
|
-
add_chunk_to_ai_message(chunk.choices[0].delta.content) # type: ignore
|
|
77
|
-
|
|
78
|
-
task = solara.lab.use_task(call_openai, dependencies=[user_message_count]) # type: ignore
|
|
79
|
-
|
|
80
|
-
with solara.Column(
|
|
81
|
-
style={"width": "700px", "height": "50vh"},
|
|
82
|
-
):
|
|
83
|
-
with solara.lab.ChatBox():
|
|
84
|
-
for item in messages.value:
|
|
85
|
-
with solara.lab.ChatMessage(
|
|
86
|
-
user=item["role"] == "user",
|
|
87
|
-
avatar=False,
|
|
88
|
-
name="ChatGPT" if item["role"] == "assistant" else "User",
|
|
89
|
-
color="rgba(0,0,0, 0.06)" if item["role"] == "assistant" else "#ff991f",
|
|
90
|
-
avatar_background_color="primary" if item["role"] == "assistant" else None,
|
|
91
|
-
border_radius="20px",
|
|
92
|
-
):
|
|
93
|
-
solara.Markdown(item["content"])
|
|
94
|
-
if task.pending:
|
|
95
|
-
solara.Text("I'm thinking...", style={"font-size": "1rem", "padding-left": "20px"})
|
|
96
|
-
solara.lab.ChatInput(send_callback=send, disabled=task.pending)
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"""# GPT-4 token encoder and decoder
|
|
2
|
-
|
|
3
|
-
This example shows how to use a language model tokenizer to encode and decode and how to search for a token
|
|
4
|
-
|
|
5
|
-
Inspired by: [Understanding GPT tokenizers by Simon Willison](https://simonwillison.net/2023/Jun/8/gpt-tokenizers/)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
## Note
|
|
9
|
-
|
|
10
|
-
Install pandas and tiktoken with `pip install pandas tiktoken`
|
|
11
|
-
|
|
12
|
-
"""
|
|
13
|
-
import random
|
|
14
|
-
|
|
15
|
-
import pandas as pd
|
|
16
|
-
import tiktoken
|
|
17
|
-
|
|
18
|
-
import solara
|
|
19
|
-
import solara.lab
|
|
20
|
-
|
|
21
|
-
# Get tokenizer for gpt-4
|
|
22
|
-
tokenizer = tiktoken.encoding_for_model("gpt-4")
|
|
23
|
-
|
|
24
|
-
# Create dataframe mapping token IDs and tokens
|
|
25
|
-
MAX_TOKENS = 50257
|
|
26
|
-
df = pd.DataFrame()
|
|
27
|
-
df["token ID"] = range(MAX_TOKENS)
|
|
28
|
-
df["token"] = [tokenizer.decode([i]) for i in range(MAX_TOKENS)]
|
|
29
|
-
|
|
30
|
-
sentence = solara.reactive("Example text is here")
|
|
31
|
-
tokens_ids_to_lookup = solara.reactive("")
|
|
32
|
-
tokens_filter = solara.reactive("")
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@solara.component
|
|
36
|
-
def GithubAvatar(name: str, handle: str, img: str):
|
|
37
|
-
with solara.v.Html(tag="a", attributes={"href": f"https://github.com/{handle}/", "target": "_blank"}):
|
|
38
|
-
with solara.v.ListItem(class_="pa-0"):
|
|
39
|
-
with solara.v.ListItemAvatar(color="grey darken-3"):
|
|
40
|
-
solara.v.Img(
|
|
41
|
-
class_="elevation-6",
|
|
42
|
-
src=img,
|
|
43
|
-
)
|
|
44
|
-
with solara.v.ListItemContent():
|
|
45
|
-
solara.v.ListItemTitle(children=["By " + name])
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
@solara.component
|
|
49
|
-
def Token(token: int):
|
|
50
|
-
# create random color dependent on the position
|
|
51
|
-
random.seed(token)
|
|
52
|
-
random_color = "".join([random.choice("0123456789ABCDEF") for k in range(6)])
|
|
53
|
-
with solara.Div(style="display: inline;"):
|
|
54
|
-
with solara.Div(
|
|
55
|
-
style={
|
|
56
|
-
"display": "inline",
|
|
57
|
-
"padding": "6px",
|
|
58
|
-
"border-right": "3px solid white",
|
|
59
|
-
"line-height": "3em",
|
|
60
|
-
"font-family": "courier",
|
|
61
|
-
"background-color": f"#{random_color}",
|
|
62
|
-
"color": "white",
|
|
63
|
-
"position": "relative",
|
|
64
|
-
},
|
|
65
|
-
):
|
|
66
|
-
solara.Text(
|
|
67
|
-
" " + str(token),
|
|
68
|
-
style={
|
|
69
|
-
"display": "inline",
|
|
70
|
-
"position": "absolute",
|
|
71
|
-
"top": "5.5ch",
|
|
72
|
-
"line-height": "1em",
|
|
73
|
-
"left": "-0.5px",
|
|
74
|
-
"font-size": "0.45em",
|
|
75
|
-
},
|
|
76
|
-
)
|
|
77
|
-
solara.Text(str(tokenizer.decode([token])))
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
@solara.component
|
|
81
|
-
def Page():
|
|
82
|
-
with solara.Column(margin=10):
|
|
83
|
-
solara.Markdown("# GPT-4 token encoder and decoder")
|
|
84
|
-
solara.Markdown("This is an educational tool for understanding how tokenization works.")
|
|
85
|
-
GithubAvatar(
|
|
86
|
-
"Alonso Silva Allende",
|
|
87
|
-
"alonsosilvaallende",
|
|
88
|
-
"https://avatars.githubusercontent.com/u/30263736?v=4",
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
solara.InputText("Enter text to tokenize it:", value=sentence, continuous_update=True)
|
|
92
|
-
tokens = tokenizer.encode(sentence.value)
|
|
93
|
-
with solara.Div(style="display: inline;"):
|
|
94
|
-
for token in tokens:
|
|
95
|
-
Token(token)
|
|
96
|
-
|
|
97
|
-
solara.InputText("Or convert space separated tokens to text:", value=tokens_ids_to_lookup, continuous_update=True)
|
|
98
|
-
token_input = [int(span) for span in tokens_ids_to_lookup.value.split(" ") if span != ""]
|
|
99
|
-
text_output = tokenizer.decode(token_input)
|
|
100
|
-
solara.Markdown(f"{text_output}")
|
|
101
|
-
|
|
102
|
-
solara.Markdown("## Search tokens")
|
|
103
|
-
solara.InputText("Search for a token:", value=tokens_filter, continuous_update=True)
|
|
104
|
-
df_subset = df[df["token"].str.startswith(tokens_filter.value)]
|
|
105
|
-
solara.Markdown(f"{df_subset.shape[0]:,} results")
|
|
106
|
-
solara.DataFrame(df_subset, items_per_page=10)
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"""# Interactive sine wave
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
This example shows how to have two slider control a visualization.
|
|
5
|
-
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
import numpy as np
|
|
9
|
-
import plotly.express as px
|
|
10
|
-
|
|
11
|
-
import solara
|
|
12
|
-
|
|
13
|
-
x = np.linspace(0, 2, 100)
|
|
14
|
-
|
|
15
|
-
title = "Interactive sine wave"
|
|
16
|
-
freq = solara.reactive(2.0)
|
|
17
|
-
phase = solara.reactive(0.1)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
@solara.component
|
|
21
|
-
def Page():
|
|
22
|
-
y = np.sin(x * freq.value + phase.value)
|
|
23
|
-
|
|
24
|
-
solara.FloatSlider("Frequency", value=freq, min=0, max=10)
|
|
25
|
-
solara.FloatSlider("Phase", value=phase, min=0, max=np.pi, step=0.1)
|
|
26
|
-
|
|
27
|
-
fig = px.line(x=x, y=y)
|
|
28
|
-
solara.FigurePlotly(fig)
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"""# Custom state storage
|
|
2
|
-
|
|
3
|
-
Solara makes it easy to store state/data on the server side, scoped to a kernel, using [reactive variables](/api/reactive).
|
|
4
|
-
|
|
5
|
-
However, sometimes you want to store state yourself in an external system (i.e. not Solara), and for this you can use the
|
|
6
|
-
[get_kernel_id()](/api/get_kernel_id) function to get a unique id for each kernel.
|
|
7
|
-
|
|
8
|
-
If you want to store state/data scoped to a browser session, you can use the [get_session_id()](/api/get_session_id)
|
|
9
|
-
function to get a unique id tied to the users browser. This can be used to store state that outlives a page refresh.
|
|
10
|
-
|
|
11
|
-
In case you want to store state/data scoped to a user, you can use a similar strategy, but use a unique identifier based on the user,
|
|
12
|
-
instead of the session id. You can take a look at [Our oauth example](examples/general/login_oauth) or
|
|
13
|
-
[the authorization example](/apps/authorization) for inspiration.
|
|
14
|
-
|
|
15
|
-
"""
|
|
16
|
-
from typing import Dict
|
|
17
|
-
|
|
18
|
-
import solara
|
|
19
|
-
import solara.lab
|
|
20
|
-
|
|
21
|
-
# used only to force updating of the page
|
|
22
|
-
force_update_counter = solara.reactive(0)
|
|
23
|
-
|
|
24
|
-
# Kernel storage is scoped to the kernel, and will be cleared when the kernel is stopped.
|
|
25
|
-
kernel_storage: Dict[str, str] = {}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def store_in_kernel_storage(value):
|
|
29
|
-
kernel_storage[solara.get_kernel_id()] = value
|
|
30
|
-
force_update_counter.value += 1
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
@solara.lab.on_kernel_start
|
|
34
|
-
def initialize_kernel_storage():
|
|
35
|
-
# when a kernel gets started, we initialize the dict entry
|
|
36
|
-
kernel_storage[solara.get_kernel_id()] = "This does not"
|
|
37
|
-
|
|
38
|
-
def cleanup():
|
|
39
|
-
# when a kernel gets stopped, we remove the dict entry
|
|
40
|
-
del kernel_storage[solara.get_kernel_id()]
|
|
41
|
-
|
|
42
|
-
# cleaning up kernel storage, we prevent memory leaks
|
|
43
|
-
return cleanup
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
# session storage has no lifecycle management, and will only be cleared when the server is restarted.
|
|
47
|
-
session_storage: Dict[str, str] = {}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def store_in_session_storage(value):
|
|
51
|
-
session_storage[solara.get_session_id()] = value
|
|
52
|
-
force_update_counter.value += 1
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
@solara.component
|
|
56
|
-
def Page():
|
|
57
|
-
solara.InputText(
|
|
58
|
-
"Stored under the kernel id key",
|
|
59
|
-
value=kernel_storage[solara.get_kernel_id()],
|
|
60
|
-
on_value=store_in_kernel_storage,
|
|
61
|
-
continuous_update=True,
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
solara.InputText(
|
|
65
|
-
"Stored under the session id key",
|
|
66
|
-
value=session_storage.get(solara.get_session_id(), "This outlives a page refresh"),
|
|
67
|
-
on_value=store_in_session_storage,
|
|
68
|
-
continuous_update=True,
|
|
69
|
-
)
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
"""# Deploy model demo
|
|
2
|
-
|
|
3
|
-
This show off a combination of [solara.lab.Menu](/documentation/components/lab/menu) and
|
|
4
|
-
[solara.lab.ConfirmationDialog](/documentation/components/lab/confirmation_dialog)
|
|
5
|
-
and [solara.use_thread](/documentation/api/hooks/use_thread) to demonstrate how to tune, fit and deploy a model.
|
|
6
|
-
The actually deployment is not real, but simulated by a thread that returns a boolean value on success and sleep for a while to
|
|
7
|
-
similate the deployment taking time.
|
|
8
|
-
|
|
9
|
-
* Right click on the plot to either fit or reset the model parameters.
|
|
10
|
-
* Clicking on the button shows a custom menu to deploy to several environments.
|
|
11
|
-
* A confirmation dialog is used before executing the deployment.
|
|
12
|
-
* If the deployment fails, a confirmation dialog is shown to retry the deployment.
|
|
13
|
-
"""
|
|
14
|
-
import time
|
|
15
|
-
|
|
16
|
-
import numpy as np
|
|
17
|
-
import pandas as pd
|
|
18
|
-
import plotly.express as px
|
|
19
|
-
import solara
|
|
20
|
-
import solara.lab
|
|
21
|
-
|
|
22
|
-
slope = solara.reactive(1.5)
|
|
23
|
-
intercept = solara.reactive(0.5)
|
|
24
|
-
|
|
25
|
-
x = np.arange(0, 100, 2) / 10
|
|
26
|
-
# fake data with noise
|
|
27
|
-
y_data = (slope.value * 0.8) * x + (intercept.value + 0.4) + np.random.normal(0, 0.5, len(x))
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
@solara.component
|
|
31
|
-
def Page():
|
|
32
|
-
deploy_environment_request = solara.use_reactive("")
|
|
33
|
-
deploy_environment = solara.use_reactive("")
|
|
34
|
-
fake_failed = solara.use_reactive(False)
|
|
35
|
-
|
|
36
|
-
def deploy_model():
|
|
37
|
-
if deploy_environment.value == "":
|
|
38
|
-
return
|
|
39
|
-
|
|
40
|
-
# 'dummy' deployment
|
|
41
|
-
time.sleep(1.5)
|
|
42
|
-
|
|
43
|
-
# fake a failure the first time
|
|
44
|
-
if not fake_failed.value:
|
|
45
|
-
fake_failed.value = True
|
|
46
|
-
return False
|
|
47
|
-
else:
|
|
48
|
-
return True
|
|
49
|
-
|
|
50
|
-
deploy_state: solara.Result[bool] = solara.use_thread(deploy_model, dependencies=[deploy_environment.value])
|
|
51
|
-
|
|
52
|
-
x_model = x
|
|
53
|
-
y_model = (slope.value) * x_model + (intercept.value)
|
|
54
|
-
df1 = pd.DataFrame({"x": x, "y": y_data})
|
|
55
|
-
df2 = pd.DataFrame({"x": x_model, "y": y_model})
|
|
56
|
-
df = pd.concat([df1, df2], keys=["data", "model"], names=["type"]).reset_index()
|
|
57
|
-
fig = px.line(df, x="x", y="y", color="type")
|
|
58
|
-
with solara.Card("My fancy model"):
|
|
59
|
-
fig_element = solara.FigurePlotly(fig)
|
|
60
|
-
|
|
61
|
-
def reset():
|
|
62
|
-
slope.set(1.5)
|
|
63
|
-
intercept.set(0.5)
|
|
64
|
-
|
|
65
|
-
def fit():
|
|
66
|
-
slope.set(1.5 * 0.8)
|
|
67
|
-
intercept.set(0.9)
|
|
68
|
-
|
|
69
|
-
with solara.lab.ContextMenu(activator=fig_element):
|
|
70
|
-
solara.Button("Reset", text=True, icon_name="mdi-refresh", on_click=reset)
|
|
71
|
-
solara.Button("Fit", text=True, icon_name="mdi-brain", on_click=fit)
|
|
72
|
-
|
|
73
|
-
solara.FloatSlider("Slope", value=slope, min=-2, max=5, step=0.1)
|
|
74
|
-
solara.FloatSlider("Intercept", value=intercept, min=-10, max=10, step=0.1)
|
|
75
|
-
|
|
76
|
-
solara.lab.ConfirmationDialog(
|
|
77
|
-
deploy_environment_request.value != "",
|
|
78
|
-
title="Confirm deployment",
|
|
79
|
-
content=solara.Markdown(f"Are you sure you want to deploy to **{deploy_environment_request.value}**?"),
|
|
80
|
-
ok=f"Deploy to {deploy_environment_request.value}",
|
|
81
|
-
on_ok=lambda: deploy_environment.set(deploy_environment_request.value),
|
|
82
|
-
on_close=lambda: deploy_environment_request.set(""),
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
solara.lab.ConfirmationDialog(
|
|
86
|
-
deploy_state.value is False and deploy_state.state == solara.ResultState.FINISHED,
|
|
87
|
-
title="Deployment failed",
|
|
88
|
-
on_close=lambda: None,
|
|
89
|
-
on_ok=lambda: deploy_state.retry(),
|
|
90
|
-
content=solara.Error(solara.Markdown(f"Deployment to **{deploy_environment.value}** failed. Do you want to try again?")),
|
|
91
|
-
ok="Retry deployment",
|
|
92
|
-
cancel="Ignore the failure",
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
def request_deploy(environment):
|
|
96
|
-
deploy_environment.value = ""
|
|
97
|
-
deploy_environment_request.set(environment)
|
|
98
|
-
|
|
99
|
-
deploying = bool(deploy_environment.value and deploy_state.state == solara.ResultState.RUNNING)
|
|
100
|
-
deploy_button = solara.Button("Deploy model", color="primary", icon_name="mdi-rocket", loading=deploying)
|
|
101
|
-
with solara.lab.Menu(activator=deploy_button):
|
|
102
|
-
with solara.Column(gap="0px"):
|
|
103
|
-
solara.Button("Deploy to testing environment", text=True, icon_name="mdi-bug", on_click=lambda: request_deploy("testing"))
|
|
104
|
-
solara.Button("Deploy to staging environment", text=True, icon_name="mdi-test-tube", on_click=lambda: request_deploy("staging"))
|
|
105
|
-
solara.Button(
|
|
106
|
-
"Deploy to production",
|
|
107
|
-
text=True,
|
|
108
|
-
icon_name="mdi-rocket",
|
|
109
|
-
style={"justify-content": "left"}, # make the icon appear on the left
|
|
110
|
-
on_click=lambda: request_deploy("production"),
|
|
111
|
-
)
|
|
112
|
-
if deploy_state.value is True and deploy_state.state == solara.ResultState.FINISHED:
|
|
113
|
-
# add some margin in the y direction using my-4
|
|
114
|
-
solara.Success(solara.Markdown(f"Model deployed successfully to **{deploy_environment.value}**!"), classes=["my-4"])
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
from time import sleep
|
|
2
|
-
|
|
3
|
-
import numpy as np
|
|
4
|
-
from matplotlib import pyplot as plt
|
|
5
|
-
|
|
6
|
-
import solara
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
@solara.component
|
|
10
|
-
def Page():
|
|
11
|
-
# define some state which will be updated regularly in a separate thread
|
|
12
|
-
counter = solara.use_reactive(0)
|
|
13
|
-
|
|
14
|
-
def render():
|
|
15
|
-
"""Infinite loop regularly mutating counter state"""
|
|
16
|
-
while True:
|
|
17
|
-
sleep(0.2)
|
|
18
|
-
counter.value += 1
|
|
19
|
-
|
|
20
|
-
# run the render loop in a separate thread
|
|
21
|
-
result: solara.Result[bool] = solara.use_thread(render)
|
|
22
|
-
if result.error:
|
|
23
|
-
raise result.error
|
|
24
|
-
|
|
25
|
-
# create the LiveUpdatingComponent, this component depends on the counter
|
|
26
|
-
# value so will be redrawn whenever counter value changes
|
|
27
|
-
LiveUpdatingComponent(counter.value)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
@solara.component
|
|
31
|
-
def LiveUpdatingComponent(counter):
|
|
32
|
-
"""Component which will be redrawn whenever the counter value changes."""
|
|
33
|
-
fig, ax = plt.subplots()
|
|
34
|
-
ax.plot(np.arange(10), np.random.random(10))
|
|
35
|
-
solara.FigureMatplotlib(fig)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
Page()
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import pprint
|
|
2
|
-
|
|
3
|
-
import reacton.ipyvuetify as v
|
|
4
|
-
|
|
5
|
-
try:
|
|
6
|
-
from solara_enterprise import auth
|
|
7
|
-
except ImportError:
|
|
8
|
-
auth = None
|
|
9
|
-
import solara as sl
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@sl.component
|
|
13
|
-
def UserCard():
|
|
14
|
-
user = auth.user.value
|
|
15
|
-
if user:
|
|
16
|
-
user_info = user.get("userinfo")
|
|
17
|
-
if user_info:
|
|
18
|
-
# based on https://v2.vuetifyjs.com/en/components/cards/#props
|
|
19
|
-
with v.Card(width="400px"):
|
|
20
|
-
with v.ListItem(three_line=True):
|
|
21
|
-
with v.ListItemContent():
|
|
22
|
-
sl.Div("Logged in", class_="text-overline mb-4")
|
|
23
|
-
v.ListItemTitle(children=[user_info["email"]])
|
|
24
|
-
v.ListItemSubtitle(children=["You are now logged in, log out via the app bar, or the button below"])
|
|
25
|
-
with v.ListItemAvatar():
|
|
26
|
-
auth.Avatar()
|
|
27
|
-
|
|
28
|
-
with v.CardActions():
|
|
29
|
-
sl.Button("logout", icon_name="mdi-logout", href=auth.get_logout_url(), text=True)
|
|
30
|
-
else:
|
|
31
|
-
sl.Error("No user info")
|
|
32
|
-
else:
|
|
33
|
-
sl.Error("No user")
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
@sl.component
|
|
37
|
-
def Page():
|
|
38
|
-
sl.Title("Login demo using OAuth")
|
|
39
|
-
with sl.AppBar():
|
|
40
|
-
if auth.user.value:
|
|
41
|
-
auth.AvatarMenu()
|
|
42
|
-
else:
|
|
43
|
-
sl.Button(icon_name="mdi-login", href=auth.get_login_url(), icon=True)
|
|
44
|
-
|
|
45
|
-
with sl.Column():
|
|
46
|
-
if auth.user.value:
|
|
47
|
-
UserCard()
|
|
48
|
-
with sl.Details("Raw data"):
|
|
49
|
-
sl.Markdown(
|
|
50
|
-
"""
|
|
51
|
-
### Raw user data
|
|
52
|
-
|
|
53
|
-
*Note: do not share this data with anyone, it contains sensitive information.*
|
|
54
|
-
|
|
55
|
-
This is the raw user data from the auth provider.
|
|
56
|
-
|
|
57
|
-
We use the `picture` field to display an avatar in the [AppBar](/documentation/components/layout/app_bar).
|
|
58
|
-
"""
|
|
59
|
-
)
|
|
60
|
-
sl.Preformatted(pprint.pformat(auth.user.value))
|
|
61
|
-
else:
|
|
62
|
-
sl.Markdown(
|
|
63
|
-
"""
|
|
64
|
-
### Login demo
|
|
65
|
-
|
|
66
|
-
This is a demo of a login system using OAuth. You can login with your google account, github account or with a username and password.
|
|
67
|
-
We are using [Auth0](https://auth0.com/) as an OAuth provider.
|
|
68
|
-
|
|
69
|
-
"""
|
|
70
|
-
)
|
|
71
|
-
with sl.Row():
|
|
72
|
-
sl.Button("login", icon_name="mdi-login", href=auth.get_login_url())
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if auth is None:
|
|
76
|
-
del Page
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-card class="text-center" :color="color" dark>
|
|
3
|
-
<v-card-text>
|
|
4
|
-
<v-sheet color="rgba(0, 0, 0, .12)">
|
|
5
|
-
<v-sparkline :value="value" color="rgba(255, 255, 255, .7)" height="100" padding="24" stroke-linecap="round"
|
|
6
|
-
smooth>
|
|
7
|
-
<template v-slot:label="item">
|
|
8
|
-
${{ item.value }}
|
|
9
|
-
</template>
|
|
10
|
-
</v-sparkline>
|
|
11
|
-
</v-sheet>
|
|
12
|
-
</v-card-text>
|
|
13
|
-
|
|
14
|
-
<v-card-text>
|
|
15
|
-
<h1 class="solara-some-class">{{ caption }}</h1>
|
|
16
|
-
</v-card-text>
|
|
17
|
-
|
|
18
|
-
<v-divider></v-divider>
|
|
19
|
-
|
|
20
|
-
<v-card-actions class="justify-center">
|
|
21
|
-
<v-btn block text @click="goto_report">
|
|
22
|
-
Go to Report
|
|
23
|
-
</v-btn>
|
|
24
|
-
</v-card-actions>
|
|
25
|
-
</v-card>
|
|
26
|
-
</template>
|
|
27
|
-
<style id="mycard">
|
|
28
|
-
.solara-some-class {
|
|
29
|
-
font-weight: lighter;
|
|
30
|
-
}
|
|
31
|
-
</style>
|
|
32
|
-
|
|
33
|
-
<script>
|
|
34
|
-
export default {
|
|
35
|
-
data: () => ({
|
|
36
|
-
value: [
|
|
37
|
-
423,
|
|
38
|
-
446,
|
|
39
|
-
675,
|
|
40
|
-
510,
|
|
41
|
-
590,
|
|
42
|
-
610,
|
|
43
|
-
760,
|
|
44
|
-
],
|
|
45
|
-
}),
|
|
46
|
-
mounted: () => {
|
|
47
|
-
console.log('mounted');
|
|
48
|
-
},
|
|
49
|
-
destroyed: () => {
|
|
50
|
-
console.log('destroyed');
|
|
51
|
-
},
|
|
52
|
-
watch: {
|
|
53
|
-
value: function (val) {
|
|
54
|
-
console.log('value changed to', val);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
</script>
|