Only allow floats in LonLat (and not None, None).
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Fri, 6 Aug 2021 20:32:33 +0000 (22:32 +0200)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Fri, 6 Aug 2021 20:32:33 +0000 (22:32 +0200)
wrpylib/wrvalidators.py

index cdac2a509df0244f3aafa6d778306d292018e3d3..f48bb30f5db1d03bf9549f5b7a3bd1bebe140747 100644 (file)
@@ -12,7 +12,7 @@ import urllib.parse
 import re
 from collections import OrderedDict, namedtuple
 from email.errors import HeaderParseError
-from typing import Tuple, Optional, List, Callable, Union, TypeVar, Dict
+from typing import Tuple, Optional, List, Callable, Union, TypeVar, Dict, NamedTuple
 
 import mwparserfromhell  # https://github.com/earwig/mwparserfromhell
 
@@ -511,10 +511,9 @@ opt_phone_comment_opt_enum_converter = FromToConverter(lambda value: opt_phone_c
 # longitude/latitude converter
 # ----------------------------
 
-LonLat = namedtuple('LonLat', ['lon', 'lat'])
-
-
-lonlat_none = LonLat(None, None)
+class LonLat(NamedTuple):
+    lon: float
+    lat: float
 
 
 def lonlat_from_str(value: str) -> LonLat:
@@ -530,12 +529,12 @@ def lonlat_to_str(value: LonLat) -> str:
     return f'{value.lat:.6f} N {value.lon:.6f} E'
 
 
-def opt_lonlat_from_str(value: str) -> LonLat:
-    return opt_from_str(value, lonlat_from_str, lonlat_none)
+def opt_lonlat_from_str(value: str) -> Optional[LonLat]:
+    return opt_from_str(value, lonlat_from_str, None)
 
 
-def opt_lonlat_to_str(value: LonLat) -> str:
-    return opt_to_str(value, lonlat_to_str, lonlat_none)
+def opt_lonlat_to_str(value: Optional[LonLat]) -> str:
+    return opt_to_str(value, lonlat_to_str, None)
 
 
 opt_lonlat_converter = FromToConverter(opt_lonlat_from_str, opt_lonlat_to_str)