Show sync freshness status
This commit is contained in:
@@ -174,6 +174,18 @@ def run_git(args: list[str], env: dict[str, str]) -> subprocess.CompletedProcess
|
||||
)
|
||||
|
||||
|
||||
def read_sync_log() -> dict[str, object]:
|
||||
"""Read the previously published sync log when it is available."""
|
||||
path = ROOT / SYNC_LOG_PATH
|
||||
if not path.exists():
|
||||
return {}
|
||||
try:
|
||||
payload = json.loads(path.read_text(encoding="utf-8"))
|
||||
except (OSError, json.JSONDecodeError):
|
||||
return {}
|
||||
return payload if isinstance(payload, dict) else {}
|
||||
|
||||
|
||||
def publish(content: bytes, sync_log: dict[str, object]) -> None:
|
||||
log_content = (json.dumps(sync_log, ensure_ascii=False, indent=2) + "\n").encode("utf-8")
|
||||
targets = {
|
||||
@@ -244,10 +256,28 @@ def sync() -> None:
|
||||
sheets.append((name, headers, rows))
|
||||
headers, rows = merge_sheets(sheets)
|
||||
content = render_html(headers, rows)
|
||||
previous_sync_log = read_sync_log()
|
||||
previous_data_path = ROOT / PUBLISH_PATH
|
||||
data_changed = (
|
||||
not previous_data_path.exists()
|
||||
or previous_data_path.read_bytes() != content
|
||||
)
|
||||
success_at = datetime.now(timezone.utc)
|
||||
if data_changed:
|
||||
last_data_update_at = success_at.isoformat().replace("+00:00", "Z")
|
||||
last_data_update_at_shanghai = success_at.astimezone(ZoneInfo("Asia/Shanghai")).isoformat()
|
||||
else:
|
||||
last_data_update_at = previous_sync_log.get("last_data_update_at")
|
||||
last_data_update_at_shanghai = previous_sync_log.get("last_data_update_at_shanghai")
|
||||
if not isinstance(last_data_update_at, str) or not last_data_update_at:
|
||||
last_data_update_at = None
|
||||
if not isinstance(last_data_update_at_shanghai, str) or not last_data_update_at_shanghai:
|
||||
last_data_update_at_shanghai = None
|
||||
sync_log = {
|
||||
"last_success_at": success_at.isoformat().replace("+00:00", "Z"),
|
||||
"last_success_at_shanghai": success_at.astimezone(ZoneInfo("Asia/Shanghai")).isoformat(),
|
||||
"last_data_update_at": last_data_update_at,
|
||||
"last_data_update_at_shanghai": last_data_update_at_shanghai,
|
||||
"worksheet_count": len(worksheet_names),
|
||||
"record_count": len(rows),
|
||||
"artifact_bytes": len(content),
|
||||
|
||||
Reference in New Issue
Block a user