"""Helpers for sensor entities.""" from __future__ import annotations from datetime import date, datetime import logging from homeassistant.core import callback from homeassistant.helpers.selector import ( SelectSelector, SelectSelectorConfig, SelectSelectorMode, ) from homeassistant.util import dt as dt_util from . import DOMAIN, SensorDeviceClass, SensorStateClass _LOGGER = logging.getLogger(__name__) @callback def async_parse_date_datetime( value: str, entity_id: str, device_class: SensorDeviceClass | str | None ) -> datetime | date | None: """Parse datetime string to a data or datetime.""" if device_class == SensorDeviceClass.TIMESTAMP: if (parsed_timestamp := dt_util.parse_datetime(value)) is None: _LOGGER.warning("%s rendered invalid timestamp: %s", entity_id, value) return None if parsed_timestamp.tzinfo is None: _LOGGER.warning( "%s rendered timestamp without timezone: %s", entity_id, value ) return None return parsed_timestamp # Date device class if (parsed_date := dt_util.parse_date(value)) is not None: return parsed_date _LOGGER.warning("%s rendered invalid date %s", entity_id, value) return None @callback def create_sensor_device_class_select_selector() -> SelectSelector: """Create sensor device class select selector.""" return SelectSelector( SelectSelectorConfig( options=[device_class.value for device_class in SensorDeviceClass], mode=SelectSelectorMode.DROPDOWN, translation_key="device_class", translation_domain=DOMAIN, sort=True, ) ) @callback def create_sensor_state_class_select_selector() -> SelectSelector: """Create sensor state class select selector.""" return SelectSelector( SelectSelectorConfig( options=[device_class.value for device_class in SensorStateClass], mode=SelectSelectorMode.DROPDOWN, translation_key="state_class", translation_domain=DOMAIN, sort=True, ) )