@@ -109,6 +109,43 @@ def _parse_source_time(raw_time: str) -> tuple[float, str]:
109109def _as_float (value ) -> float | None :
110110 if value is None or value == "" :
111111 return None
112+
113+
114+ _CARDINAL_DEGREES = {
115+ "N" : 0.0 ,
116+ "NNE" : 22.5 ,
117+ "NE" : 45.0 ,
118+ "ENE" : 67.5 ,
119+ "E" : 90.0 ,
120+ "ESE" : 112.5 ,
121+ "SE" : 135.0 ,
122+ "SSE" : 157.5 ,
123+ "S" : 180.0 ,
124+ "SSW" : 202.5 ,
125+ "SW" : 225.0 ,
126+ "WSW" : 247.5 ,
127+ "W" : 270.0 ,
128+ "WNW" : 292.5 ,
129+ "NW" : 315.0 ,
130+ "NNW" : 337.5 ,
131+ }
132+
133+ _PRESSURE_TENDENCY_CODES = {
134+ "F" : - 1.0 ,
135+ "S" : 0.0 ,
136+ "R" : 1.0 ,
137+ }
138+
139+
140+ def _numeric_value_for_parameter (value , parameter : dict ) -> float | None :
141+ if value is None :
142+ return None
143+ output_name = parameter .get ("outputName" )
144+ if output_name == "wind_direction" and isinstance (value , str ):
145+ return _CARDINAL_DEGREES .get (value .strip ().upper ())
146+ if output_name == "pressure_tendency" and isinstance (value , str ):
147+ return _PRESSURE_TENDENCY_CODES .get (value .strip ().upper ())
148+ return _as_float (value )
112149 try :
113150 return float (value )
114151 except (TypeError , ValueError ):
@@ -190,7 +227,7 @@ def _candidate_records(data: dict) -> list[dict]:
190227
191228
192229def _record_time (record : dict ) -> str | None :
193- for key in ("dateTime" , "observationTime" , "timestamp" , "time" , "validTime" , "endTime" ):
230+ for key in ("datetime" , " dateTime" , "observationTime" , "timestamp" , "time" , "validTime" , "endTime" ):
194231 value = record .get (key )
195232 if isinstance (value , str ) and value :
196233 return value
@@ -216,7 +253,7 @@ def _select_latest(records: list[dict], parameter: dict) -> tuple[dict, str, flo
216253 for record in records :
217254 raw_time = _record_time (record )
218255 value = _value_for_parameter (record , parameter )
219- numeric = _as_float (value )
256+ numeric = _numeric_value_for_parameter (value , parameter )
220257 if raw_time and numeric is not None :
221258 try :
222259 timestamp , phenomenon_time = _parse_source_time (raw_time )
0 commit comments