Skip to content

Commit 256c2be

Browse files
committed
Handle live Met Office observation shape
1 parent 3f1442c commit 256c2be

2 files changed

Lines changed: 42 additions & 5 deletions

File tree

publishers/met_office_datahub/met_office_datahub_publisher.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,43 @@ def _parse_source_time(raw_time: str) -> tuple[float, str]:
109109
def _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

192229
def _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)

publishers/met_office_datahub/stations.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@
7676
{
7777
"outputName": "pressure_tendency",
7878
"label": "Pressure Tendency",
79-
"resultField": "pressure_tendency_hpa",
80-
"unit": "hPa",
81-
"uom": "hPa",
79+
"resultField": "pressure_tendency_code",
80+
"unit": "code (-1 falling, 0 steady, 1 rising)",
81+
"uom": "1",
8282
"aliases": ["pressureTendency", "pressure_tendency", "pressure_tendency_at_10m"]
8383
}
8484
],

0 commit comments

Comments
 (0)