def translate_metar(wxdata: MetarData, units: Units) -> MetarTrans: """Returns translations for a MetarData object""" data = _trans.current_shared(wxdata, units) data["wind"] = _trans.wind( wxdata.wind_direction, wxdata.wind_speed, wxdata.wind_gust, wxdata.wind_variable_direction, units.wind_speed, ) data["temperature"] = _trans.temperature(wxdata.temperature, units.temperature) data["dewpoint"] = _trans.temperature(wxdata.dewpoint, units.temperature) data["remarks"] = remarks.translate(wxdata.remarks) return MetarTrans(**data)
def translate_taf(wxdata: TafData, units: Units) -> TafTrans: """Returns translations for a TafData object""" data = {"forecast": []} for line in wxdata.forecast: _data = _trans.current_shared(line, units) _data["wind"] = _trans.wind(line.wind_direction, line.wind_speed, line.wind_gust, unit=units.wind_speed) _data["wind_shear"] = wind_shear(line.wind_shear, units.altitude, units.wind_speed) _data["turbulence"] = turb_ice(line.turbulence, units.altitude) _data["icing"] = turb_ice(line.icing, units.altitude) # Remove false 'Sky Clear' if line type is 'BECMG' if line.type == "BECMG" and _data["clouds"] == "Sky clear": _data["clouds"] = None data["forecast"].append(TafLineTrans(**_data)) data["min_temp"] = min_max_temp(wxdata.min_temp, units.temperature) data["max_temp"] = min_max_temp(wxdata.max_temp, units.temperature) data["remarks"] = remarks.translate(wxdata.remarks) return TafTrans(**data)
def test_translate(self): """ Tests extracting translations from the remarks string """ for rmk, out in ( ( "RMK AO1 ACFT MSHP SLP137 T02720183 BINOVC", { "ACFT MSHP": "Aircraft mishap", "AO1": "Automated with no precipitation sensor", "BINOVC": "Breaks in Overcast", "SLP137": "Sea level pressure: 1013.7 hPa", "T02720183": "Temperature 27.2°C and dewpoint 18.3°C", }, ), ( "RMK AO2 51014 21045 60720 70016", { "21045": "6-hour minimum temperature -4.5°C", "51014": "3-hour pressure difference: +/- 1.4 mb - Increasing, then steady", "60720": "Precipitation in the last 3 hours: 7 in. - 6 hours: 20 in.", "70016": "Precipitation in the last 24 hours: 16 in.", "AO2": "Automated with precipitation sensor", }, ), ( "RMK 91234 TSB20 P0123 NOSPECI $", { "$": "ASOS requires maintenance", "91234": "Duration of sunlight: 1234 minutes", "NOSPECI": "No SPECI reports taken", "P0123": "Hourly precipitation: 1.23 in.", "TSB20": "Thunderstorm began at :20", }, ), ): self.assertEqual(remarks.translate(rmk), out)