Skip to content

Commit 0875ccd

Browse files
qgallouedecgradio-pr-botabidlabs
authored
Add "share this view" functionality (#438)
Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com> Co-authored-by: Abubakar Abid <islamrealm@gmail.com>
1 parent 4a47112 commit 0875ccd

3 files changed

Lines changed: 63 additions & 25 deletions

File tree

.changeset/dry-bananas-burn.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"trackio": minor
3+
---
4+
5+
feat:Add "share this view" functionality

trackio/ui/main.py

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,19 @@ def refresh_runs(
242242
)
243243

244244

245+
def generate_share_fields(
246+
project: str,
247+
metrics: str,
248+
selection: RunSelection,
249+
show_headers: bool = True,
250+
) -> tuple[str, str]:
251+
share_url = utils.generate_share_url(project, metrics, selection.selected)
252+
embed_code = utils.generate_embed_code(
253+
project, metrics, selection.selected, not show_headers
254+
)
255+
return share_url, embed_code
256+
257+
245258
def generate_embed(
246259
project: str, metrics: str, selection: RunSelection, show_headers: bool = True
247260
) -> str:
@@ -745,13 +758,22 @@ def configure(request: gr.Request):
745758
logo = fns.create_logo()
746759
project_dd = fns.create_project_dropdown()
747760

748-
embed_code = gr.Code(
749-
label="Embed this view",
750-
max_lines=2,
751-
lines=2,
752-
language="html",
753-
visible=bool(os.environ.get("SPACE_HOST")),
754-
)
761+
with gr.Tabs(visible=bool(os.environ.get("SPACE_HOST"))):
762+
with gr.Tab("Share"):
763+
share_url = gr.Textbox(
764+
label="Share this view",
765+
max_lines=1,
766+
lines=1,
767+
interactive=False,
768+
buttons=["copy"],
769+
)
770+
with gr.Tab("Embed"):
771+
embed_code = gr.Code(
772+
label="Embed this view",
773+
max_lines=2,
774+
lines=2,
775+
language="html",
776+
)
755777
with gr.Group():
756778
run_tb = gr.Textbox(label="Runs", placeholder="Type to filter...")
757779
run_group_by_dd = gr.Dropdown(label="Group by...", choices=[], value=None)
@@ -849,9 +871,9 @@ def configure(request: gr.Request):
849871
queue=False,
850872
api_visibility="private",
851873
).then(
852-
fn=generate_embed,
874+
fn=generate_share_fields,
853875
inputs=[project_dd, metric_filter_tb, run_selection_state, show_headers_cb],
854-
outputs=[embed_code],
876+
outputs=[share_url, embed_code],
855877
show_progress="hidden",
856878
api_visibility="private",
857879
queue=False,
@@ -882,9 +904,9 @@ def configure(request: gr.Request):
882904
)
883905
gr.on(
884906
[metric_filter_tb.change, run_cb.change],
885-
fn=generate_embed,
907+
fn=generate_share_fields,
886908
inputs=[project_dd, metric_filter_tb, run_selection_state, show_headers_cb],
887-
outputs=embed_code,
909+
outputs=[share_url, embed_code],
888910
show_progress="hidden",
889911
api_visibility="private",
890912
queue=False,
@@ -920,9 +942,9 @@ def toggle_group_view(group_by_dd):
920942
api_visibility="private",
921943
queue=False,
922944
).then(
923-
fn=generate_embed,
945+
fn=generate_share_fields,
924946
inputs=[project_dd, metric_filter_tb, run_selection_state, show_headers_cb],
925-
outputs=embed_code,
947+
outputs=[share_url, embed_code],
926948
show_progress="hidden",
927949
api_visibility="private",
928950
queue=False,

trackio/utils.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from functools import lru_cache
88
from pathlib import Path
99
from typing import TYPE_CHECKING
10+
from urllib.parse import urlencode
1011

1112
import huggingface_hub
1213
import numpy as np
@@ -736,37 +737,47 @@ def get_sync_status(scheduler: "CommitScheduler | DummyCommitScheduler") -> int
736737
return None
737738

738739

739-
def generate_embed_code(
740+
def generate_share_url(
740741
project: str,
741742
metrics: str,
742743
selected_runs: list = None,
743744
hide_headers: bool = False,
744745
) -> str:
745-
"""Generate the embed iframe code based on current settings."""
746+
"""Generate the shareable Space URL based on current settings."""
746747
space_host = os.environ.get("SPACE_HOST", "")
747748
if not space_host:
748749
return ""
749750

750-
params = []
751+
params: dict[str, str] = {}
751752

752753
if project:
753-
params.append(f"project={project}")
754+
params["project"] = project
754755

755756
if metrics and metrics.strip():
756-
params.append(f"metrics={metrics}")
757+
params["metrics"] = metrics
757758

758759
if selected_runs:
759-
runs_param = ",".join(selected_runs)
760-
params.append(f"runs={runs_param}")
760+
params["runs"] = ",".join(selected_runs)
761761

762762
if hide_headers:
763-
params.append("accordion=hidden")
763+
params["accordion"] = "hidden"
764+
params["sidebar"] = "hidden"
765+
params["navbar"] = "hidden"
764766

765-
params.append("sidebar=hidden")
766-
params.append("navbar=hidden")
767+
query_string = urlencode(params)
768+
return f"https://{space_host}?{query_string}"
767769

768-
query_string = "&".join(params)
769-
embed_url = f"https://{space_host}?{query_string}"
770+
771+
def generate_embed_code(
772+
project: str,
773+
metrics: str,
774+
selected_runs: list = None,
775+
hide_headers: bool = False,
776+
) -> str:
777+
"""Generate the embed iframe code based on current settings."""
778+
embed_url = generate_share_url(project, metrics, selected_runs, hide_headers)
779+
if not embed_url:
780+
return ""
770781

771782
return f'<iframe src="{embed_url}" style="width:1600px; height:500px; border:0;"></iframe>'
772783

0 commit comments

Comments
 (0)