Skip to content

Commit eaba80b

Browse files
Thibault-Pelletierjourdain
authored andcommitted
feat(google-colab): add support for google colab iframe
1 parent 301dfd8 commit eaba80b

1 file changed

Lines changed: 26 additions & 2 deletions

File tree

trame_client/ui/core.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,35 @@ def iframe_url_builder_jupyter_hub_host(layout):
118118
}
119119

120120

121+
def iframe_url_builder_google_colab(layout):
122+
from google.colab.output import eval_js
123+
124+
server = layout.server
125+
url_base = eval_js(f"google.colab.kernel.proxyPort({server.port})")
126+
if url_base.endswith("/"):
127+
url_base = url_base[:-1]
128+
129+
src = f"{url_base}/index.html?ui={layout.template_name}&reconnect=auto"
130+
elem_id = f"{server.name}_{layout._template_name}"
131+
132+
return {
133+
"id": elem_id,
134+
"src": src,
135+
"style": layout.iframe_style,
136+
**layout.iframe_attrs,
137+
}
138+
139+
121140
def get_iframe_builder(name="default"):
122141
if isinstance(name, Callable):
123142
return name
124143

125144
# Try to detect JupyterHub automatically
126-
if name == "default" and "JUPYTERHUB_SERVICE_PREFIX" in os.environ:
127-
name = "jupyter-hub"
145+
if name == "default":
146+
if "JUPYTERHUB_SERVICE_PREFIX" in os.environ:
147+
name = "jupyter-hub"
148+
if "COLAB_RELEASE_TAG" in os.environ or "COLAB_BACKEND_VERSION" in os.environ:
149+
name = "google-colab"
128150

129151
builder_type = os.environ.get("TRAME_IFRAME_BUILDER", name)
130152
builder = iframe_url_builder_default
@@ -135,6 +157,8 @@ def get_iframe_builder(name="default"):
135157
builder = iframe_url_builder_jupyter_extension
136158
elif builder_type == "jupyter-hub":
137159
builder = iframe_url_builder_jupyter_hub
160+
elif builder_type == "google-colab":
161+
builder = iframe_url_builder_google_colab
138162
elif builder_type == "jupyter-hub-host":
139163
builder = iframe_url_builder_jupyter_hub_host
140164

0 commit comments

Comments
 (0)