refactor(weather): add wind object to WeatherValue model

This commit is contained in:
2026-09-15 18:00:22 +03:00
parent 91a1e4498c
commit d47dcf69e6
10 changed files with 83 additions and 94 deletions
+5 -51
View File
@@ -58,7 +58,6 @@ class Sky(Model):
class WindDirection(StrEnum):
CALM = auto()
N = auto()
NE = auto()
E = auto()
@@ -69,62 +68,17 @@ class WindDirection(StrEnum):
NW = auto()
class WindDirectionDeg(float):
@property
def direction(self) -> WindDirection:
return self.to_direction()
@property
def value(self) -> float:
return self
# pylint:disable=too-many-return-statements
def to_direction(self) -> WindDirection:
if self == -1:
return WindDirection.CALM
elif self > 337.5 or self <= 22.25:
return WindDirection.N
elif self <= 67.5:
return WindDirection.NE
elif self <= 112.5:
return WindDirection.E
elif self <= 157.5:
return WindDirection.SE
elif self <= 202.5:
return WindDirection.S
elif self <= 247.5:
return WindDirection.SW
elif self <= 292.5:
return WindDirection.W
elif self <= 337.5:
return WindDirection.NW
else:
raise ValueError(self)
@classmethod
def from_direction(cls, direction: WindDirection) -> Self:
return cls(
{
WindDirection.CALM: -1,
WindDirection.N: 0,
WindDirection.NE: 45,
WindDirection.E: 90,
WindDirection.SE: 135,
WindDirection.S: 180,
WindDirection.SW: 225,
WindDirection.W: 270,
WindDirection.NW: 315,
}[direction]
)
class Wind(Model):
speed: int
gust: int
direction: WindDirection | None = None
class WeatherValue(Model):
date: datetime.datetime
sky: Sky
wind: Wind
temperature: list[int]
wind_speed: int
wind_gust: int
wind_direction: float
precipitation: float
pressure: list[int] = Field(default=[])
humidity: int = Field(default=-1)