Skip to content

Commit 133e2ca

Browse files
fix: automatically init app if not intialized yet
#924 broke cases where solara was mounted in starlette or fastapi as a app, because the lifecycle method are not called in this case.
1 parent 06f1670 commit 133e2ca

3 files changed

Lines changed: 8 additions & 4 deletions

File tree

solara/server/app.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def __init__(self, name, default_app_name="Page"):
9090
self.path = Path(spec.origin)
9191
self.directory = self.path.parent
9292
self._initialized = False
93+
self._lock = threading.Lock()
9394

9495
def init(self):
9596
try:
@@ -225,7 +226,9 @@ def close(self):
225226

226227
def check(self):
227228
if not self._initialized:
228-
raise RuntimeError("Call solara.server.app.ensure_apps_initialized() first")
229+
with self._lock:
230+
if not self._initialized:
231+
self.init()
229232

230233
def run(self):
231234
self.check()

solara/test/pytest_plugin.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,14 @@ def solara_app(solara_server):
144144
used_app = None
145145

146146
@contextlib.contextmanager
147-
def run(app: Union[solara.server.app.AppScript, str]):
147+
def run(app: Union[solara.server.app.AppScript, str], init=True):
148148
nonlocal used_app
149149
if "__default__" in solara.server.app.apps:
150150
solara.server.app.apps["__default__"].close()
151151
if isinstance(app, str):
152152
app = solara.server.app.AppScript(app)
153-
app.init()
153+
if init:
154+
app.init()
154155
used_app = app
155156
solara.server.app.apps["__default__"] = app
156157
try:

tests/integration/starlette_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def test_starlette_mount(page_session: playwright.sync_api.Page, solara_app, ext
4545
server = solara.server.starlette.ServerStarlette(port=port, starlette_app=starlette_app)
4646
server.serve_threaded()
4747
server.wait_until_serving()
48-
with extra_include_path(HERE), solara_app("starlette_test"):
48+
with extra_include_path(HERE), solara_app("starlette_test", init=False):
4949
page_session.goto(f"{server.base_url}/solara_mount/")
5050
page_session.locator("text=Mounted in starlette").wait_for()
5151
finally:

0 commit comments

Comments
 (0)