Spaces:
Sleeping
Sleeping
Xining Li
Deploy snapshot: causal-gate + flash-offer tasks (textbook/ omitted, binary PDF rejected by HF's plain-git push policy)
6ec7f56 Download server/tasks/settings_panel.py from xiningli/webtask-arena: direct link, hf CLI and curl.
- Browser
- Download file 2.6 kB
-
https://huggingface.co/spaces/xiningli/webtask-arena/resolve/main/server/tasks/settings_panel.py
- Command line
-
hf download hf://spaces/xiningli/webtask-arena/server/tasks/settings_panel.py
-
curl -L -o settings_panel.py https://huggingface.co/spaces/xiningli/webtask-arena/resolve/main/server/tasks/settings_panel.py
2.6 kB
| """Settings panel: enable dark mode (Appearance) and set a timezone | |
| (General), then Save. The trap: draft changes don't count until saved, | |
| and unrelated settings must stay untouched.""" | |
| from __future__ import annotations | |
| from typing import Any | |
| from ..seeding import TIMEZONES, rng | |
| DEFAULTS = { | |
| "language": "English", | |
| "timezone": "UTC", | |
| "dark_mode": False, | |
| "compact_layout": False, | |
| "email_notifications": True, | |
| "push_notifications": False, | |
| "beta_features": False, | |
| "usage_analytics": True, | |
| } | |
| # which section of the UI each field lives in | |
| SECTIONS = { | |
| "General": ["language", "timezone"], | |
| "Appearance": ["dark_mode", "compact_layout"], | |
| "Notifications": ["email_notifications", "push_notifications"], | |
| "Advanced": ["beta_features", "usage_analytics"], | |
| } | |
| LANGUAGES = ["English", "Français", "Deutsch", "日本語", "Español"] | |
| class SettingsPanel: | |
| id = "settings-panel" | |
| title = "Settings" | |
| template = "settings_panel.html" | |
| def generate(self, seed: int) -> dict[str, Any]: | |
| r = rng(self.id, seed) | |
| target_tz = r.choice([tz for tz in TIMEZONES if tz != DEFAULTS["timezone"]]) | |
| return {"saved": dict(DEFAULTS), "target_timezone": target_tz} | |
| def instruction(self, state: dict[str, Any]) -> str: | |
| return ( | |
| "In Settings, enable Dark Mode and set the timezone to " | |
| f"{state['target_timezone']}, then save your changes. " | |
| "Leave every other setting as it is." | |
| ) | |
| def view(self, state: dict[str, Any]) -> dict[str, Any]: | |
| return { | |
| "saved": state["saved"], | |
| "sections": SECTIONS, | |
| "timezones": TIMEZONES, | |
| "languages": LANGUAGES, | |
| } | |
| def handle_action(self, state: dict[str, Any], payload: dict[str, Any]) -> dict[str, Any]: | |
| if payload.get("op") != "save": | |
| return {"ok": False, "error": "unknown op"} | |
| draft = payload.get("draft", {}) | |
| unknown = set(draft) - set(DEFAULTS) | |
| if unknown: | |
| return {"ok": False, "error": f"unknown fields: {sorted(unknown)}"} | |
| state["saved"].update(draft) | |
| return {"ok": True} | |
| def verify(self, state: dict[str, Any]) -> dict[str, bool]: | |
| saved = state["saved"] | |
| untouched = [k for k in DEFAULTS if k not in ("dark_mode", "timezone")] | |
| return { | |
| "dark_mode_saved": saved["dark_mode"] is True, | |
| "timezone_saved": saved["timezone"] == state["target_timezone"], | |
| "no_unrelated_changes": all(saved[k] == DEFAULTS[k] for k in untouched), | |
| } | |