From b06314d816107611e54edfdad8d19e961bbc3f92 Mon Sep 17 00:00:00 2001 From: ANUJNAYAK108 Date: Sat, 27 Dec 2025 14:02:09 +0530 Subject: [PATCH 1/2] Make get_window deterministic by allowing reference time --- .../internal/backends/test_utils.py | 20 +++++++++++++++++++ src/quartz_api/internal/backends/utils.py | 18 +++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/quartz_api/internal/backends/test_utils.py diff --git a/src/quartz_api/internal/backends/test_utils.py b/src/quartz_api/internal/backends/test_utils.py new file mode 100644 index 00000000..c7525c15 --- /dev/null +++ b/src/quartz_api/internal/backends/test_utils.py @@ -0,0 +1,20 @@ +import datetime as dt +import unittest + +from .utils import get_window + + +class TestGetWindow(unittest.TestCase): + def test_get_window_with_reference_time(self) -> None: + reference_time = dt.datetime(2024, 1, 10, 15, 30, tzinfo=dt.UTC) + + start, end = get_window(reference_time=reference_time) + + self.assertEqual( + start, + dt.datetime(2024, 1, 8, 0, 0, tzinfo=dt.UTC), + ) + self.assertEqual( + end, + dt.datetime(2024, 1, 12, 0, 0, tzinfo=dt.UTC), + ) diff --git a/src/quartz_api/internal/backends/utils.py b/src/quartz_api/internal/backends/utils.py index 98ec4566..53443637 100644 --- a/src/quartz_api/internal/backends/utils.py +++ b/src/quartz_api/internal/backends/utils.py @@ -3,17 +3,27 @@ import datetime as dt -def get_window() -> tuple[dt.datetime, dt.datetime]: - """Returns the start and end of the window for timeseries data.""" +def get_window( + reference_time: dt.datetime | None = None, +) -> tuple[dt.datetime, dt.datetime]: + """Returns the start and end of the window for timeseries data. + + Args: + reference_time: The time to base the window on. If None, defaults to now (UTC). + """ + + if reference_time is None: + reference_time = dt.datetime.now(tz=dt.UTC) + # Window start is the beginning of the day two days ago - start = (dt.datetime.now(tz=dt.UTC) - dt.timedelta(days=2)).replace( + start = (reference_time - dt.timedelta(days=2)).replace( hour=0, minute=0, second=0, microsecond=0, ) # Window end is the beginning of the day two days ahead - end = (dt.datetime.now(tz=dt.UTC) + dt.timedelta(days=2)).replace( + end = (reference_time + dt.timedelta(days=2)).replace( hour=0, minute=0, second=0, From c616adbe6bacce2af63294289abd4f321574eb7c Mon Sep 17 00:00:00 2001 From: ANUJNAYAK108 Date: Sat, 27 Dec 2025 14:26:29 +0530 Subject: [PATCH 2/2] Fix lint issues in get_window docstring --- src/quartz_api/internal/backends/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/quartz_api/internal/backends/utils.py b/src/quartz_api/internal/backends/utils.py index 53443637..9fa00254 100644 --- a/src/quartz_api/internal/backends/utils.py +++ b/src/quartz_api/internal/backends/utils.py @@ -7,14 +7,13 @@ def get_window( reference_time: dt.datetime | None = None, ) -> tuple[dt.datetime, dt.datetime]: """Returns the start and end of the window for timeseries data. - + Args: reference_time: The time to base the window on. If None, defaults to now (UTC). """ - if reference_time is None: reference_time = dt.datetime.now(tz=dt.UTC) - + # Window start is the beginning of the day two days ago start = (reference_time - dt.timedelta(days=2)).replace( hour=0, @@ -22,6 +21,7 @@ def get_window( second=0, microsecond=0, ) + # Window end is the beginning of the day two days ahead end = (reference_time + dt.timedelta(days=2)).replace( hour=0,