nakas commited on
Commit
396b409
·
1 Parent(s): 050706c

Gracefully handle missing tarball in Gradio UI

Browse files
Files changed (1) hide show
  1. app.py +31 -16
app.py CHANGED
@@ -1,7 +1,7 @@
1
  import os
2
  from pathlib import Path
3
  from threading import Event
4
- from typing import Dict, Tuple
5
 
6
  import gradio as gr
7
 
@@ -19,7 +19,7 @@ def ensure_refresh() -> None:
19
  manager.trigger_refresh()
20
 
21
 
22
- def format_status(status: Dict) -> Tuple[Dict, str]:
23
  """Return status JSON and a markdown summary."""
24
  latest = status.get("latest_state", {})
25
  lines = [
@@ -40,32 +40,47 @@ def format_status(status: Dict) -> Tuple[Dict, str]:
40
  else:
41
  lines.append("- No cycle downloaded yet.")
42
  lines.append("\nUse **Trigger Refresh** to fetch a newer cycle when available.")
 
 
43
  return status, "\n".join(lines)
44
 
45
 
46
- def get_status() -> Tuple[Dict, str]:
47
  ensure_refresh()
48
  status = manager.status()
49
- return format_status(status)
 
50
 
51
 
52
- def trigger_refresh() -> Tuple[Dict, str]:
53
  ensure_refresh()
54
  manager.trigger_refresh()
55
  status = manager.status()
56
- return format_status(status)
 
57
 
58
 
59
- def download_tarball() -> str:
60
  ensure_refresh()
61
- state = manager.downloader.current_state()
62
- if not state or "tarball" not in state:
63
- raise gr.Error("Wave dataset not available yet. Try triggering a refresh.")
 
 
 
 
 
 
64
 
65
- tarball_path = DATA_ROOT / state["tarball"]
66
  if not tarball_path.exists():
67
- raise gr.Error("Tarball missing on disk. Trigger a refresh and try again.")
68
- return str(tarball_path)
 
 
 
 
 
69
 
70
 
71
  with gr.Blocks(title="GFES Wave 0 Downloader") as demo:
@@ -86,9 +101,9 @@ with gr.Blocks(title="GFES Wave 0 Downloader") as demo:
86
  refresh_button = gr.Button("Trigger Refresh", variant="secondary")
87
  download_button = gr.DownloadButton("Download Latest Tarball", variant="primary")
88
 
89
- demo.load(get_status, outputs=[status_json, status_md])
90
- refresh_button.click(trigger_refresh, outputs=[status_json, status_md])
91
- download_button.click(download_tarball, outputs=download_button)
92
 
93
  demo.queue()
94
 
 
1
  import os
2
  from pathlib import Path
3
  from threading import Event
4
+ from typing import Dict, Optional, Tuple
5
 
6
  import gradio as gr
7
 
 
19
  manager.trigger_refresh()
20
 
21
 
22
+ def format_status(status: Dict, notice: Optional[str] = None) -> Tuple[Dict, str]:
23
  """Return status JSON and a markdown summary."""
24
  latest = status.get("latest_state", {})
25
  lines = [
 
40
  else:
41
  lines.append("- No cycle downloaded yet.")
42
  lines.append("\nUse **Trigger Refresh** to fetch a newer cycle when available.")
43
+ if notice:
44
+ lines.append(f"\n⚠️ {notice}")
45
  return status, "\n".join(lines)
46
 
47
 
48
+ def get_status() -> Tuple[Dict, str, Optional[str]]:
49
  ensure_refresh()
50
  status = manager.status()
51
+ status_dict, status_text = format_status(status)
52
+ return status_dict, status_text, None
53
 
54
 
55
+ def trigger_refresh() -> Tuple[Dict, str, Optional[str]]:
56
  ensure_refresh()
57
  manager.trigger_refresh()
58
  status = manager.status()
59
+ status_dict, status_text = format_status(status)
60
+ return status_dict, status_text, None
61
 
62
 
63
+ def download_tarball() -> Tuple[Dict, str, Optional[str]]:
64
  ensure_refresh()
65
+ status = manager.status()
66
+ state = status.get("latest_state", {})
67
+
68
+ tarball_rel = state.get("tarball")
69
+ if not tarball_rel:
70
+ status_dict, status_text = format_status(
71
+ status, "Wave dataset not available yet. Trigger a refresh and try again."
72
+ )
73
+ return status_dict, status_text, None
74
 
75
+ tarball_path = DATA_ROOT / tarball_rel
76
  if not tarball_path.exists():
77
+ status_dict, status_text = format_status(
78
+ status, "Tarball missing on disk. Trigger a refresh and try again."
79
+ )
80
+ return status_dict, status_text, None
81
+
82
+ status_dict, status_text = format_status(status)
83
+ return status_dict, status_text, str(tarball_path)
84
 
85
 
86
  with gr.Blocks(title="GFES Wave 0 Downloader") as demo:
 
101
  refresh_button = gr.Button("Trigger Refresh", variant="secondary")
102
  download_button = gr.DownloadButton("Download Latest Tarball", variant="primary")
103
 
104
+ demo.load(get_status, outputs=[status_json, status_md, download_button])
105
+ refresh_button.click(trigger_refresh, outputs=[status_json, status_md, download_button])
106
+ download_button.click(download_tarball, outputs=[status_json, status_md, download_button])
107
 
108
  demo.queue()
109