Spaces:
Running
Running
Download hf_data/mrmsframes.py from vincewin/CREST_runner: direct link, hf CLI and curl.
- Browser
- Download file 1.67 kB
-
https://huggingface.co/spaces/vincewin/CREST_runner/resolve/main/hf_data/mrmsframes.py
- Command line
-
hf download hf://spaces/vincewin/CREST_runner/hf_data/mrmsframes.py
-
curl -L -o mrmsframes.py https://huggingface.co/spaces/vincewin/CREST_runner/resolve/main/hf_data/mrmsframes.py
1.67 kB
| """Radar-overlay frame index for the Nowcast-mode MRMS animation. | |
| scripts/update_mrms_recent.py renders each stored Pass1 hour to a colormapped | |
| transparent PNG in CREST_data mrms_frames/ (rolling 7 days). The frontend | |
| animates those straight off the HF CDN; this module only answers "which hours | |
| exist right now" — one repo listing, cached, so scrubbing users don't hammer | |
| the Hub API. | |
| """ | |
| from __future__ import annotations | |
| import os | |
| import re | |
| import threading | |
| import time | |
| REPO = os.environ.get("CREST_FEEDBACK_REPO", "vincewin/CREST_data") | |
| PREFIX = "mrms_frames/" | |
| BASE = f"https://huggingface.co/datasets/{REPO}/resolve/main/{PREFIX.rstrip('/')}" | |
| # MRMS CONUS grid: 0.01 deg, origin (-130, 20), 7000x3500 -> [[S,W],[N,E]] | |
| BOUNDS = [[20.0, -130.0], [55.0, -60.0]] | |
| TTL_S = float(os.environ.get("MRMS_FRAMES_TTL_S", "600")) | |
| _lock = threading.Lock() | |
| _cache: dict = {"t": 0.0, "hours": []} | |
| def _list_hours() -> list[str]: | |
| from huggingface_hub import HfApi | |
| hours = [] | |
| for f in HfApi().list_repo_files(REPO, repo_type="dataset"): | |
| m = re.match(rf"{PREFIX}mrms1h_(\d{{10}})\.png$", f) | |
| if m: | |
| hours.append(m.group(1)) | |
| return sorted(hours) | |
| def frames() -> dict: | |
| """{ok, base, bounds, hours:[YYYYMMDDHH ascending]} — cached TTL_S.""" | |
| with _lock: | |
| if time.time() - _cache["t"] > TTL_S: | |
| try: | |
| _cache["hours"] = _list_hours() | |
| _cache["t"] = time.time() | |
| except Exception: | |
| _cache["t"] = time.time() - TTL_S + 60 # retry in a minute | |
| return {"ok": bool(_cache["hours"]), "base": BASE, "bounds": BOUNDS, | |
| "hours": _cache["hours"]} | |