fix(weather): fix parsed dates sequence

This commit is contained in:
2026-09-17 16:28:57 +03:00
parent d214849e2e
commit a12a81e26d
3 changed files with 20 additions and 4 deletions
+3 -1
View File
@@ -16,7 +16,7 @@ from gallery.sketch.weather.model import (
WeatherValue, WeatherValue,
WindDirection, WindDirection,
) )
from gallery.sketch.weather.parser import parse_wind_direction from gallery.sketch.weather.parser import fix_dates_sequence, parse_wind_direction
from gallery.sketch.weather.util import merge_weather_values from gallery.sketch.weather.util import merge_weather_values
logger = logging.getLogger("gismeteo") logger = logging.getLogger("gismeteo")
@@ -214,6 +214,8 @@ class GismeteoParser(Parser[Context, WeatherResponse]):
values = [ values = [
merge_weather_values(values[i].date, values[i : i + n], "average") for i in range(0, len(values), n) merge_weather_values(values[i].date, values[i : i + n], "average") for i in range(0, len(values), n)
] ]
if data.period == "days":
fix_dates_sequence(values)
return WeatherResponse( return WeatherResponse(
location=location, location=location,
date=data.date, date=data.date,
+2 -1
View File
@@ -19,7 +19,7 @@ from gallery.sketch.weather.model import (
WeatherValue, WeatherValue,
WindDirection, WindDirection,
) )
from gallery.sketch.weather.parser import parse_wind_direction from gallery.sketch.weather.parser import fix_dates_sequence, parse_wind_direction
class LocationNameParser(TagParser[str]): class LocationNameParser(TagParser[str]):
@@ -183,6 +183,7 @@ class RP5ForecastParser(Parser[str, list[WeatherResponse]]):
values=item_values, values=item_values,
) )
) )
fix_dates_sequence(responses)
return responses return responses
+15 -2
View File
@@ -1,6 +1,7 @@
from typing import Self from datetime import timedelta
from typing import Self, overload
from gallery.sketch.weather.model import WindDirection from gallery.sketch.weather.model import WeatherResponse, WeatherValue, WindDirection
class ParseError(Exception): class ParseError(Exception):
@@ -52,3 +53,15 @@ def parse_wind_direction(value: str | int | float) -> WindDirection | None:
return _parse_wind_direction_str(value) return _parse_wind_direction_str(value)
else: else:
return _parse_wind_direction_number(value) return _parse_wind_direction_number(value)
@overload
def fix_dates_sequence(items: list[WeatherValue]): ...
@overload
def fix_dates_sequence(items: list[WeatherResponse]): ...
def fix_dates_sequence(items):
date = None
for item in items:
if date and (item.date - date).total_seconds() < 0:
item.date = date + timedelta(days=1)
date = item.date