Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion metar_taf_parser/commons/i18n.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import os
import threading
from contextlib import contextmanager
from typing import Optional

from metar_taf_parser.commons.exception import TranslationError

Expand All @@ -24,7 +25,7 @@
_PREFIX_MAP[_prefix] = _loc_name


def _resolve(loc: str) -> str:
def _resolve(loc: Optional[str]) -> str:
"""Normalize a user-supplied locale string to an actual SUPPORTED_LOCALES dir name."""
if not loc:
return DEFAULT_LOCALE
Expand Down
5 changes: 3 additions & 2 deletions metar_taf_parser/model/model.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import abc
import datetime
from typing import Optional

from metar_taf_parser.model.enum import Descriptive, Flag, WeatherChangeType, TimeIndicator, IcingIntensity, TurbulenceIntensity

Expand Down Expand Up @@ -386,7 +387,7 @@ def _set_unit(self, unit):
class Icing(AbstractWeatherLayer):
def __init__(self):
super().__init__()
self._intensity: IcingIntensity = None
self._intensity: Optional[IcingIntensity] = None

def _get_intensity(self):
return self._intensity
Expand All @@ -404,7 +405,7 @@ class Turbulence(AbstractWeatherLayer):

def __init__(self):
super().__init__()
self._intensity: TurbulenceIntensity = None
self._intensity: Optional[TurbulenceIntensity] = None

def _get_intensity(self):
return self._intensity
Expand Down
24 changes: 12 additions & 12 deletions metar_taf_parser/parser/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,32 +121,32 @@ def __init__(self):
def parse(self, input: str):
pass

def _parse_weather_condition(self, input: str):
def _parse_weather_condition(self, weather_str: str):
"""
Parses a string into a weather condition. The result is not necessarily valid
:param input: The input to parse
:param weather_str: The input to parse
:return: WeatherCondition object
"""
weather_condition = WeatherCondition()
if self._intensity_regex_pattern.match(input):
match = self._intensity_regex_pattern.findall(input)[0]
if self._intensity_regex_pattern.match(weather_str):
match = self._intensity_regex_pattern.findall(weather_str)[0]
weather_condition.intensity = Intensity(match)
input = input[len(match):]
weather_str = weather_str[len(match):]

for name, member in Descriptive.__members__.items():
if member.value in input:
if member.value in weather_str:
weather_condition.descriptive = member
input = input[len(member.value):]
weather_str = weather_str[len(member.value):]

previous_token = ''
while input != '' and input != previous_token:
previous_token = input
while weather_str != '' and weather_str != previous_token:
previous_token = weather_str
for name, member in Phenomenon.__members__.items():
if re.match(r'^' + member.value, input):
if re.match(r'^' + member.value, weather_str):
weather_condition.add_phenomenon(member)
input = input[len(member.value):]
weather_str = weather_str[len(member.value):]

return weather_condition if input == '' and weather_condition.is_valid() else None
return weather_condition if weather_str == '' and weather_condition.is_valid() else None

def tokenize(self, input: str):
"""
Expand Down
2 changes: 1 addition & 1 deletion metar_taf_parser/tests/commons/test_i18n.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def test_german_translation_active_inside_block(self):
def test_locale_restored_after_block(self):
locale_before = get_locale()
with translation_locale('de'):
pass
self.assertEqual(get_locale(), 'de')
self.assertEqual(get_locale(), locale_before)

def test_none_is_noop(self):
Expand Down
6 changes: 3 additions & 3 deletions metar_taf_parser/tests/parser/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@ def test_general_parse(self, input, expected):
class MetarParserTestCase(unittest.TestCase):

def test_parse(self):
input = 'LFPG 170830Z 00000KT 0350 R27L/0375N R09R/0175N R26R/0500D R08L/0400N R26L/0275D R08R/0250N R27R/0300N R09L/0200N FG SCT000 M01/M01 Q1026 NOSIG'
metar_str = 'LFPG 170830Z 00000KT 0350 R27L/0375N R09R/0175N R26R/0500D R08L/0400N R26L/0275D R08R/0250N R27R/0300N R09L/0200N FG SCT000 M01/M01 Q1026 NOSIG'

metar = MetarParser().parse(input)
metar = MetarParser().parse(metar_str)

self.assertEqual('LFPG', metar.station)
self.assertEqual(17, metar.day)
Expand Down Expand Up @@ -389,7 +389,7 @@ def test_parse_with_invalid_line_breaks(self):

self.assertEqual(170, taf.wind.degrees)
self.assertEqual(5, taf.wind.speed)
self.assertEqual(None, taf.wind.gust)
self.assertIsNone(taf.wind.gust)
self.assertEqual('KT', taf.wind.unit)

self.assertEqual('6000', taf.visibility.distance)
Expand Down