mirror of
https://github.com/home-assistant/core.git
synced 2025-07-07 13:27:09 +00:00
Simplify distance conversion (#43107)
This commit is contained in:
parent
434d39a5ea
commit
37bcfd1d2f
@ -1,5 +1,6 @@
|
||||
"""Distance util functions."""
|
||||
from numbers import Number
|
||||
from typing import Callable, Dict
|
||||
|
||||
from homeassistant.const import (
|
||||
LENGTH,
|
||||
@ -25,6 +26,28 @@ VALID_UNITS = [
|
||||
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:
|
||||
"""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:
|
||||
return value
|
||||
|
||||
meters: float = value
|
||||
meters: float = TO_METERS[unit_1](value)
|
||||
|
||||
if unit_1 == LENGTH_MILES:
|
||||
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
|
||||
return METERS_TO[unit_2](meters)
|
||||
|
Loading…
x
Reference in New Issue
Block a user