models.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. # -*- coding: utf-8 -*-
  2. """
  3. Datenmodelle fuer das Weather-Plugin.
  4. Definiert WeatherData, ForecastDay und WeatherResult.
  5. """
  6. from dataclasses import dataclass, field
  7. from datetime import date, datetime
  8. @dataclass
  9. class WeatherData:
  10. """
  11. Aktuelle Wetterdaten.
  12. Attributes:
  13. location: Stadtname
  14. temperature: Temperatur in Grad Celsius
  15. feels_like: Gefuehlte Temperatur
  16. humidity: Luftfeuchtigkeit in Prozent
  17. description: Wetterbeschreibung (z.B. "Leichter Regen")
  18. wind_speed: Windgeschwindigkeit in km/h
  19. wind_direction: Windrichtung in Grad (0-360)
  20. precipitation: Niederschlag in mm
  21. cloud_cover: Bewoelkung in Prozent
  22. pressure: Luftdruck in hPa
  23. provider_name: Name des verwendeten Providers
  24. timestamp: Zeitpunkt der Messung
  25. raw_data: Original-Daten vom Provider
  26. """
  27. location: str
  28. temperature: float
  29. feels_like: float | None
  30. humidity: int
  31. description: str
  32. wind_speed: float
  33. wind_direction: int
  34. precipitation: float
  35. cloud_cover: int | None
  36. pressure: float | None
  37. provider_name: str
  38. timestamp: datetime
  39. raw_data: dict = field(default_factory=dict)
  40. @dataclass
  41. class ForecastDay:
  42. """
  43. Vorhersage fuer einen einzelnen Tag.
  44. Attributes:
  45. date: Datum der Vorhersage
  46. temp_min: Minimaltemperatur in Grad Celsius
  47. temp_max: Maximaltemperatur in Grad Celsius
  48. description: Wetterbeschreibung
  49. precipitation: Niederschlagssumme in mm
  50. wind_speed_max: Maximale Windgeschwindigkeit in km/h
  51. raw_data: Original-Daten vom Provider
  52. """
  53. date: date
  54. temp_min: float
  55. temp_max: float
  56. description: str
  57. precipitation: float
  58. wind_speed_max: float
  59. raw_data: dict = field(default_factory=dict)
  60. @dataclass
  61. class WeatherResult:
  62. """
  63. Komplettes Wetterergebnis mit aktuellem Wetter und Vorhersage.
  64. Attributes:
  65. current: Aktuelle Wetterdaten
  66. forecast: Vorhersage fuer die naechsten Tage
  67. fetched_at: Zeitpunkt des Abrufs
  68. """
  69. current: WeatherData
  70. forecast: list[ForecastDay]
  71. fetched_at: datetime