Fix last_modified field still returning wrong timezone

This commit is contained in:
2026-01-14 23:07:47 +08:00
parent f04c6a9cdc
commit f5d2e1c488
2 changed files with 30 additions and 4 deletions

View File

@@ -41,11 +41,11 @@ from .storage import ObjectStorage, StorageError
ui_bp = Blueprint("ui", __name__, template_folder="../templates", url_prefix="/ui") ui_bp = Blueprint("ui", __name__, template_folder="../templates", url_prefix="/ui")
def _format_datetime_display(dt: datetime, display_tz: str | None = None) -> str: def _convert_to_display_tz(dt: datetime, display_tz: str | None = None) -> datetime:
"""Format a datetime for display using the configured timezone. """Convert a datetime to the configured display timezone.
Args: Args:
dt: The datetime to format dt: The datetime to convert
display_tz: Optional timezone string. If not provided, reads from current_app.config. display_tz: Optional timezone string. If not provided, reads from current_app.config.
""" """
if display_tz is None: if display_tz is None:
@@ -58,9 +58,31 @@ def _format_datetime_display(dt: datetime, display_tz: str | None = None) -> str
dt = dt.astimezone(tz) dt = dt.astimezone(tz)
except (KeyError, ValueError): except (KeyError, ValueError):
pass pass
return dt
def _format_datetime_display(dt: datetime, display_tz: str | None = None) -> str:
"""Format a datetime for display using the configured timezone.
Args:
dt: The datetime to format
display_tz: Optional timezone string. If not provided, reads from current_app.config.
"""
dt = _convert_to_display_tz(dt, display_tz)
return dt.strftime("%b %d, %Y %H:%M") return dt.strftime("%b %d, %Y %H:%M")
def _format_datetime_iso(dt: datetime, display_tz: str | None = None) -> str:
"""Format a datetime as ISO format using the configured timezone.
Args:
dt: The datetime to format
display_tz: Optional timezone string. If not provided, reads from current_app.config.
"""
dt = _convert_to_display_tz(dt, display_tz)
return dt.isoformat()
def _storage() -> ObjectStorage: def _storage() -> ObjectStorage:
return current_app.extensions["object_storage"] return current_app.extensions["object_storage"]
@@ -541,6 +563,7 @@ def list_bucket_objects(bucket_name: str):
"size": obj.size, "size": obj.size,
"last_modified": obj.last_modified.isoformat(), "last_modified": obj.last_modified.isoformat(),
"last_modified_display": _format_datetime_display(obj.last_modified), "last_modified_display": _format_datetime_display(obj.last_modified),
"last_modified_iso": _format_datetime_iso(obj.last_modified),
"etag": obj.etag, "etag": obj.etag,
}) })
@@ -640,6 +663,7 @@ def stream_bucket_objects(bucket_name: str):
"size": obj.size, "size": obj.size,
"last_modified": obj.last_modified.isoformat(), "last_modified": obj.last_modified.isoformat(),
"last_modified_display": _format_datetime_display(obj.last_modified, display_tz), "last_modified_display": _format_datetime_display(obj.last_modified, display_tz),
"last_modified_iso": _format_datetime_iso(obj.last_modified, display_tz),
"etag": obj.etag, "etag": obj.etag,
}) + "\n" }) + "\n"

View File

@@ -137,6 +137,7 @@
tr.dataset.size = obj.size; tr.dataset.size = obj.size;
tr.dataset.lastModified = obj.lastModified || obj.last_modified; tr.dataset.lastModified = obj.lastModified || obj.last_modified;
tr.dataset.lastModifiedDisplay = obj.lastModifiedDisplay || obj.last_modified_display || new Date(obj.lastModified || obj.last_modified).toLocaleString(); tr.dataset.lastModifiedDisplay = obj.lastModifiedDisplay || obj.last_modified_display || new Date(obj.lastModified || obj.last_modified).toLocaleString();
tr.dataset.lastModifiedIso = obj.lastModifiedIso || obj.last_modified_iso || obj.lastModified || obj.last_modified;
tr.dataset.etag = obj.etag; tr.dataset.etag = obj.etag;
tr.dataset.previewUrl = obj.previewUrl || obj.preview_url; tr.dataset.previewUrl = obj.previewUrl || obj.preview_url;
tr.dataset.downloadUrl = obj.downloadUrl || obj.download_url; tr.dataset.downloadUrl = obj.downloadUrl || obj.download_url;
@@ -426,6 +427,7 @@
size: obj.size, size: obj.size,
lastModified: obj.last_modified, lastModified: obj.last_modified,
lastModifiedDisplay: obj.last_modified_display, lastModifiedDisplay: obj.last_modified_display,
lastModifiedIso: obj.last_modified_iso,
etag: obj.etag, etag: obj.etag,
previewUrl: urlTemplates ? buildUrlFromTemplate(urlTemplates.preview, key) : '', previewUrl: urlTemplates ? buildUrlFromTemplate(urlTemplates.preview, key) : '',
downloadUrl: urlTemplates ? buildUrlFromTemplate(urlTemplates.download, key) : '', downloadUrl: urlTemplates ? buildUrlFromTemplate(urlTemplates.download, key) : '',
@@ -1793,7 +1795,7 @@
previewKey.textContent = row.dataset.key; previewKey.textContent = row.dataset.key;
previewSize.textContent = formatBytes(Number(row.dataset.size)); previewSize.textContent = formatBytes(Number(row.dataset.size));
previewModified.textContent = row.dataset.lastModified; previewModified.textContent = row.dataset.lastModifiedIso || row.dataset.lastModified;
previewEtag.textContent = row.dataset.etag; previewEtag.textContent = row.dataset.etag;
downloadButton.href = row.dataset.downloadUrl; downloadButton.href = row.dataset.downloadUrl;
downloadButton.classList.remove('disabled'); downloadButton.classList.remove('disabled');