Удалить 'aprslib/parsing/weather.py'
This commit is contained in:
parent
c2a0f18ce0
commit
32c7577fb8
|
|
@ -1,79 +0,0 @@
|
||||||
import re
|
|
||||||
from aprslib.exceptions import ParseError
|
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'parse_weather',
|
|
||||||
'parse_weather_data',
|
|
||||||
]
|
|
||||||
|
|
||||||
# constants
|
|
||||||
wind_multiplier = 0.44704
|
|
||||||
rain_multiplier = 0.254
|
|
||||||
|
|
||||||
key_map = {
|
|
||||||
'g': 'wind_gust',
|
|
||||||
'c': 'wind_direction',
|
|
||||||
't': 'temperature',
|
|
||||||
'S': 'wind_speed',
|
|
||||||
'r': 'rain_1h',
|
|
||||||
'p': 'rain_24h',
|
|
||||||
'P': 'rain_since_midnight',
|
|
||||||
'h': 'humidity',
|
|
||||||
'b': 'pressure',
|
|
||||||
'l': 'luminosity',
|
|
||||||
'L': 'luminosity',
|
|
||||||
's': 'snow',
|
|
||||||
'#': 'rain_raw',
|
|
||||||
}
|
|
||||||
val_map = {
|
|
||||||
'g': lambda x: int(x) * wind_multiplier,
|
|
||||||
'c': lambda x: int(x),
|
|
||||||
'S': lambda x: int(x) * wind_multiplier,
|
|
||||||
't': lambda x: (float(x) - 32) / 1.8,
|
|
||||||
'r': lambda x: int(x) * rain_multiplier,
|
|
||||||
'p': lambda x: int(x) * rain_multiplier,
|
|
||||||
'P': lambda x: int(x) * rain_multiplier,
|
|
||||||
'h': lambda x: 100 if int(x) == 0 else int(x),
|
|
||||||
'b': lambda x: float(x) / 10,
|
|
||||||
'l': lambda x: int(x) + 1000,
|
|
||||||
'L': lambda x: int(x),
|
|
||||||
's': lambda x: float(x) * 25.4,
|
|
||||||
'#': lambda x: int(x),
|
|
||||||
}
|
|
||||||
|
|
||||||
def parse_weather_data(body):
|
|
||||||
parsed = {}
|
|
||||||
|
|
||||||
# parse weather data
|
|
||||||
body = re.sub(r"^([0-9]{3})/([0-9]{3})", "c\\1s\\2", body)
|
|
||||||
body = body.replace('s', 'S', 1)
|
|
||||||
|
|
||||||
# match as many parameters from the start, rest is comment
|
|
||||||
data = re.match(r"^([cSgtrpPlLs#][0-9\-\. ]{3}|h[0-9\. ]{2}|b[0-9\. ]{5})+", body)
|
|
||||||
|
|
||||||
if data:
|
|
||||||
data = data.group()
|
|
||||||
# split out data from comment
|
|
||||||
body = body[len(data):]
|
|
||||||
# parse all weather parameters
|
|
||||||
data = re.findall(r"([cSgtrpPlLs#]\d{3}|t-\d{2}|h\d{2}|b\d{5}|s\.\d{2}|s\d\.\d)", data)
|
|
||||||
data = map(lambda x: (key_map[x[0]] , val_map[x[0]](x[1:])), data)
|
|
||||||
parsed.update(dict(data))
|
|
||||||
|
|
||||||
return (body, parsed)
|
|
||||||
|
|
||||||
def parse_weather(body):
|
|
||||||
match = re.match(r"^(\d{8})c[\. \d]{3}s[\. \d]{3}g[\. \d]{3}t[\. \d]{3}", body)
|
|
||||||
if not match:
|
|
||||||
raise ParseError("invalid positionless weather report format")
|
|
||||||
|
|
||||||
comment, weather = parse_weather_data(body[8:])
|
|
||||||
|
|
||||||
parsed = {
|
|
||||||
'format': 'wx',
|
|
||||||
'wx_raw_timestamp': match.group(1),
|
|
||||||
'comment': comment.strip(' '),
|
|
||||||
'weather': weather,
|
|
||||||
}
|
|
||||||
|
|
||||||
return ('', parsed)
|
|
||||||
Loading…
Reference in New Issue