diff --git a/gallery/painting/gismeteo/parser.py b/gallery/painting/gismeteo/parser.py index 18dbed1..9769c2a 100644 --- a/gallery/painting/gismeteo/parser.py +++ b/gallery/painting/gismeteo/parser.py @@ -16,7 +16,7 @@ from gallery.sketch.weather.model import ( WeatherValue, 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 logger = logging.getLogger("gismeteo") @@ -214,6 +214,8 @@ class GismeteoParser(Parser[Context, WeatherResponse]): values = [ 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( location=location, date=data.date, diff --git a/gallery/painting/rp5/parser.py b/gallery/painting/rp5/parser.py index 1f82c54..08d8c3c 100644 --- a/gallery/painting/rp5/parser.py +++ b/gallery/painting/rp5/parser.py @@ -19,7 +19,7 @@ from gallery.sketch.weather.model import ( WeatherValue, 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]): @@ -183,6 +183,7 @@ class RP5ForecastParser(Parser[str, list[WeatherResponse]]): values=item_values, ) ) + fix_dates_sequence(responses) return responses diff --git a/gallery/sketch/weather/parser.py b/gallery/sketch/weather/parser.py index 6cf80b7..0fcce1b 100644 --- a/gallery/sketch/weather/parser.py +++ b/gallery/sketch/weather/parser.py @@ -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): @@ -52,3 +53,15 @@ def parse_wind_direction(value: str | int | float) -> WindDirection | None: return _parse_wind_direction_str(value) else: 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