solara-ui 1.45.0__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.
- prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +7 -0
- prefix/etc/jupyter/jupyter_server_config.d/solara.json +7 -0
- solara/__init__.py +124 -0
- solara/__main__.py +765 -0
- solara/_stores.py +297 -0
- solara/alias.py +6 -0
- solara/autorouting.py +555 -0
- solara/cache.py +305 -0
- solara/checks.html +71 -0
- solara/checks.py +227 -0
- solara/comm.py +28 -0
- solara/components/__init__.py +77 -0
- solara/components/alert.py +155 -0
- solara/components/applayout.py +397 -0
- solara/components/button.py +85 -0
- solara/components/card.py +87 -0
- solara/components/checkbox.py +50 -0
- solara/components/code_highlight_css.py +11 -0
- solara/components/code_highlight_css.vue +63 -0
- solara/components/columns.py +159 -0
- solara/components/component_vue.py +134 -0
- solara/components/cross_filter.py +335 -0
- solara/components/dataframe.py +546 -0
- solara/components/datatable.py +214 -0
- solara/components/datatable.vue +175 -0
- solara/components/details.py +56 -0
- solara/components/download.vue +35 -0
- solara/components/echarts.py +86 -0
- solara/components/echarts.vue +139 -0
- solara/components/figure_altair.py +39 -0
- solara/components/file_browser.py +181 -0
- solara/components/file_download.py +199 -0
- solara/components/file_drop.py +159 -0
- solara/components/file_drop.vue +83 -0
- solara/components/file_list_widget.vue +78 -0
- solara/components/head.py +27 -0
- solara/components/head_tag.py +49 -0
- solara/components/head_tag.vue +60 -0
- solara/components/image.py +173 -0
- solara/components/input.py +456 -0
- solara/components/input_text_area.py +86 -0
- solara/components/link.py +55 -0
- solara/components/markdown.py +441 -0
- solara/components/markdown_editor.py +33 -0
- solara/components/markdown_editor.vue +359 -0
- solara/components/matplotlib.py +74 -0
- solara/components/meta.py +47 -0
- solara/components/misc.py +333 -0
- solara/components/pivot_table.py +258 -0
- solara/components/pivot_table.vue +158 -0
- solara/components/progress.py +47 -0
- solara/components/select.py +182 -0
- solara/components/select.vue +27 -0
- solara/components/slider.py +442 -0
- solara/components/slider_date.vue +56 -0
- solara/components/spinner-solara.vue +105 -0
- solara/components/spinner.py +45 -0
- solara/components/sql_code.py +41 -0
- solara/components/sql_code.vue +125 -0
- solara/components/style.py +105 -0
- solara/components/switch.py +71 -0
- solara/components/tab_navigation.py +37 -0
- solara/components/title.py +90 -0
- solara/components/title.vue +38 -0
- solara/components/togglebuttons.py +200 -0
- solara/components/tooltip.py +61 -0
- solara/core.py +42 -0
- solara/datatypes.py +143 -0
- solara/express.py +241 -0
- solara/hooks/__init__.py +4 -0
- solara/hooks/dataframe.py +99 -0
- solara/hooks/misc.py +263 -0
- solara/hooks/use_reactive.py +151 -0
- solara/hooks/use_thread.py +129 -0
- solara/kitchensink.py +8 -0
- solara/lab/__init__.py +34 -0
- solara/lab/components/__init__.py +7 -0
- solara/lab/components/chat.py +215 -0
- solara/lab/components/confirmation_dialog.py +163 -0
- solara/lab/components/cross_filter.py +7 -0
- solara/lab/components/input_date.py +339 -0
- solara/lab/components/input_time.py +133 -0
- solara/lab/components/menu.py +181 -0
- solara/lab/components/menu.vue +38 -0
- solara/lab/components/tabs.py +274 -0
- solara/lab/components/theming.py +98 -0
- solara/lab/components/theming.vue +72 -0
- solara/lab/hooks/__init__.py +0 -0
- solara/lab/hooks/dataframe.py +2 -0
- solara/lab/toestand.py +3 -0
- solara/lab/utils/__init__.py +2 -0
- solara/lab/utils/cookies.py +5 -0
- solara/lab/utils/dataframe.py +165 -0
- solara/lab/utils/headers.py +5 -0
- solara/layout.py +44 -0
- solara/lifecycle.py +46 -0
- solara/minisettings.py +141 -0
- solara/py.typed +0 -0
- solara/reactive.py +99 -0
- solara/routing.py +268 -0
- solara/scope/__init__.py +88 -0
- solara/scope/types.py +55 -0
- solara/server/__init__.py +0 -0
- solara/server/app.py +527 -0
- solara/server/assets/custom.css +1 -0
- solara/server/assets/custom.js +1 -0
- solara/server/assets/favicon.png +0 -0
- solara/server/assets/favicon.svg +5 -0
- solara/server/assets/style.css +1681 -0
- solara/server/assets/theme-dark.css +437 -0
- solara/server/assets/theme-light.css +420 -0
- solara/server/assets/theme.js +3 -0
- solara/server/cdn_helper.py +91 -0
- solara/server/esm.py +71 -0
- solara/server/fastapi.py +5 -0
- solara/server/flask.py +297 -0
- solara/server/jupyter/__init__.py +2 -0
- solara/server/jupyter/cdn_handler.py +28 -0
- solara/server/jupyter/server_extension.py +40 -0
- solara/server/jupyter/solara.py +91 -0
- solara/server/jupytertools.py +46 -0
- solara/server/kernel.py +388 -0
- solara/server/kernel_context.py +467 -0
- solara/server/patch.py +564 -0
- solara/server/pyinstaller/__init__.py +9 -0
- solara/server/pyinstaller/hook-ipyreact.py +5 -0
- solara/server/pyinstaller/hook-ipyvuetify.py +5 -0
- solara/server/pyinstaller/hook-solara.py +9 -0
- solara/server/qt.py +113 -0
- solara/server/reload.py +251 -0
- solara/server/server.py +484 -0
- solara/server/settings.py +249 -0
- solara/server/shell.py +269 -0
- solara/server/starlette.py +770 -0
- solara/server/static/ansi.js +270 -0
- solara/server/static/highlight-dark.css +82 -0
- solara/server/static/highlight.css +43 -0
- solara/server/static/main-vuetify.js +272 -0
- solara/server/static/main.js +163 -0
- solara/server/static/solara_bootstrap.py +129 -0
- solara/server/static/sun.svg +23 -0
- solara/server/static/webworker.js +42 -0
- solara/server/telemetry.py +212 -0
- solara/server/templates/index.html.j2 +1 -0
- solara/server/templates/loader-plain.css +11 -0
- solara/server/templates/loader-plain.html +20 -0
- solara/server/templates/loader-solara.css +111 -0
- solara/server/templates/loader-solara.html +40 -0
- solara/server/templates/plain.html +82 -0
- solara/server/templates/solara.html.j2 +486 -0
- solara/server/threaded.py +84 -0
- solara/server/utils.py +44 -0
- solara/server/websocket.py +45 -0
- solara/settings.py +86 -0
- solara/tasks.py +893 -0
- solara/template/button.py +16 -0
- solara/template/markdown.py +42 -0
- solara/template/portal/.flake8 +6 -0
- solara/template/portal/.pre-commit-config.yaml +28 -0
- solara/template/portal/LICENSE +21 -0
- solara/template/portal/Procfile +7 -0
- solara/template/portal/mypy.ini +3 -0
- solara/template/portal/pyproject.toml +26 -0
- solara/template/portal/solara_portal/__init__.py +4 -0
- solara/template/portal/solara_portal/components/__init__.py +2 -0
- solara/template/portal/solara_portal/components/article.py +28 -0
- solara/template/portal/solara_portal/components/data.py +28 -0
- solara/template/portal/solara_portal/components/header.py +6 -0
- solara/template/portal/solara_portal/components/layout.py +6 -0
- solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +85 -0
- solara/template/portal/solara_portal/content/articles/substiterat-vati.md +70 -0
- solara/template/portal/solara_portal/data.py +60 -0
- solara/template/portal/solara_portal/pages/__init__.py +67 -0
- solara/template/portal/solara_portal/pages/article/__init__.py +26 -0
- solara/template/portal/solara_portal/pages/tabular.py +29 -0
- solara/template/portal/solara_portal/pages/viz/__init__.py +70 -0
- solara/template/portal/solara_portal/pages/viz/overview.py +14 -0
- solara/test/__init__.py +0 -0
- solara/test/pytest_plugin.py +783 -0
- solara/toestand.py +998 -0
- solara/util.py +348 -0
- solara/validate_hooks.py +258 -0
- solara/website/__init__.py +0 -0
- solara/website/assets/custom.css +444 -0
- solara/website/assets/images/logo-small.png +0 -0
- solara/website/assets/images/logo.svg +17 -0
- solara/website/assets/images/logo_white.svg +50 -0
- solara/website/assets/theme.js +8 -0
- solara/website/components/__init__.py +5 -0
- solara/website/components/algolia.py +6 -0
- solara/website/components/algolia.vue +24 -0
- solara/website/components/algolia_api.vue +202 -0
- solara/website/components/breadcrumbs.py +28 -0
- solara/website/components/contact.py +144 -0
- solara/website/components/docs.py +143 -0
- solara/website/components/header.py +75 -0
- solara/website/components/mailchimp.py +12 -0
- solara/website/components/mailchimp.vue +47 -0
- solara/website/components/markdown.py +99 -0
- solara/website/components/markdown_nav.vue +34 -0
- solara/website/components/notebook.py +171 -0
- solara/website/components/sidebar.py +105 -0
- solara/website/pages/__init__.py +370 -0
- solara/website/pages/about/__init__.py +9 -0
- solara/website/pages/about/about.md +3 -0
- solara/website/pages/apps/__init__.py +16 -0
- solara/website/pages/apps/authorization/__init__.py +119 -0
- solara/website/pages/apps/authorization/admin.py +12 -0
- solara/website/pages/apps/authorization/users.py +12 -0
- solara/website/pages/apps/jupyter-dashboard-1.py +116 -0
- solara/website/pages/apps/layout-demo.py +40 -0
- solara/website/pages/apps/multipage/__init__.py +38 -0
- solara/website/pages/apps/multipage/page1.py +26 -0
- solara/website/pages/apps/multipage/page2.py +34 -0
- solara/website/pages/apps/scatter.py +136 -0
- solara/website/pages/apps/scrolling.py +63 -0
- solara/website/pages/apps/tutorial-streamlit.py +18 -0
- solara/website/pages/careers/__init__.py +27 -0
- solara/website/pages/changelog/__init__.py +10 -0
- solara/website/pages/changelog/changelog.md +372 -0
- solara/website/pages/contact/__init__.py +34 -0
- solara/website/pages/doc_use_download.py +85 -0
- solara/website/pages/documentation/__init__.py +90 -0
- solara/website/pages/documentation/advanced/__init__.py +9 -0
- solara/website/pages/documentation/advanced/content/00-overview.md +1 -0
- solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +6 -0
- solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +196 -0
- solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +125 -0
- solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +417 -0
- solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +69 -0
- solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +50 -0
- solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +124 -0
- solara/website/pages/documentation/advanced/content/15-reference/00-overview.md +3 -0
- solara/website/pages/documentation/advanced/content/15-reference/40-static_files.md +31 -0
- solara/website/pages/documentation/advanced/content/15-reference/41-asset-files.md +72 -0
- solara/website/pages/documentation/advanced/content/15-reference/60-static-site-generation.md +59 -0
- solara/website/pages/documentation/advanced/content/15-reference/70-search.md +34 -0
- solara/website/pages/documentation/advanced/content/15-reference/80-reloading.md +34 -0
- solara/website/pages/documentation/advanced/content/15-reference/90-notebook-support.md +7 -0
- solara/website/pages/documentation/advanced/content/15-reference/95-caching.md +148 -0
- solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +10 -0
- solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +35 -0
- solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +42 -0
- solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +28 -0
- solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +108 -0
- solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +23 -0
- solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +192 -0
- solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +166 -0
- solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +18 -0
- solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +256 -0
- solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +108 -0
- solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +12 -0
- solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +7 -0
- solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +187 -0
- solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
- solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +45 -0
- solara/website/pages/documentation/advanced/content/40-development/10-setup.md +76 -0
- solara/website/pages/documentation/api/__init__.py +19 -0
- solara/website/pages/documentation/api/cross_filter/__init__.py +9 -0
- solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +22 -0
- solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +20 -0
- solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +20 -0
- solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +20 -0
- solara/website/pages/documentation/api/hooks/__init__.py +9 -0
- solara/website/pages/documentation/api/hooks/use_cross_filter.py +23 -0
- solara/website/pages/documentation/api/hooks/use_dark_effective.py +12 -0
- solara/website/pages/documentation/api/hooks/use_effect.md +43 -0
- solara/website/pages/documentation/api/hooks/use_effect.py +9 -0
- solara/website/pages/documentation/api/hooks/use_exception.py +31 -0
- solara/website/pages/documentation/api/hooks/use_memo.md +16 -0
- solara/website/pages/documentation/api/hooks/use_memo.py +9 -0
- solara/website/pages/documentation/api/hooks/use_previous.py +30 -0
- solara/website/pages/documentation/api/hooks/use_reactive.py +16 -0
- solara/website/pages/documentation/api/hooks/use_state.py +10 -0
- solara/website/pages/documentation/api/hooks/use_state_or_update.py +66 -0
- solara/website/pages/documentation/api/hooks/use_thread.md +64 -0
- solara/website/pages/documentation/api/hooks/use_thread.py +42 -0
- solara/website/pages/documentation/api/hooks/use_trait_observe.py +12 -0
- solara/website/pages/documentation/api/routing/__init__.py +9 -0
- solara/website/pages/documentation/api/routing/generate_routes.py +10 -0
- solara/website/pages/documentation/api/routing/generate_routes_directory.py +10 -0
- solara/website/pages/documentation/api/routing/resolve_path.py +35 -0
- solara/website/pages/documentation/api/routing/route.py +29 -0
- solara/website/pages/documentation/api/routing/use_route.py +76 -0
- solara/website/pages/documentation/api/routing/use_router.py +16 -0
- solara/website/pages/documentation/api/utilities/__init__.py +9 -0
- solara/website/pages/documentation/api/utilities/component_vue.py +10 -0
- solara/website/pages/documentation/api/utilities/computed.py +16 -0
- solara/website/pages/documentation/api/utilities/display.py +16 -0
- solara/website/pages/documentation/api/utilities/get_kernel_id.py +16 -0
- solara/website/pages/documentation/api/utilities/get_session_id.py +16 -0
- solara/website/pages/documentation/api/utilities/memoize.py +35 -0
- solara/website/pages/documentation/api/utilities/on_kernel_start.py +44 -0
- solara/website/pages/documentation/api/utilities/reactive.py +16 -0
- solara/website/pages/documentation/api/utilities/widget.py +104 -0
- solara/website/pages/documentation/components/__init__.py +12 -0
- solara/website/pages/documentation/components/advanced/__init__.py +9 -0
- solara/website/pages/documentation/components/advanced/link.py +25 -0
- solara/website/pages/documentation/components/advanced/meta.py +17 -0
- solara/website/pages/documentation/components/advanced/style.py +43 -0
- solara/website/pages/documentation/components/common.py +9 -0
- solara/website/pages/documentation/components/data/__init__.py +9 -0
- solara/website/pages/documentation/components/data/dataframe.py +44 -0
- solara/website/pages/documentation/components/data/pivot_table.py +81 -0
- solara/website/pages/documentation/components/enterprise/__init__.py +9 -0
- solara/website/pages/documentation/components/enterprise/avatar.py +24 -0
- solara/website/pages/documentation/components/enterprise/avatar_menu.py +25 -0
- solara/website/pages/documentation/components/input/__init__.py +9 -0
- solara/website/pages/documentation/components/input/button.py +23 -0
- solara/website/pages/documentation/components/input/checkbox.py +10 -0
- solara/website/pages/documentation/components/input/file_browser.py +30 -0
- solara/website/pages/documentation/components/input/file_drop.py +76 -0
- solara/website/pages/documentation/components/input/input.py +43 -0
- solara/website/pages/documentation/components/input/select.py +22 -0
- solara/website/pages/documentation/components/input/slider.py +29 -0
- solara/website/pages/documentation/components/input/switch.py +10 -0
- solara/website/pages/documentation/components/input/togglebuttons.py +21 -0
- solara/website/pages/documentation/components/lab/__init__.py +9 -0
- solara/website/pages/documentation/components/lab/chat.py +109 -0
- solara/website/pages/documentation/components/lab/confirmation_dialog.py +55 -0
- solara/website/pages/documentation/components/lab/cookies_headers.py +48 -0
- solara/website/pages/documentation/components/lab/input_date.py +20 -0
- solara/website/pages/documentation/components/lab/input_time.py +15 -0
- solara/website/pages/documentation/components/lab/menu.py +22 -0
- solara/website/pages/documentation/components/lab/tab.py +25 -0
- solara/website/pages/documentation/components/lab/tabs.py +45 -0
- solara/website/pages/documentation/components/lab/task.py +11 -0
- solara/website/pages/documentation/components/lab/theming.py +74 -0
- solara/website/pages/documentation/components/lab/use_task.py +11 -0
- solara/website/pages/documentation/components/layout/__init__.py +9 -0
- solara/website/pages/documentation/components/layout/app_bar.py +16 -0
- solara/website/pages/documentation/components/layout/app_bar_title.py +16 -0
- solara/website/pages/documentation/components/layout/app_layout.py +24 -0
- solara/website/pages/documentation/components/layout/card.py +15 -0
- solara/website/pages/documentation/components/layout/card_actions.py +16 -0
- solara/website/pages/documentation/components/layout/column.py +30 -0
- solara/website/pages/documentation/components/layout/columns.py +27 -0
- solara/website/pages/documentation/components/layout/columns_responsive.py +66 -0
- solara/website/pages/documentation/components/layout/details.py +13 -0
- solara/website/pages/documentation/components/layout/griddraggable.py +62 -0
- solara/website/pages/documentation/components/layout/gridfixed.py +19 -0
- solara/website/pages/documentation/components/layout/hbox.py +18 -0
- solara/website/pages/documentation/components/layout/row.py +30 -0
- solara/website/pages/documentation/components/layout/sidebar.py +24 -0
- solara/website/pages/documentation/components/layout/vbox.py +19 -0
- solara/website/pages/documentation/components/output/__init__.py +9 -0
- solara/website/pages/documentation/components/output/file_download.py +11 -0
- solara/website/pages/documentation/components/output/html.py +19 -0
- solara/website/pages/documentation/components/output/image.py +11 -0
- solara/website/pages/documentation/components/output/markdown.py +57 -0
- solara/website/pages/documentation/components/output/markdown_editor.py +51 -0
- solara/website/pages/documentation/components/output/sql_code.py +83 -0
- solara/website/pages/documentation/components/output/tooltip.py +11 -0
- solara/website/pages/documentation/components/page/__init__.py +9 -0
- solara/website/pages/documentation/components/page/head.py +15 -0
- solara/website/pages/documentation/components/page/title.py +25 -0
- solara/website/pages/documentation/components/status/__init__.py +9 -0
- solara/website/pages/documentation/components/status/error.py +39 -0
- solara/website/pages/documentation/components/status/info.py +39 -0
- solara/website/pages/documentation/components/status/progress.py +10 -0
- solara/website/pages/documentation/components/status/spinner.py +11 -0
- solara/website/pages/documentation/components/status/success.py +40 -0
- solara/website/pages/documentation/components/status/warning.py +47 -0
- solara/website/pages/documentation/components/viz/__init__.py +9 -0
- solara/website/pages/documentation/components/viz/altair.py +42 -0
- solara/website/pages/documentation/components/viz/echarts.py +77 -0
- solara/website/pages/documentation/components/viz/matplotlib.py +30 -0
- solara/website/pages/documentation/components/viz/plotly.py +63 -0
- solara/website/pages/documentation/components/viz/plotly_express.py +41 -0
- solara/website/pages/documentation/examples/__init__.py +54 -0
- solara/website/pages/documentation/examples/ai/__init__.py +11 -0
- solara/website/pages/documentation/examples/ai/chatbot.py +113 -0
- solara/website/pages/documentation/examples/ai/tokenizer.py +107 -0
- solara/website/pages/documentation/examples/basics/__init__.py +10 -0
- solara/website/pages/documentation/examples/basics/sine.py +28 -0
- solara/website/pages/documentation/examples/fullscreen/__init__.py +10 -0
- solara/website/pages/documentation/examples/fullscreen/authorization.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/layout_demo.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/multipage.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/scatter.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/scrolling.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +3 -0
- solara/website/pages/documentation/examples/general/__init__.py +10 -0
- solara/website/pages/documentation/examples/general/custom_storage.py +70 -0
- solara/website/pages/documentation/examples/general/deploy_model.py +115 -0
- solara/website/pages/documentation/examples/general/live_update.py +32 -0
- solara/website/pages/documentation/examples/general/login_oauth.py +81 -0
- solara/website/pages/documentation/examples/general/mycard.vue +58 -0
- solara/website/pages/documentation/examples/general/pokemon_search.py +51 -0
- solara/website/pages/documentation/examples/general/vue_component.py +50 -0
- solara/website/pages/documentation/examples/ipycanvas.py +49 -0
- solara/website/pages/documentation/examples/libraries/__init__.py +10 -0
- solara/website/pages/documentation/examples/libraries/altair.py +65 -0
- solara/website/pages/documentation/examples/libraries/bqplot.py +39 -0
- solara/website/pages/documentation/examples/libraries/ipyleaflet.py +33 -0
- solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +66 -0
- solara/website/pages/documentation/examples/utilities/__init__.py +10 -0
- solara/website/pages/documentation/examples/utilities/calculator.py +157 -0
- solara/website/pages/documentation/examples/utilities/countdown_timer.py +62 -0
- solara/website/pages/documentation/examples/utilities/todo.py +196 -0
- solara/website/pages/documentation/examples/visualization/__init__.py +6 -0
- solara/website/pages/documentation/examples/visualization/annotator.py +67 -0
- solara/website/pages/documentation/examples/visualization/linked_views.py +81 -0
- solara/website/pages/documentation/examples/visualization/plotly.py +44 -0
- solara/website/pages/documentation/faq/__init__.py +12 -0
- solara/website/pages/documentation/faq/content/99-faq.md +112 -0
- solara/website/pages/documentation/getting_started/__init__.py +9 -0
- solara/website/pages/documentation/getting_started/content/00-quickstart.md +107 -0
- solara/website/pages/documentation/getting_started/content/01-introduction.md +125 -0
- solara/website/pages/documentation/getting_started/content/02-installing.md +134 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +14 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +13 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +89 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +124 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +146 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +144 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +65 -0
- 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 +445 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +1021 -0
- solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +11 -0
- solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +228 -0
- solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +278 -0
- solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +7 -0
- solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +305 -0
- solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +80 -0
- solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +7 -0
- solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +26 -0
- solara/website/pages/docutils.py +38 -0
- solara/website/pages/home.vue +1199 -0
- solara/website/pages/our_team/__init__.py +83 -0
- solara/website/pages/pricing/__init__.py +31 -0
- solara/website/pages/roadmap/__init__.py +11 -0
- solara/website/pages/roadmap/roadmap.md +47 -0
- solara/website/pages/scale_ipywidgets.py +45 -0
- solara/website/pages/showcase/__init__.py +105 -0
- solara/website/pages/showcase/domino_code_assist.py +60 -0
- solara/website/pages/showcase/planeto_tessa.py +19 -0
- solara/website/pages/showcase/solara_dev.py +54 -0
- solara/website/pages/showcase/solarathon_2023_team_2.py +22 -0
- solara/website/pages/showcase/solarathon_2023_team_4.py +22 -0
- solara/website/pages/showcase/solarathon_2023_team_5.py +23 -0
- solara/website/pages/showcase/solarathon_2023_team_6.py +34 -0
- solara/website/pages/showcase/wanderlust.py +27 -0
- solara/website/public/beach.jpeg +0 -0
- solara/website/public/logo.svg +6 -0
- solara/website/public/social/discord.svg +1 -0
- solara/website/public/social/github.svg +1 -0
- solara/website/public/social/twitter.svg +3 -0
- solara/website/public/success.html +25 -0
- solara/website/templates/index.html.j2 +117 -0
- solara/website/utils.py +51 -0
- solara/widgets/__init__.py +1 -0
- solara/widgets/vue/gridlayout.vue +107 -0
- solara/widgets/vue/html.vue +4 -0
- solara/widgets/vue/navigator.vue +134 -0
- solara/widgets/vue/vegalite.vue +130 -0
- solara/widgets/widgets.py +74 -0
- solara_ui-1.45.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +7 -0
- solara_ui-1.45.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json +7 -0
- solara_ui-1.45.0.dist-info/METADATA +162 -0
- solara_ui-1.45.0.dist-info/RECORD +464 -0
- solara_ui-1.45.0.dist-info/WHEEL +4 -0
- solara_ui-1.45.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Deploying and hosting your own Solara app
|
|
3
|
+
description: Solara is compatible with many different hosting solutions, such as Flask, Starlette, FastAPI, and Voila.
|
|
4
|
+
---
|
|
5
|
+
# Self hosted deployment
|
|
6
|
+
|
|
7
|
+
* [Flask](#flask)
|
|
8
|
+
* [Starlette](#starlette)
|
|
9
|
+
* [FastAPI](#fastapi)
|
|
10
|
+
* [Voila](#voila)
|
|
11
|
+
* [Panel](#panel)
|
|
12
|
+
* [Nginx](#nginx)
|
|
13
|
+
* [Docker](#docker)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
Solara runs on several web frameworks, such as
|
|
17
|
+
|
|
18
|
+
* [Flask](https://flask.palletsprojects.com/)
|
|
19
|
+
* [Starlette](https://www.starlette.io/) (and thus [FastAPI](https://fastapi.tiangolo.com/))
|
|
20
|
+
|
|
21
|
+
The most straightforward and well-tested method to deploy Solara is through the `solara run` command:
|
|
22
|
+
|
|
23
|
+
$ solara run sol.py --production
|
|
24
|
+
|
|
25
|
+
which uses Starlette under the hood.
|
|
26
|
+
|
|
27
|
+
Your `sol.py` file could resemble the following:
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
import solara
|
|
31
|
+
|
|
32
|
+
clicks = solara.reactive(0)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@solara.component
|
|
36
|
+
def Page():
|
|
37
|
+
color = "green"
|
|
38
|
+
if clicks.value >= 5:
|
|
39
|
+
color = "red"
|
|
40
|
+
|
|
41
|
+
def increment():
|
|
42
|
+
clicks.value += 1
|
|
43
|
+
print("clicks", clicks) # noqa
|
|
44
|
+
|
|
45
|
+
solara.Button(label=f"Clicked: {clicks}", on_click=increment, color=color)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
If you're aiming to integrate Solara with other web frameworks such as [Flask](https://flask.palletsprojects.com/deploying/), [Starlette](https://www.starlette.io/), or [FastAPI](https://fastapi.tiangolo.com/), you normally do not execute `solara run sol.py`.
|
|
50
|
+
Instead, start your chosen web framework as directed by their documentation and configure Solara via environment variables. For instance, instead of running the development server like `solara run sol.py`, set the `SOLARA_APP` environment variable to `sol.py`:
|
|
51
|
+
|
|
52
|
+
$ export SOLARA_APP=sol.py
|
|
53
|
+
# run flask or starlette
|
|
54
|
+
|
|
55
|
+
or look at the examples below for more detailed instructions per web framework. Note that when solara is used this way it [by default runs in production mode](https://solara.dev/documentation/advanced/understanding/solara-server).
|
|
56
|
+
|
|
57
|
+
## Flask
|
|
58
|
+
|
|
59
|
+
For Flask, you can consult [the Flask documentation](https://flask.palletsprojects.com/deploying/).
|
|
60
|
+
|
|
61
|
+
A common solution is to use [gunicorn](https://gunicorn.org/) as the WSGI HTTP Server.
|
|
62
|
+
|
|
63
|
+
A typical command would be:
|
|
64
|
+
```
|
|
65
|
+
$ SOLARA_APP=sol.py gunicorn --workers 4 --threads=20 -b 0.0.0.0:8765 solara.server.flask:app
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Note that we need at least 1 thread per user due to the use of a websocket. *Make sure you understand the implications of using multiple workers by reading [about handling multiple workers with solara server](https://solara.dev/documentation/advanced/understanding/solara-server#handling-multiple-workers)*
|
|
69
|
+
|
|
70
|
+
### Embedding in an existing Flask application
|
|
71
|
+
|
|
72
|
+
If you already have a Flask app and want to add your Solara app behind a prefix, say `'/solara/'`, you can add the [Blueprint](https://flask.palletsprojects.com/blueprints/) to your existing app as follows.
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
from flask import Flask
|
|
76
|
+
import solara.server.flask
|
|
77
|
+
|
|
78
|
+
app = Flask(__name__)
|
|
79
|
+
app.register_blueprint(solara.server.flask.blueprint, url_prefix="/solara/")
|
|
80
|
+
|
|
81
|
+
@app.route("/")
|
|
82
|
+
def hello_world():
|
|
83
|
+
return "<p>Hello, World!</p>"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Save this file as `"app.py"` and run
|
|
87
|
+
|
|
88
|
+
$ SOLARA_APP=sol.py flask run
|
|
89
|
+
* Running on http://127.0.0.1:5000/
|
|
90
|
+
|
|
91
|
+
If you navigate to [http://127.0.0.1:5000/solara](http://127.0.0.1:5000/solara) you should see the Solara app.
|
|
92
|
+
|
|
93
|
+
## Starlette
|
|
94
|
+
|
|
95
|
+
For [Starlette](https://www.starlette.io/) we will assume [uvicorn](http://www.uvicorn.org/) for the ASGI webserver and follow their [deployment documentation](https://www.uvicorn.org/deployment/):
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
$ SOLARA_APP=sol.py uvicorn --workers 4 --host 0.0.0.0 --port 8765 solara.server.starlette:app
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
*Make sure you understand the implications of using multiple workers by reading [about handling multiple workers with solara server](https://solara.dev/documentation/advanced/understanding/solara-server#handling-multiple-workers)*
|
|
102
|
+
|
|
103
|
+
### Embedding in an existing Starlette application
|
|
104
|
+
|
|
105
|
+
If you already have a Starlette app and want to add your Solara app behind a prefix, say `'/solara/'`, you can mount the Starlette routes for Solara to your existing app as follows.
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from starlette.applications import Starlette
|
|
109
|
+
from starlette.requests import Request
|
|
110
|
+
from starlette.responses import JSONResponse
|
|
111
|
+
from starlette.routing import Mount, Route
|
|
112
|
+
|
|
113
|
+
import solara.server.starlette
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def myroot(request: Request):
|
|
117
|
+
return JSONResponse({"framework": "solara"})
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
routes = [
|
|
121
|
+
Route("/", endpoint=myroot),
|
|
122
|
+
Mount("/solara/", routes=solara.server.starlette.routes),
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
app = Starlette(routes=routes)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Save this file as `"solara_on_starlette.py"` and run
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
$ SOLARA_APP=sol.py uvicorn solara_on_starlette:app
|
|
132
|
+
...
|
|
133
|
+
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
|
|
134
|
+
...
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
If you navigate to [http://127.0.0.1:8000/solara](http://127.0.0.1:8000/solara) you should see the Solara app.
|
|
138
|
+
|
|
139
|
+
## FastAPI
|
|
140
|
+
|
|
141
|
+
Since [FastAPI](https://fastapi.tiangolo.com/) is built on Starlette, see the section on [Starlette](#starlette) about how to deploy a Starlette app.
|
|
142
|
+
|
|
143
|
+
### Embedding in an existing FastAPI application
|
|
144
|
+
|
|
145
|
+
Use `app.mount` to mount the Solara app into your existing FastAPI app.
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
from fastapi import FastAPI
|
|
149
|
+
import solara.server.fastapi
|
|
150
|
+
|
|
151
|
+
app = FastAPI()
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@app.get("/")
|
|
155
|
+
def read_root():
|
|
156
|
+
return {"Hello": "World"}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
app.mount("/solara/", app=solara.server.fastapi.app)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Save this file as `"solara_on_fastapi.py"` and run
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
$ SOLARA_APP=sol.py uvicorn solara_on_fastapi:app
|
|
166
|
+
...
|
|
167
|
+
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
|
|
168
|
+
...
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
If you navigate to [http://127.0.0.1:8000/solara](http://127.0.0.1:8000/solara) you should see the Solara app.
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
## Voila
|
|
175
|
+
|
|
176
|
+
If you use Voila, [you can use those deployment options](https://voila.readthedocs.io/en/stable/deploy.html).
|
|
177
|
+
|
|
178
|
+
Make sure you run a notebook where you display the app, e.g.
|
|
179
|
+
```python
|
|
180
|
+
@solara.component
|
|
181
|
+
def Page():
|
|
182
|
+
...
|
|
183
|
+
element = Page()
|
|
184
|
+
display(element)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Or consider using [Voila-vuetify](https://github.com/voila-dashboards/voila-vuetify).
|
|
188
|
+
|
|
189
|
+
Solara apps in Voila do not have support for [routing](/documentation/advanced/understanding/routing)/[multipage](/documentation/advanced/howto/multipage).
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
## Panel
|
|
193
|
+
|
|
194
|
+
[Panel](https://panel.holoviz.org/) supports [IPyWidgets](https://panel.holoviz.org/reference/panes/IPyWidget.html), which
|
|
195
|
+
means we can also embed the resulting widget from Reacton or Solara. See their [section on deployment](https://panel.holoviz.org/user_guide/Server_Deployment.html) and use the following code as an example of how to include a react component.
|
|
196
|
+
```python
|
|
197
|
+
import panel as pn
|
|
198
|
+
import solara
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
@solara.component
|
|
202
|
+
def ButtonClick(label="Hi"):
|
|
203
|
+
clicks, set_clicks = solara.use_state(0)
|
|
204
|
+
def increment():
|
|
205
|
+
set_clicks(clicks + 1)
|
|
206
|
+
return solara.Button(f"{label}: Clicked {clicks} times", on_click=increment)
|
|
207
|
+
|
|
208
|
+
# this creates just an element, Panel doesn't know what to do with that
|
|
209
|
+
element = ButtonClick("Solara+Panel")
|
|
210
|
+
# we explicitly ask Reacton to render it, and give us the widget
|
|
211
|
+
button_widget, render_context = reacton.render_fixed(element)
|
|
212
|
+
# mark this panel to be served by the panel server
|
|
213
|
+
pn.panel(button_widget).servable()
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
For development/testing purposes, run this script as:
|
|
217
|
+
|
|
218
|
+
$ panel serve solara_in_panel.py
|
|
219
|
+
|
|
220
|
+
Solara apps in Panel do not have support for [routing](/documentation/advanced/understanding/routing)/[multipage](/documentation/advanced/howto/multipage).
|
|
221
|
+
|
|
222
|
+
## Nginx
|
|
223
|
+
|
|
224
|
+
If you use Nginx as a (reverse) proxy in front of your Python web server, a minimal
|
|
225
|
+
configuration would be:
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
server {
|
|
229
|
+
server_name widgetti.io;
|
|
230
|
+
listen 80
|
|
231
|
+
location / {
|
|
232
|
+
# the local solara server (could be using Starlette/uvicorn)
|
|
233
|
+
proxy_pass http://localhost:8765/;
|
|
234
|
+
|
|
235
|
+
proxy_set_header Host $host;
|
|
236
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
237
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
238
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
239
|
+
|
|
240
|
+
proxy_http_version 1.1;
|
|
241
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
242
|
+
proxy_set_header Connection "upgrade";
|
|
243
|
+
proxy_read_timeout 86400;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
# If you do not host solara on the root path, you can use the following
|
|
247
|
+
# location /solara/ {
|
|
248
|
+
# ...
|
|
249
|
+
# proxy_set_header X-Script-Name /solara; # informs solara to produce correct urls
|
|
250
|
+
# ...
|
|
251
|
+
# }
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
An alternative to using the `X-Script-Name` header with uvicorn, would be to pass the `--root-path` flag, e.g.:
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
$ SOLARA_APP=sol.py uvicorn --workers 1 --root-path /solara -b 0.0.0.0:8765 solara.server.starlette:app
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
In the case of an [OAuth setup](https://solara.dev/documentation/advanced/enterprise/oauth) it is important to make sure that the `X-Forwarded-Proto` and `Host` headers are forwarded correctly.
|
|
262
|
+
If you are running uvicorn (the default if you use `solara run ...`) you will need to configure uvicorn to trust these headers using e.g.:
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
export UVICORN_PROXY_HEADERS=1 # only needed for uvicorn < 0.10, since it is the default after 0.10
|
|
266
|
+
export FORWARDED_ALLOW_IPS = "127.0.0.1" # 127.0.0.1 is the default, replace this by the ip of the proxy server
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Make sure you replace the IP with the correct IP of the reverse proxy server (instead of `127.0.0.1`). If you are sure that only the reverse proxy can reach the solara server, you can consider
|
|
270
|
+
setting `FORWARDED_ALLOW_IPS="*"`.
|
|
271
|
+
|
|
272
|
+
## HTTPS
|
|
273
|
+
|
|
274
|
+
Solara does not support running in HTTPS (secure) mode directly. You can use a reverse proxy like Nginx, Traefik or Caddy to handle HTTPS for you.
|
|
275
|
+
|
|
276
|
+
However, when running solara via uvicorn, it is possible to run uvicorn with HTTPS enabled. For more information, see the uvicorn documentation:
|
|
277
|
+
https://www.uvicorn.org/deployment/#running-with-https
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
An example command would be:
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
$ SOLARA_APP=sol.py uvicorn --host 0.0.0.0 --port 8765 solara.server.starlette:app --ssl-keyfile=./key.pem --ssl-certfile=./cert.pem
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Docker
|
|
287
|
+
|
|
288
|
+
There is nothing special about running Solara in Docker. The only things you probably need to change is the interface the server binds to.
|
|
289
|
+
Solara by default binds to localhost, so that it is not accessible from the outside world. Apart from that localhost (or `::1` in case of IPv6)
|
|
290
|
+
might not be available, you probably want the outside world to see your Solara app. For that, you can use `--host=0.0.0.0` or `--host=::` option to bind to all interfaces.
|
|
291
|
+
|
|
292
|
+
Your Dockerfile could look like:
|
|
293
|
+
|
|
294
|
+
```Dockerfile
|
|
295
|
+
FROM ....
|
|
296
|
+
|
|
297
|
+
...
|
|
298
|
+
CMD ["solara", "run", "sol.py", "--host=0.0.0.0", "--production"]
|
|
299
|
+
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
For a complete example, you can take a look at:
|
|
303
|
+
* [https://huggingface.co/spaces/solara-dev/template](https://huggingface.co/spaces/solara-dev/template)
|
|
304
|
+
* [https://huggingface.co/spaces/giswqs/solara-template/tree/main](https://huggingface.co/spaces/giswqs/solara-template/tree/main)
|
|
305
|
+
* [https://github.com/opengeos/solara-template](https://github.com/opengeos/solara-template)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Hosting your Solara app on the cloud
|
|
3
|
+
description: Solara apps can be easily hosted either through our service, or via Ploomber cloud.
|
|
4
|
+
---
|
|
5
|
+
# Cloud hosted
|
|
6
|
+
|
|
7
|
+
## Integrated solution (in development)
|
|
8
|
+
|
|
9
|
+
Are you interested in a cloud hosted solution?
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
$ solara deploy
|
|
13
|
+
...
|
|
14
|
+
Your app is live on awesomeapp-mystartup-gh.solara.run
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Sign up for our waiting list to get early access.
|
|
18
|
+
|
|
19
|
+
<!-- Begin Mailchimp Signup Form -->
|
|
20
|
+
<link href="//cdn-images.mailchimp.com/embedcode/classic-071822.css" rel="stylesheet" type="text/css">
|
|
21
|
+
<style type="text/css">
|
|
22
|
+
#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; width:600px;}
|
|
23
|
+
/* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.
|
|
24
|
+
We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
|
|
25
|
+
</style>
|
|
26
|
+
<div id="mc_embed_signup">
|
|
27
|
+
<form action="https://gmail.us13.list-manage.com/subscribe/post?u=1dcdd74de47214edace5b6f49&id=c60b5def86&f_id=00f4c1e2f0" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
|
|
28
|
+
<div id="mc_embed_signup_scroll">
|
|
29
|
+
<h2>Sign up for our waiting list</h2>
|
|
30
|
+
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
|
|
31
|
+
<div class="mc-field-group">
|
|
32
|
+
<label for="mce-EMAIL">Email Address <span class="asterisk">*</span>
|
|
33
|
+
</label>
|
|
34
|
+
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL" required>
|
|
35
|
+
<span id="mce-EMAIL-HELPERTEXT" class="helper_text"></span>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="mc-field-group">
|
|
38
|
+
<label for="mce-FNAME">First Name </label>
|
|
39
|
+
<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
|
|
40
|
+
<span id="mce-FNAME-HELPERTEXT" class="helper_text"></span>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="mc-field-group">
|
|
43
|
+
<label for="mce-LNAME">Last Name </label>
|
|
44
|
+
<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
|
|
45
|
+
<span id="mce-LNAME-HELPERTEXT" class="helper_text"></span>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="mc-field-group">
|
|
48
|
+
<label for="mce-COMPANY">Company </label>
|
|
49
|
+
<input type="text" value="" name="COMPANY" class="" id="mce-COMPANY">
|
|
50
|
+
<span id="mce-COMPANY-HELPERTEXT" class="helper_text"></span>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="mc-field-group">
|
|
54
|
+
<label for="mce-WHYCLOUD">Why are you interested in a cloud hosted solution? </label>
|
|
55
|
+
<input type="text" value="" name="WHYCLOUD" class="" id="mce-WHYCLOUD">
|
|
56
|
+
<span id="mce-WHYCLOUD-HELPERTEXT" class="helper_text"></span>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div id="mce-responses" class="clear foot">
|
|
60
|
+
<div class="response" id="mce-error-response" style="display:none"></div>
|
|
61
|
+
<div class="response" id="mce-success-response" style="display:none"></div>
|
|
62
|
+
</div> <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
|
|
63
|
+
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_1dcdd74de47214edace5b6f49_c60b5def86" tabindex="-1" value=""></div>
|
|
64
|
+
<div class="optionalParent">
|
|
65
|
+
<div class="clear foot">
|
|
66
|
+
<input type="submit" value="Sign up" name="subscribe" id="mc-embedded-subscribe" class="button">
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</form>
|
|
71
|
+
</div>
|
|
72
|
+
<script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script><script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[3]='ADDRESS';ftypes[3]='address';fnames[4]='PHONE';ftypes[4]='phone';fnames[5]='BIRTHDAY';ftypes[5]='birthday';fnames[6]='USECASE';ftypes[6]='text';fnames[7]='COMPANY';ftypes[7]='text';fnames[8]='POSITION';ftypes[8]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
|
|
73
|
+
<!--End mc_embed_signup-->
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## Ploomber Cloud
|
|
77
|
+
|
|
78
|
+
You can use [Ploomber Cloud](https://www.platform.ploomber.io) to deploy Solara apps for free (no credit card required).
|
|
79
|
+
|
|
80
|
+
To learn more, check out their [documentation.](https://docs.cloud.ploomber.io/en/latest/apps/solara.html)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: What is Solara.lab?
|
|
3
|
+
description: Solara lab is a subpackage in solara containing Components, hooks and parts of Solara that are slightly experimental.
|
|
4
|
+
---
|
|
5
|
+
# What is Solara lab?
|
|
6
|
+
|
|
7
|
+
Solara lab is a subpackage in solara containing Components, hooks and parts of Solara that are slightly experimental.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Troubleshoot issues with your Solara application
|
|
3
|
+
description: It is common to run into some issues when developing your application. See here for best practices for troubleshooting anything you run into.
|
|
4
|
+
---
|
|
5
|
+
# Troubleshoot
|
|
6
|
+
|
|
7
|
+
## Issues in Jupyter
|
|
8
|
+
|
|
9
|
+
The most common issue in the Jupyter notebook, or Jupyter Lab happens when the notebook server and the kernel do not share the same Python environment. When you install solara via the notebook (e.g. `!pip install solara`), it will install the ipyvue and ipyvuetify libraries, two of its dependencies. These libraries will get installed in the Python environment of your Python kernel.
|
|
10
|
+
|
|
11
|
+
If your Jupyter notebook or Jupyter Lab server runs in a different Python environment, your browser will not load the Javascript libraries it needs to. In order to get the server to provide these libraries to your browser, we also need to install ipyvue and ipyvuetify in the Python environment of your server.
|
|
12
|
+
|
|
13
|
+
For instance, running the following in AWS SageMaker, will give you information about the Python environment of the kernel.
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
>>> import sys
|
|
17
|
+
>>> sys.executable
|
|
18
|
+
'/home/ec2-user/anaconda3/envs/python3/bin/python'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
While if we inspect the output of `!ps aux | grep jupyter`, we see that the notebook server is using the Python executable at `/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/python3.7`.
|
|
22
|
+
|
|
23
|
+
The solution is to run `!/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/python3.7 -m pip install ipyvue ipyvuetify`, and refresh your browser.
|
|
24
|
+
|
|
25
|
+
The function `solara.check_jupyter()` will perform these checks for you and tell you what to do. However, if it fails and you
|
|
26
|
+
end up in this documentation, we should try to improve it by opening an [Issue on GitHub](https://github.com/widgetti/solara/issues/new).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import inspect
|
|
2
|
+
|
|
3
|
+
import solara
|
|
4
|
+
from solara.alias import rw
|
|
5
|
+
from solara.components import Markdown
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@solara.component
|
|
9
|
+
def Sample(code, component):
|
|
10
|
+
locals = globals().copy()
|
|
11
|
+
exec(code, locals)
|
|
12
|
+
c = locals[component]
|
|
13
|
+
with rw.VBox() as main:
|
|
14
|
+
Markdown(
|
|
15
|
+
f"""
|
|
16
|
+
```python
|
|
17
|
+
{code}
|
|
18
|
+
```
|
|
19
|
+
"""
|
|
20
|
+
)
|
|
21
|
+
c()
|
|
22
|
+
return main
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@solara.component
|
|
26
|
+
def IncludeComponent(component, pre="", highlight=[], **kwargs):
|
|
27
|
+
code = inspect.getsource(component.f)
|
|
28
|
+
with rw.VBox(layout={"padding": "20px", "max_width": "1024px", "border": "1px #333 solid"}) as main:
|
|
29
|
+
Markdown(
|
|
30
|
+
f"""
|
|
31
|
+
```python
|
|
32
|
+
{pre}{code}
|
|
33
|
+
```
|
|
34
|
+
""",
|
|
35
|
+
highlight=highlight,
|
|
36
|
+
)
|
|
37
|
+
component(**kwargs)
|
|
38
|
+
return main
|