diff --git a/src/quartz_api/internal/service/uk_national/national_router.py b/src/quartz_api/internal/service/uk_national/national_router.py index 78ae3f3..ab528cc 100644 --- a/src/quartz_api/internal/service/uk_national/national_router.py +++ b/src/quartz_api/internal/service/uk_national/national_router.py @@ -25,7 +25,7 @@ gsp_id_map, model_names_external_to_internal, ) -from .time_utils import limit_end_datetime_by_permissions +from .time_utils import get_start_window, limit_end_datetime_by_permissions log = logging.getLogger(__name__) @@ -134,7 +134,7 @@ async def get_national_forecast( # we get from from now - rounded up to nearest 30 mins, less 3 days. if start_datetime_utc is None: start_datetime_utc \ - = pd.Timestamp.utcnow().floor("6h").to_pydatetime() - dt.timedelta(days=2) + = get_start_window() if include_metadata: start_datetime_utc \ = pd.Timestamp.utcnow().ceil("30min").to_pydatetime() - dt.timedelta(days=3) @@ -267,7 +267,7 @@ async def get_national_pvlive( location_uuid=uk_loc.uuid, energy_type=models.EnergyType.SOLAR, location_type=models.LocationType.NATION, - window_start=pd.Timestamp.utcnow().floor("6h").to_pydatetime() - dt.timedelta(days=2), + window_start=get_start_window(), window_end=pd.Timestamp.utcnow().floor("6h").to_pydatetime() + dt.timedelta(days=2), observer_name=f"pvlive_{regime}", authdata={}, diff --git a/src/quartz_api/internal/service/uk_national/time_utils.py b/src/quartz_api/internal/service/uk_national/time_utils.py index aeb85ad..eafc03f 100644 --- a/src/quartz_api/internal/service/uk_national/time_utils.py +++ b/src/quartz_api/internal/service/uk_national/time_utils.py @@ -3,6 +3,7 @@ import datetime as dt import os +import pandas as pd import sentry_sdk from quartz_api.internal import models @@ -34,3 +35,15 @@ def limit_end_datetime_by_permissions( return min(end_datetime_utc, intraday_max_allowed) return end_datetime_utc + +def get_start_window() -> pd.Timestamp: + """Get the start window for the forecast query.""" + now = pd.Timestamp.utcnow() + # set as uk london timezone + now_london = now.tz_convert("Europe/London") + # round and move back 2 days + now_minus_2_days_london = now_london.floor("6h") - dt.timedelta(days=2) + # change back to utc + now_minus_2_days_utc = now_minus_2_days_london.tz_convert("UTC") + + return now_minus_2_days_utc