mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 06:17:07 +00:00
Simplify distance conversion (#43107)
This commit is contained in:
parent
434d39a5ea
commit
37bcfd1d2f
@ -1,5 +1,6 @@
|
|||||||
"""Distance util functions."""
|
"""Distance util functions."""
|
||||||
from numbers import Number
|
from numbers import Number
|
||||||
|
from typing import Callable, Dict
|
||||||
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
LENGTH,
|
LENGTH,
|
||||||
@ -25,6 +26,28 @@ VALID_UNITS = [
|
|||||||
LENGTH_YARD,
|
LENGTH_YARD,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
TO_METERS: Dict[str, Callable[[float], float]] = {
|
||||||
|
LENGTH_METERS: lambda meters: meters,
|
||||||
|
LENGTH_MILES: lambda miles: miles * 1609.344,
|
||||||
|
LENGTH_YARD: lambda yards: yards * 0.9144,
|
||||||
|
LENGTH_FEET: lambda feet: feet * 0.3048,
|
||||||
|
LENGTH_INCHES: lambda inches: inches * 0.0254,
|
||||||
|
LENGTH_KILOMETERS: lambda kilometers: kilometers * 1000,
|
||||||
|
LENGTH_CENTIMETERS: lambda centimeters: centimeters * 0.01,
|
||||||
|
LENGTH_MILLIMETERS: lambda millimeters: millimeters * 0.001,
|
||||||
|
}
|
||||||
|
|
||||||
|
METERS_TO: Dict[str, Callable[[float], float]] = {
|
||||||
|
LENGTH_METERS: lambda meters: meters,
|
||||||
|
LENGTH_MILES: lambda meters: meters * 0.000621371,
|
||||||
|
LENGTH_YARD: lambda meters: meters * 1.09361,
|
||||||
|
LENGTH_FEET: lambda meters: meters * 3.28084,
|
||||||
|
LENGTH_INCHES: lambda meters: meters * 39.3701,
|
||||||
|
LENGTH_KILOMETERS: lambda meters: meters * 0.001,
|
||||||
|
LENGTH_CENTIMETERS: lambda meters: meters * 100,
|
||||||
|
LENGTH_MILLIMETERS: lambda meters: meters * 1000,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def convert(value: float, unit_1: str, unit_2: str) -> float:
|
def convert(value: float, unit_1: str, unit_2: str) -> float:
|
||||||
"""Convert one unit of measurement to another."""
|
"""Convert one unit of measurement to another."""
|
||||||
@ -39,108 +62,6 @@ def convert(value: float, unit_1: str, unit_2: str) -> float:
|
|||||||
if unit_1 == unit_2 or unit_1 not in VALID_UNITS:
|
if unit_1 == unit_2 or unit_1 not in VALID_UNITS:
|
||||||
return value
|
return value
|
||||||
|
|
||||||
meters: float = value
|
meters: float = TO_METERS[unit_1](value)
|
||||||
|
|
||||||
if unit_1 == LENGTH_MILES:
|
return METERS_TO[unit_2](meters)
|
||||||
meters = __miles_to_meters(value)
|
|
||||||
elif unit_1 == LENGTH_YARD:
|
|
||||||
meters = __yards_to_meters(value)
|
|
||||||
elif unit_1 == LENGTH_FEET:
|
|
||||||
meters = __feet_to_meters(value)
|
|
||||||
elif unit_1 == LENGTH_INCHES:
|
|
||||||
meters = __inches_to_meters(value)
|
|
||||||
elif unit_1 == LENGTH_KILOMETERS:
|
|
||||||
meters = __kilometers_to_meters(value)
|
|
||||||
elif unit_1 == LENGTH_CENTIMETERS:
|
|
||||||
meters = __centimeters_to_meters(value)
|
|
||||||
elif unit_1 == LENGTH_MILLIMETERS:
|
|
||||||
meters = __millimeters_to_meters(value)
|
|
||||||
|
|
||||||
result = meters
|
|
||||||
|
|
||||||
if unit_2 == LENGTH_MILES:
|
|
||||||
result = __meters_to_miles(meters)
|
|
||||||
elif unit_2 == LENGTH_YARD:
|
|
||||||
result = __meters_to_yards(meters)
|
|
||||||
elif unit_2 == LENGTH_FEET:
|
|
||||||
result = __meters_to_feet(meters)
|
|
||||||
elif unit_2 == LENGTH_INCHES:
|
|
||||||
result = __meters_to_inches(meters)
|
|
||||||
elif unit_2 == LENGTH_KILOMETERS:
|
|
||||||
result = __meters_to_kilometers(meters)
|
|
||||||
elif unit_2 == LENGTH_CENTIMETERS:
|
|
||||||
result = __meters_to_centimeters(meters)
|
|
||||||
elif unit_2 == LENGTH_MILLIMETERS:
|
|
||||||
result = __meters_to_millimeters(meters)
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def __miles_to_meters(miles: float) -> float:
|
|
||||||
"""Convert miles to meters."""
|
|
||||||
return miles * 1609.344
|
|
||||||
|
|
||||||
|
|
||||||
def __yards_to_meters(yards: float) -> float:
|
|
||||||
"""Convert yards to meters."""
|
|
||||||
return yards * 0.9144
|
|
||||||
|
|
||||||
|
|
||||||
def __feet_to_meters(feet: float) -> float:
|
|
||||||
"""Convert feet to meters."""
|
|
||||||
return feet * 0.3048
|
|
||||||
|
|
||||||
|
|
||||||
def __inches_to_meters(inches: float) -> float:
|
|
||||||
"""Convert inches to meters."""
|
|
||||||
return inches * 0.0254
|
|
||||||
|
|
||||||
|
|
||||||
def __kilometers_to_meters(kilometers: float) -> float:
|
|
||||||
"""Convert kilometers to meters."""
|
|
||||||
return kilometers * 1000
|
|
||||||
|
|
||||||
|
|
||||||
def __centimeters_to_meters(centimeters: float) -> float:
|
|
||||||
"""Convert centimeters to meters."""
|
|
||||||
return centimeters * 0.01
|
|
||||||
|
|
||||||
|
|
||||||
def __millimeters_to_meters(millimeters: float) -> float:
|
|
||||||
"""Convert millimeters to meters."""
|
|
||||||
return millimeters * 0.001
|
|
||||||
|
|
||||||
|
|
||||||
def __meters_to_miles(meters: float) -> float:
|
|
||||||
"""Convert meters to miles."""
|
|
||||||
return meters * 0.000621371
|
|
||||||
|
|
||||||
|
|
||||||
def __meters_to_yards(meters: float) -> float:
|
|
||||||
"""Convert meters to yards."""
|
|
||||||
return meters * 1.09361
|
|
||||||
|
|
||||||
|
|
||||||
def __meters_to_feet(meters: float) -> float:
|
|
||||||
"""Convert meters to feet."""
|
|
||||||
return meters * 3.28084
|
|
||||||
|
|
||||||
|
|
||||||
def __meters_to_inches(meters: float) -> float:
|
|
||||||
"""Convert meters to inches."""
|
|
||||||
return meters * 39.3701
|
|
||||||
|
|
||||||
|
|
||||||
def __meters_to_kilometers(meters: float) -> float:
|
|
||||||
"""Convert meters to kilometers."""
|
|
||||||
return meters * 0.001
|
|
||||||
|
|
||||||
|
|
||||||
def __meters_to_centimeters(meters: float) -> float:
|
|
||||||
"""Convert meters to centimeters."""
|
|
||||||
return meters * 100
|
|
||||||
|
|
||||||
|
|
||||||
def __meters_to_millimeters(meters: float) -> float:
|
|
||||||
"""Convert meters to millimeters."""
|
|
||||||
return meters * 1000
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user