* Fix: Circular dependencies of internal files * Change: dt.date for Date and dt.datetime for DateTime * Use NewType if available * FIX: Wrong version test * Remove: Date and DateTime types due to error * Change to HomeAssistantType * General Improvement of Typing * Improve typing config_validation * Improve typing script * General Typing Improvements * Improve NewType check * Improve typing db_migrator * Improve util/__init__ typing * Improve helpers/location typing * Regroup imports and remove pylint: disable=ungrouped-imports * General typing improvements
30 lines
964 B
Python
30 lines
964 B
Python
"""Location helpers for Home Assistant."""
|
|
|
|
from typing import Sequence
|
|
|
|
from homeassistant.const import ATTR_LATITUDE, ATTR_LONGITUDE
|
|
from homeassistant.core import State
|
|
from homeassistant.util import location as loc_util
|
|
|
|
|
|
def has_location(state: State) -> bool:
|
|
"""Test if state contains a valid location."""
|
|
return (isinstance(state, State) and
|
|
isinstance(state.attributes.get(ATTR_LATITUDE), float) and
|
|
isinstance(state.attributes.get(ATTR_LONGITUDE), float))
|
|
|
|
|
|
def closest(latitude: float, longitude: float,
|
|
states: Sequence[State]) -> State:
|
|
"""Return closest state to point."""
|
|
with_location = [state for state in states if has_location(state)]
|
|
|
|
if not with_location:
|
|
return None
|
|
|
|
return min(
|
|
with_location,
|
|
key=lambda state: loc_util.distance(
|
|
latitude, longitude, state.attributes.get(ATTR_LATITUDE),
|
|
state.attributes.get(ATTR_LONGITUDE))
|
|
)
|