This commit is contained in:
C H R I S T I A N 2024-05-15 18:42:30 +12:00 committed by GitHub
commit 77926fec9f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 20 additions and 4 deletions

View File

@ -988,16 +988,19 @@ METRIC_SUFFIXES = {
def float_with_unit(quantity, regex_suffix, optional_unit=False):
pattern = re.compile(
f"^([-+]?[0-9]*\\.?[0-9]*)\\s*(\\w*?){regex_suffix}$", re.UNICODE
)
unit_regex = f"\\s*(\\w*?){regex_suffix}"
def validator(value):
unit_pattern = re.compile(f"^{unit_regex}$", re.UNICODE)
pattern = re.compile(f"^([-+]?[0-9]*\\.?[0-9]*){unit_regex}$", re.UNICODE)
def validator(value, to=None):
if optional_unit:
try:
return float_(value)
except Invalid:
pass
match = pattern.match(string(value))
if match is None:
@ -1008,6 +1011,15 @@ def float_with_unit(quantity, regex_suffix, optional_unit=False):
raise Invalid(f"Invalid {quantity} suffix {match.group(2)}")
multiplier = METRIC_SUFFIXES[match.group(2)]
if to is not None:
unit_match = unit_pattern.match(string(to))
if unit_match is None:
raise Invalid(f"Invalid conversion suffix {unit_match.group(1)}")
multiplier /= METRIC_SUFFIXES[unit_match.group(1)]
return mantissa * multiplier
return validator
@ -1027,6 +1039,10 @@ decibel = float_with_unit("decibel", "(dB|dBm|db|dbm)", optional_unit=True)
pressure = float_with_unit("pressure", "(bar|Bar)", optional_unit=True)
def to_unit(value):
print(value)
def temperature(value):
err = None
try: