Clean up Zodiac (#83334)

This commit is contained in:
Franck Nijhof 2022-12-05 20:08:05 +01:00 committed by GitHub
parent 8fdf35b80a
commit e918adb25d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 92 additions and 60 deletions

View File

@ -1,7 +1,7 @@
"""Support for tracking the zodiac sign.""" """Support for tracking the zodiac sign."""
from __future__ import annotations from __future__ import annotations
from homeassistant.components.sensor import SensorEntity from homeassistant.components.sensor import SensorDeviceClass, SensorEntity
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
@ -175,52 +175,34 @@ async def async_setup_platform(
class ZodiacSensor(SensorEntity): class ZodiacSensor(SensorEntity):
"""Representation of a Zodiac sensor.""" """Representation of a Zodiac sensor."""
def __init__(self) -> None: _attr_name = "Zodiac"
"""Initialize the zodiac sensor.""" _attr_device_class = SensorDeviceClass.ENUM
self._attrs: dict[str, str] = {} _attr_options = [
self._state: str = "" SIGN_AQUARIUS,
SIGN_ARIES,
@property SIGN_CANCER,
def unique_id(self) -> str: SIGN_CAPRICORN,
"""Return a unique ID.""" SIGN_GEMINI,
return DOMAIN SIGN_LEO,
SIGN_LIBRA,
@property SIGN_PISCES,
def name(self) -> str: SIGN_SAGITTARIUS,
"""Return the name of the entity.""" SIGN_SCORPIO,
return "Zodiac" SIGN_TAURUS,
SIGN_VIRGO,
@property ]
def device_class(self) -> str: _attr_translation_key = "sign"
"""Return the device class of the entity.""" _attr_unique_id = DOMAIN
return "zodiac__sign"
@property
def native_value(self) -> str:
"""Return the state of the device."""
return self._state
@property
def icon(self) -> str | None:
"""Icon to use in the frontend."""
return ZODIAC_ICONS.get(self._state)
@property
def extra_state_attributes(self) -> dict[str, str]:
"""Return the state attributes."""
return self._attrs
async def async_update(self) -> None: async def async_update(self) -> None:
"""Get the time and updates the state.""" """Get the time and updates the state."""
today = as_local(utcnow()).date() today = as_local(utcnow()).date()
month = int(today.month)
day = int(today.day)
for sign in ZODIAC_BY_DATE: for sign in ZODIAC_BY_DATE:
if (month == sign[0][1] and day >= sign[0][0]) or ( if (today.month == sign[0][1] and today.day >= sign[0][0]) or (
month == sign[1][1] and day <= sign[1][0] today.month == sign[1][1] and today.day <= sign[1][0]
): ):
self._state = sign[2] self._attr_native_value = sign[2]
self._attrs = sign[3] self._attr_icon = ZODIAC_ICONS.get(sign[2])
self._attr_extra_state_attributes = sign[3]
break break

View File

@ -0,0 +1,22 @@
{
"entity": {
"sensor": {
"sign": {
"state": {
"aquarius": "Aquarius",
"aries": "Aries",
"cancer": "Cancer",
"capricorn": "Capricorn",
"gemini": "Gemini",
"leo": "Leo",
"libra": "Libra",
"pisces": "Pisces",
"sagittarius": "Sagittarius",
"scorpio": "Scorpio",
"taurus": "Taurus",
"virgo": "Virgo"
}
}
}
}
}

View File

@ -1,18 +0,0 @@
{
"state": {
"zodiac__sign": {
"aries": "Aries",
"taurus": "Taurus",
"gemini": "Gemini",
"cancer": "Cancer",
"leo": "Leo",
"virgo": "Virgo",
"libra": "Libra",
"scorpio": "Scorpio",
"sagittarius": "Sagittarius",
"capricorn": "Capricorn",
"aquarius": "Aquarius",
"pisces": "Pisces"
}
}
}

View File

@ -0,0 +1,22 @@
{
"entity": {
"sensor": {
"sign": {
"state": {
"aquarius": "Aquarius",
"aries": "Aries",
"cancer": "Cancer",
"capricorn": "Capricorn",
"gemini": "Gemini",
"leo": "Leo",
"libra": "Libra",
"pisces": "Pisces",
"sagittarius": "Sagittarius",
"scorpio": "Scorpio",
"taurus": "Taurus",
"virgo": "Virgo"
}
}
}
}
}

View File

@ -4,6 +4,7 @@ from unittest.mock import patch
import pytest import pytest
from homeassistant.components.sensor import ATTR_OPTIONS, SensorDeviceClass
from homeassistant.components.zodiac.const import ( from homeassistant.components.zodiac.const import (
ATTR_ELEMENT, ATTR_ELEMENT,
ATTR_MODALITY, ATTR_MODALITY,
@ -17,6 +18,8 @@ from homeassistant.components.zodiac.const import (
SIGN_SCORPIO, SIGN_SCORPIO,
SIGN_TAURUS, SIGN_TAURUS,
) )
from homeassistant.const import ATTR_DEVICE_CLASS
from homeassistant.helpers import entity_registry as er
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
@ -48,3 +51,24 @@ async def test_zodiac_day(hass, now, sign, element, modality):
assert state.attributes assert state.attributes
assert state.attributes[ATTR_ELEMENT] == element assert state.attributes[ATTR_ELEMENT] == element
assert state.attributes[ATTR_MODALITY] == modality assert state.attributes[ATTR_MODALITY] == modality
assert state.attributes[ATTR_DEVICE_CLASS] == SensorDeviceClass.ENUM
assert state.attributes[ATTR_OPTIONS] == [
"aquarius",
"aries",
"cancer",
"capricorn",
"gemini",
"leo",
"libra",
"pisces",
"sagittarius",
"scorpio",
"taurus",
"virgo",
]
entity_registry = er.async_get(hass)
entry = entity_registry.async_get("sensor.zodiac")
assert entry
assert entry.unique_id == "zodiac"
assert entry.translation_key == "sign"