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

1""" 

2includes a class that reads metadata from weather station 

3""" 

4 

5from unidecode import unidecode 

6 

7 

8class MetaData: 

9 """ 

10 A class for storing metadata information about a weather station. 

11 

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" 

27 

28 self.__dict__.update(kwargs) 

29 

30 @property 

31 def station_name(self): 

32 return self._station_name 

33 

34 @station_name.setter 

35 def station_name(self, value): 

36 """avoid special chars""" 

37 self._station_name = unidecode(value) 

38 

39 @property 

40 def altitude(self) -> float: 

41 return self._altitude 

42 

43 @altitude.setter 

44 def altitude(self, value: float) -> None: 

45 self._altitude = round(self._ensure_float(value), 5) 

46 

47 @property 

48 def latitude(self) -> float: 

49 return self._latitude 

50 

51 @latitude.setter 

52 def latitude(self, value: float) -> None: 

53 self._latitude = round(self._ensure_float(value), 5) 

54 

55 @property 

56 def longitude(self) -> float: 

57 return self._longitude 

58 

59 @longitude.setter 

60 def longitude(self, value: float) -> None: 

61 self._longitude = round(self._ensure_float(value), 5) 

62 

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)}")