From fd72adbf95ed49acbe74bb824099239168febba2 Mon Sep 17 00:00:00 2001 From: Haijie Zhi <133995660+cupkk@users.noreply.github.com> Date: Wed, 29 Jul 2026 08:30:35 +0800 Subject: [PATCH] Fix cache expiration timestamps outside UTC --- src/openpi/shared/download.py | 2 +- src/openpi/shared/download_test.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/openpi/shared/download.py b/src/openpi/shared/download.py index 582f8392df..ee07102f1f 100644 --- a/src/openpi/shared/download.py +++ b/src/openpi/shared/download.py @@ -189,7 +189,7 @@ def _set_file_permission(file_path: pathlib.Path) -> None: def _get_mtime(year: int, month: int, day: int) -> float: """Get the mtime of a given date at midnight UTC.""" date = datetime.datetime(year, month, day, tzinfo=datetime.UTC) - return time.mktime(date.timetuple()) + return date.timestamp() # Map of relative paths, defined as regular expressions, to expiration timestamps (mtime format). diff --git a/src/openpi/shared/download_test.py b/src/openpi/shared/download_test.py index ecb92bbe4d..d44963b713 100644 --- a/src/openpi/shared/download_test.py +++ b/src/openpi/shared/download_test.py @@ -1,4 +1,7 @@ +import datetime +import os import pathlib +import time import pytest @@ -24,6 +27,24 @@ def test_download_local(tmp_path: pathlib.Path): download.maybe_download("bogus") +def test_get_mtime_is_utc(): + if not hasattr(time, "tzset"): + pytest.skip("time.tzset is not available") + + original_tz = os.environ.get("TZ") + try: + os.environ["TZ"] = "America/Los_Angeles" + time.tzset() + expected = datetime.datetime(2025, 2, 17, tzinfo=datetime.UTC).timestamp() + assert download._get_mtime(2025, 2, 17) == expected + finally: + if original_tz is None: + os.environ.pop("TZ", None) + else: + os.environ["TZ"] = original_tz + time.tzset() + + def test_download_gs_dir(): remote_path = "gs://openpi-assets/testdata/random"