Implement basic import auto-healing for streamlit.
Browse files- templates.py +8 -1
templates.py
CHANGED
@@ -214,8 +214,15 @@ def update_iframe_js(demo_type: DemoType) -> str:
|
|
214 |
}}
|
215 |
const newCode = code + ` # Update tag ${{Math.random()}}`;
|
216 |
const entrypointFile = "streamlit_app.py";
|
217 |
-
//
|
218 |
await appController.writeFile(entrypointFile, newCode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
219 |
}}
|
220 |
catch (e) {{
|
221 |
// If the error is caused by a missing module try once to install it and update again.
|
|
|
214 |
}}
|
215 |
const newCode = code + ` # Update tag ${{Math.random()}}`;
|
216 |
const entrypointFile = "streamlit_app.py";
|
217 |
+
// As code rerun happens inside streamlit this won't throw an error for self-healing imports.
|
218 |
await appController.writeFile(entrypointFile, newCode);
|
219 |
+
// So instead wait 500 milliseconds to see if the streamlit error banner appeared with an error.
|
220 |
+
// TODO: Consider a way to make this not rely on streamlit refresh timing; otherwise user can just re-update and this will trigger.
|
221 |
+
await new Promise(r => setTimeout(r, 500));
|
222 |
+
const messageDiv = document.getElementById('stlite-iframe').contentWindow.document.querySelector('.message');
|
223 |
+
if (messageDiv) {{
|
224 |
+
throw Error(messageDiv.innerHTML);
|
225 |
+
}}
|
226 |
}}
|
227 |
catch (e) {{
|
228 |
// If the error is caused by a missing module try once to install it and update again.
|