mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-05-08 22:45:28 +03:00
respect ui.timezone when generating fallback export names
This commit is contained in:
parent
9f57b89296
commit
51a228d203
@ -13,6 +13,7 @@ from enum import Enum
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Callable, Optional
|
from typing import Callable, Optional
|
||||||
|
|
||||||
|
import pytz
|
||||||
from peewee import DoesNotExist
|
from peewee import DoesNotExist
|
||||||
|
|
||||||
from frigate.config import FfmpegConfig, FrigateConfig
|
from frigate.config import FfmpegConfig, FrigateConfig
|
||||||
@ -344,7 +345,19 @@ class RecordingExporter(threading.Thread):
|
|||||||
return proc.returncode, "".join(captured)
|
return proc.returncode, "".join(captured)
|
||||||
|
|
||||||
def get_datetime_from_timestamp(self, timestamp: int) -> str:
|
def get_datetime_from_timestamp(self, timestamp: int) -> str:
|
||||||
# return in iso format
|
# return in iso format using the configured ui.timezone when set,
|
||||||
|
# so the auto-generated export name reflects local time rather
|
||||||
|
# than the container's UTC clock
|
||||||
|
tz_name = self.config.ui.timezone
|
||||||
|
if tz_name:
|
||||||
|
try:
|
||||||
|
tz = pytz.timezone(tz_name)
|
||||||
|
except pytz.UnknownTimeZoneError:
|
||||||
|
tz = None
|
||||||
|
if tz is not None:
|
||||||
|
return datetime.datetime.fromtimestamp(timestamp, tz=tz).strftime(
|
||||||
|
"%Y-%m-%d %H:%M:%S"
|
||||||
|
)
|
||||||
return datetime.datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M:%S")
|
return datetime.datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
def _chapter_metadata_path(self) -> str:
|
def _chapter_metadata_path(self) -> str:
|
||||||
|
|||||||
@ -363,6 +363,33 @@ class TestBroadcastAggregation(unittest.TestCase):
|
|||||||
assert job.progress_percent == 33.0
|
assert job.progress_percent == 33.0
|
||||||
|
|
||||||
|
|
||||||
|
class TestGetDatetimeFromTimestamp(unittest.TestCase):
|
||||||
|
"""Auto-generated export name should honor config.ui.timezone, not
|
||||||
|
fall back to the container's UTC clock when a timezone is configured.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test_uses_configured_ui_timezone(self) -> None:
|
||||||
|
exporter = _make_exporter()
|
||||||
|
exporter.config.ui.timezone = "America/New_York"
|
||||||
|
# 2025-01-15 12:00:00 UTC is 07:00:00 EST
|
||||||
|
assert (
|
||||||
|
exporter.get_datetime_from_timestamp(1736942400)
|
||||||
|
== "2025-01-15 07:00:00"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_falls_back_to_local_when_timezone_unset(self) -> None:
|
||||||
|
exporter = _make_exporter()
|
||||||
|
exporter.config.ui.timezone = None
|
||||||
|
# No assertion on the exact wall-clock value — just confirm no
|
||||||
|
# exception and that pytz isn't required when the field is unset.
|
||||||
|
assert isinstance(exporter.get_datetime_from_timestamp(1736942400), str)
|
||||||
|
|
||||||
|
def test_invalid_timezone_falls_back_to_local(self) -> None:
|
||||||
|
exporter = _make_exporter()
|
||||||
|
exporter.config.ui.timezone = "Not/A_Real_Zone"
|
||||||
|
assert isinstance(exporter.get_datetime_from_timestamp(1736942400), str)
|
||||||
|
|
||||||
|
|
||||||
class TestSchedulesCleanup(unittest.TestCase):
|
class TestSchedulesCleanup(unittest.TestCase):
|
||||||
def test_schedule_job_cleanup_removes_after_delay(self) -> None:
|
def test_schedule_job_cleanup_removes_after_delay(self) -> None:
|
||||||
config = MagicMock()
|
config = MagicMock()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user