Coverage for aixweather/imports/utils_import.py: 95%
40 statements
« prev ^ index » next coverage.py v7.4.4, created at 2025-01-06 16:01 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2025-01-06 16:01 +0000
1"""
2includes a class that reads metadata from weather station
3"""
5from unidecode import unidecode
8class MetaData:
9 """
10 A class for storing metadata information about a weather station.
12 Attributes:
13 station_name (str): The name of the weather station.
14 station_id (str): The ID (DWD or DWD MOSMIX ID) of the weather station.
15 altitude (float): The altitude of the weather station in meters.
16 latitude (float): The latitude of the weather station in degree.
17 longitude (float): The longitude of the weather station in degree.
18 input_source (str): The source of input data for the station.
19 """
20 def __init__(self, **kwargs: str):
21 self._station_name: str = "UnknownStationName"
22 self.station_id: str = "UnknownStationID"
23 self._altitude: float = None
24 self._latitude: float = None
25 self._longitude: float = None
26 self.input_source: str = "UnknownInputSource"
28 self.__dict__.update(kwargs)
30 @property
31 def station_name(self):
32 return self._station_name
34 @station_name.setter
35 def station_name(self, value):
36 """avoid special chars"""
37 self._station_name = unidecode(value)
39 @property
40 def altitude(self) -> float:
41 return self._altitude
43 @altitude.setter
44 def altitude(self, value: float) -> None:
45 self._altitude = round(self._ensure_float(value), 5)
47 @property
48 def latitude(self) -> float:
49 return self._latitude
51 @latitude.setter
52 def latitude(self, value: float) -> None:
53 self._latitude = round(self._ensure_float(value), 5)
55 @property
56 def longitude(self) -> float:
57 return self._longitude
59 @longitude.setter
60 def longitude(self, value: float) -> None:
61 self._longitude = round(self._ensure_float(value), 5)
63 def _ensure_float(self, value):
64 if value is not None:
65 try:
66 return float(value)
67 except:
68 raise ValueError(f"Value must be of type float, not {type(value)}")