Migrate backported StrEnum to built-in StrEnum (#97101)

This commit is contained in:
Franck Nijhof 2023-07-23 23:19:24 +02:00 committed by GitHub
parent 38e3e20f74
commit 30058297cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
64 changed files with 84 additions and 151 deletions

View File

@ -1,32 +1,15 @@
"""Enum backports from standard lib."""
"""Enum backports from standard lib.
This file contained the backport of the StrEnum of Python 3.11.
Since we have dropped support for Python 3.10, we can remove this backport.
This file is kept for now to avoid breaking custom components that might
import it.
"""
from __future__ import annotations
from enum import Enum
from typing import Any, Self
from enum import StrEnum
class StrEnum(str, Enum):
"""Partial backport of Python 3.11's StrEnum for our basic use cases."""
value: str
def __new__(cls, value: str, *args: Any, **kwargs: Any) -> Self:
"""Create a new StrEnum instance."""
if not isinstance(value, str):
raise TypeError(f"{value!r} is not a string")
return super().__new__(cls, value, *args, **kwargs)
def __str__(self) -> str:
"""Return self.value."""
return self.value
@staticmethod
def _generate_next_value_(
name: str, start: int, count: int, last_values: list[Any]
) -> Any:
"""Make `auto()` explicitly unsupported.
We may revisit this when it's very clear that Python 3.11's
`StrEnum.auto()` behavior will no longer change.
"""
raise TypeError("auto() is not supported by this implementation")
__all__ = [
"StrEnum",
]

View File

@ -1,9 +1,7 @@
"""Provides the constants needed for component."""
from enum import IntFlag
from enum import IntFlag, StrEnum
from typing import Final
from homeassistant.backports.enum import StrEnum
DOMAIN: Final = "alarm_control_panel"
ATTR_CHANGED_BY: Final = "changed_by"

View File

@ -4,12 +4,12 @@ from __future__ import annotations
import asyncio
from collections.abc import AsyncIterable, Callable, Iterable
from dataclasses import asdict, dataclass, field
from enum import StrEnum
import logging
from typing import Any, cast
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.components import conversation, media_source, stt, tts, websocket_api
from homeassistant.components.tts.media_source import (
generate_media_source_id as tts_generate_media_source_id,

View File

@ -2,11 +2,10 @@
from __future__ import annotations
from dataclasses import dataclass, field
from enum import StrEnum
import webrtcvad
from homeassistant.backports.enum import StrEnum
_SAMPLE_RATE = 16000

View File

@ -3,12 +3,12 @@ from __future__ import annotations
from dataclasses import dataclass
from datetime import timedelta
from enum import StrEnum
import logging
from typing import Literal, final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant

View File

@ -1,10 +1,9 @@
"""Constants for Bravia TV integration."""
from __future__ import annotations
from enum import StrEnum
from typing import Final
from homeassistant.backports.enum import StrEnum
ATTR_CID: Final = "cid"
ATTR_MAC: Final = "macAddr"
ATTR_MANUFACTURER: Final = "Sony"

View File

@ -3,12 +3,12 @@ from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime, timedelta
from enum import StrEnum
import logging
from typing import final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.config_validation import ( # noqa: F401

View File

@ -1,8 +1,7 @@
"""Constants for Camera component."""
from enum import StrEnum
from typing import Final
from homeassistant.backports.enum import StrEnum
DOMAIN: Final = "camera"
DATA_CAMERA_PREFS: Final = "camera_prefs"

View File

@ -1,8 +1,6 @@
"""Provides the constants needed for component."""
from enum import IntFlag
from homeassistant.backports.enum import StrEnum
from enum import IntFlag, StrEnum
class HVACMode(StrEnum):

View File

@ -4,14 +4,13 @@ from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
from datetime import timedelta
from enum import IntFlag
from enum import IntFlag, StrEnum
import functools as ft
import logging
from typing import Any, ParamSpec, TypeVar, final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
SERVICE_CLOSE_COVER,

View File

@ -2,11 +2,10 @@
from __future__ import annotations
from datetime import timedelta
from enum import StrEnum
import logging
from typing import Final
from homeassistant.backports.enum import StrEnum
LOGGER: Final = logging.getLogger(__package__)
DOMAIN: Final = "device_tracker"

View File

@ -1,5 +1,5 @@
"""Constants for the Diagnostics integration."""
from homeassistant.backports.enum import StrEnum
from enum import StrEnum
DOMAIN = "diagnostics"

View File

@ -4,6 +4,7 @@ from __future__ import annotations
import asyncio
from collections.abc import Callable, Coroutine
from dataclasses import dataclass
from enum import StrEnum
import functools
from typing import Any, TypeVar, cast
@ -15,7 +16,6 @@ from async_upnp_client.exceptions import UpnpActionError, UpnpConnectionError, U
from async_upnp_client.profiles.dlna import ContentDirectoryErrorCode, DmsDevice
from didl_lite import didl_lite
from homeassistant.backports.enum import StrEnum
from homeassistant.backports.functools import cached_property
from homeassistant.components import ssdp
from homeassistant.components.media_player import BrowseError, MediaClass

View File

@ -3,10 +3,10 @@ from __future__ import annotations
from dataclasses import asdict, dataclass
from datetime import datetime, timedelta
from enum import StrEnum
import logging
from typing import Any, Self, final
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.config_validation import ( # noqa: F401

View File

@ -1,5 +1,6 @@
"""Constants for the FRITZ!Box Tools integration."""
from enum import StrEnum
from typing import Literal
from fritzconnection.core.exceptions import (
@ -13,7 +14,6 @@ from fritzconnection.core.exceptions import (
FritzServiceError,
)
from homeassistant.backports.enum import StrEnum
from homeassistant.const import Platform

View File

@ -1,6 +1,7 @@
"""Config flow for fritzbox_callmonitor."""
from __future__ import annotations
from enum import StrEnum
from typing import Any, cast
from fritzconnection import FritzConnection
@ -9,7 +10,6 @@ from requests.exceptions import ConnectionError as RequestsConnectionError
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.backports.enum import StrEnum
from homeassistant.const import (
CONF_HOST,
CONF_NAME,

View File

@ -1,7 +1,7 @@
"""Constants for the AVM Fritz!Box call monitor integration."""
from enum import StrEnum
from typing import Final
from homeassistant.backports.enum import StrEnum
from homeassistant.const import Platform

View File

@ -3,6 +3,7 @@ from __future__ import annotations
from collections.abc import Mapping
from datetime import datetime, timedelta
from enum import StrEnum
import logging
import queue
from threading import Event as ThreadingEvent, Thread
@ -11,7 +12,6 @@ from typing import Any, cast
from fritzconnection.core.fritzmonitor import FritzMonitor
from homeassistant.backports.enum import StrEnum
from homeassistant.components.sensor import SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_STOP

View File

@ -1,5 +1,5 @@
"""Hass.io const variables."""
from homeassistant.backports.enum import StrEnum
from enum import StrEnum
DOMAIN = "hassio"

View File

@ -3,12 +3,12 @@ from __future__ import annotations
from dataclasses import dataclass
from datetime import timedelta
from enum import StrEnum
import logging
from typing import Any, final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_MODE,

View File

@ -1,7 +1,5 @@
"""Provides the constants needed for component."""
from enum import IntFlag
from homeassistant.backports.enum import StrEnum
from enum import IntFlag, StrEnum
MODE_NORMAL = "normal"
MODE_ECO = "eco"

View File

@ -4,12 +4,12 @@ from __future__ import annotations
import asyncio
from dataclasses import dataclass
from datetime import timedelta
from enum import StrEnum
import logging
from typing import Any, Final, TypedDict, final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.components.camera import Image
from homeassistant.const import (
ATTR_ENTITY_ID,

View File

@ -5,14 +5,13 @@ from collections.abc import Iterable
import csv
import dataclasses
from datetime import timedelta
from enum import IntFlag
from enum import IntFlag, StrEnum
import logging
import os
from typing import Any, Self, cast, final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
SERVICE_TOGGLE,

View File

@ -5,10 +5,10 @@ from collections import defaultdict
from collections.abc import Mapping
import contextlib
from dataclasses import asdict, dataclass
from enum import StrEnum
import logging
from typing import Any, cast
from homeassistant.backports.enum import StrEnum
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.storage import Store
from homeassistant.helpers.typing import ConfigType

View File

@ -7,6 +7,7 @@ from collections.abc import Callable
from contextlib import suppress
from dataclasses import dataclass
import datetime as dt
from enum import StrEnum
import functools as ft
import hashlib
from http import HTTPStatus
@ -22,7 +23,6 @@ import async_timeout
import voluptuous as vol
from yarl import URL
from homeassistant.backports.enum import StrEnum
from homeassistant.components import websocket_api
from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView
from homeassistant.components.websocket_api import ERR_NOT_SUPPORTED, ERR_UNKNOWN_ERROR

View File

@ -1,7 +1,5 @@
"""Provides the constants needed for component."""
from enum import IntFlag
from homeassistant.backports.enum import StrEnum
from enum import IntFlag, StrEnum
# How long our auth signature on the content should be valid for
CONTENT_AUTH_EXPIRY_TIME = 3600 * 24

View File

@ -7,12 +7,12 @@ from collections import deque
from collections.abc import Callable, Coroutine
from dataclasses import dataclass, field
import datetime as dt
from enum import StrEnum
import logging
from typing import TYPE_CHECKING, Any, TypedDict
import attr
from homeassistant.backports.enum import StrEnum
from homeassistant.const import ATTR_ENTITY_ID, ATTR_NAME
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
from homeassistant.helpers import template

View File

@ -1,11 +1,11 @@
"""Provides the constants needed for the component."""
from __future__ import annotations
from enum import StrEnum
from typing import Final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_BILLION,

View File

@ -3,12 +3,12 @@ from __future__ import annotations
from collections.abc import Callable, Mapping
from datetime import datetime
from enum import StrEnum
import logging
from typing import Any, Final, TypedDict
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.components import websocket_api
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, ServiceCall, callback
from homeassistant.helpers import config_validation as cv, singleton

View File

@ -2,6 +2,7 @@
from __future__ import annotations
from dataclasses import dataclass
from enum import StrEnum
from typing import Any
from aioqsw.const import (
@ -14,7 +15,6 @@ from aioqsw.const import (
QSD_SYSTEM_BOARD,
)
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_URL
from homeassistant.core import callback

View File

@ -4,9 +4,9 @@ from __future__ import annotations
from collections.abc import Awaitable, Callable, Iterable
from dataclasses import dataclass
from datetime import timedelta
from enum import StrEnum
from typing import Any
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_registry as er

View File

@ -1,6 +1,7 @@
"""Recorder constants."""
from homeassistant.backports.enum import StrEnum
from enum import StrEnum
from homeassistant.const import ATTR_ATTRIBUTION, ATTR_RESTORED, ATTR_SUPPORTED_FEATURES
from homeassistant.helpers.json import ( # noqa: F401 pylint: disable=unused-import
JSON_DUMP,

View File

@ -1,11 +1,11 @@
"""Constants for sensor."""
from __future__ import annotations
from enum import StrEnum
from typing import Final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_BILLION,

View File

@ -1,14 +1,13 @@
"""Constants for the Shelly integration."""
from __future__ import annotations
from enum import StrEnum
from logging import Logger, getLogger
import re
from typing import Final
from awesomeversion import AwesomeVersion
from homeassistant.backports.enum import StrEnum
DOMAIN: Final = "shelly"
LOGGER: Logger = getLogger(__package__)

View File

@ -1,6 +1,7 @@
"""Support for Spotify media browsing."""
from __future__ import annotations
from enum import StrEnum
from functools import partial
import logging
from typing import Any
@ -8,7 +9,6 @@ from typing import Any
from spotipy import Spotify
import yarl
from homeassistant.backports.enum import StrEnum
from homeassistant.components.media_player import (
BrowseError,
BrowseMedia,

View File

@ -1,9 +1,8 @@
"""Constants for the Stookwijzer integration."""
from enum import StrEnum
import logging
from typing import Final
from homeassistant.backports.enum import StrEnum
DOMAIN: Final = "stookwijzer"
LOGGER = logging.getLogger(__package__)

View File

@ -3,11 +3,11 @@ from __future__ import annotations
from dataclasses import dataclass
from datetime import timedelta
from enum import StrEnum
import logging
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
SERVICE_TOGGLE,

View File

@ -1,7 +1,7 @@
"""Constants for the switchbot integration."""
from switchbot import SwitchbotModel
from enum import StrEnum
from homeassistant.backports.enum import StrEnum
from switchbot import SwitchbotModel
DOMAIN = "switchbot"
MANUFACTURER = "switchbot"

View File

@ -3,13 +3,13 @@ from __future__ import annotations
from dataclasses import asdict, dataclass
from datetime import timedelta
from enum import StrEnum
import logging
import re
from typing import Any, final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import MAX_LENGTH_STATE_STATE
from homeassistant.core import HomeAssistant, ServiceCall

View File

@ -1,9 +1,10 @@
"""Support for Tuya Alarm."""
from __future__ import annotations
from enum import StrEnum
from tuya_iot import TuyaDevice, TuyaDeviceManager
from homeassistant.backports.enum import StrEnum
from homeassistant.components.alarm_control_panel import (
AlarmControlPanelEntity,
AlarmControlPanelEntityDescription,

View File

@ -3,11 +3,11 @@ from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass, field
from enum import StrEnum
import logging
from tuya_iot import TuyaCloudOpenAPIEndpoint
from homeassistant.backports.enum import StrEnum
from homeassistant.components.sensor import SensorDeviceClass
from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,

View File

@ -3,6 +3,7 @@ from __future__ import annotations
from dataclasses import dataclass
from datetime import timedelta
from enum import StrEnum
from functools import lru_cache
import logging
from typing import Any, Final, final
@ -10,7 +11,6 @@ from typing import Any, Final, final
from awesomeversion import AwesomeVersion, AwesomeVersionCompareException
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.components import websocket_api
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import STATE_OFF, STATE_ON, EntityCategory

View File

@ -1,5 +1,5 @@
"""Constants for the Wallbox integration."""
from homeassistant.backports.enum import StrEnum
from enum import StrEnum
DOMAIN = "wallbox"

View File

@ -6,7 +6,7 @@ from collections.abc import Callable
from dataclasses import dataclass
import datetime
from datetime import timedelta
from enum import IntEnum
from enum import IntEnum, StrEnum
from http import HTTPStatus
import logging
import re
@ -27,7 +27,6 @@ from withings_api.common import (
query_measure_groups,
)
from homeassistant.backports.enum import StrEnum
from homeassistant.components import webhook
from homeassistant.components.application_credentials import AuthImplementation
from homeassistant.components.http import HomeAssistantView

View File

@ -1,5 +1,5 @@
"""Constants used by the Withings component."""
from homeassistant.backports.enum import StrEnum
from enum import StrEnum
CONF_PROFILES = "profiles"
CONF_USE_WEBHOOK = "use_webhook"

View File

@ -3,6 +3,7 @@ from __future__ import annotations
from collections.abc import Generator
from dataclasses import asdict, dataclass, field
from enum import StrEnum
from typing import TYPE_CHECKING, Any, cast
from awesomeversion import AwesomeVersion
@ -47,7 +48,6 @@ from zwave_js_server.model.value import (
Value as ZwaveValue,
)
from homeassistant.backports.enum import StrEnum
from homeassistant.const import EntityCategory, Platform
from homeassistant.core import callback
from homeassistant.helpers.device_registry import DeviceEntry

View File

@ -1,5 +1,6 @@
"""Constants for ZWaveMe."""
from homeassistant.backports.enum import StrEnum
from enum import StrEnum
from homeassistant.const import Platform
# Base component constants

View File

@ -6,7 +6,7 @@ from collections import ChainMap
from collections.abc import Callable, Coroutine, Generator, Iterable, Mapping
from contextvars import ContextVar
from copy import deepcopy
from enum import Enum
from enum import Enum, StrEnum
import functools
import logging
from random import randint
@ -14,7 +14,6 @@ from types import MappingProxyType
from typing import TYPE_CHECKING, Any, Self, TypeVar, cast
from . import data_entry_flow, loader
from .backports.enum import StrEnum
from .components import persistent_notification
from .const import EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STOP, Platform
from .core import CALLBACK_TYPE, CoreState, Event, HassJob, HomeAssistant, callback

View File

@ -1,10 +1,9 @@
"""Constants used by Home Assistant components."""
from __future__ import annotations
from enum import StrEnum
from typing import Final
from .backports.enum import StrEnum
APPLICATION_NAME: Final = "HomeAssistant"
MAJOR_VERSION: Final = 2023
MINOR_VERSION: Final = 8

View File

@ -43,7 +43,6 @@ import voluptuous as vol
import yarl
from . import block_async_io, loader, util
from .backports.enum import StrEnum
from .const import (
ATTR_DOMAIN,
ATTR_FRIENDLY_NAME,
@ -133,7 +132,7 @@ BLOCK_LOG_TIMEOUT = 60
ServiceResponse = JsonObjectType | None
class ConfigSource(StrEnum):
class ConfigSource(enum.StrEnum):
"""Source of core configuration."""
DEFAULT = "default"
@ -1669,7 +1668,7 @@ class StateMachine:
)
class SupportsResponse(StrEnum):
class SupportsResponse(enum.StrEnum):
"""Service call response configuration."""
NONE = "none"

View File

@ -5,13 +5,13 @@ import abc
from collections.abc import Callable, Iterable, Mapping
import copy
from dataclasses import dataclass
from enum import StrEnum
import logging
from types import MappingProxyType
from typing import Any, Required, TypedDict
import voluptuous as vol
from .backports.enum import StrEnum
from .core import HomeAssistant, callback
from .exceptions import HomeAssistantError
from .helpers.frame import report

View File

@ -9,7 +9,7 @@ from datetime import (
time as time_sys,
timedelta,
)
from enum import Enum
from enum import Enum, StrEnum
import inspect
import logging
from numbers import Number
@ -25,7 +25,6 @@ from uuid import UUID
import voluptuous as vol
import voluptuous_serialize
from homeassistant.backports.enum import StrEnum
from homeassistant.const import (
ATTR_AREA_ID,
ATTR_DEVICE_ID,

View File

@ -3,6 +3,7 @@ from __future__ import annotations
from collections import UserDict
from collections.abc import Coroutine, ValuesView
from enum import StrEnum
import logging
import time
from typing import TYPE_CHECKING, Any, TypeVar, cast
@ -10,7 +11,6 @@ from urllib.parse import urlparse
import attr
from homeassistant.backports.enum import StrEnum
from homeassistant.const import EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STOP
from homeassistant.core import Event, HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError

View File

@ -12,6 +12,7 @@ from __future__ import annotations
from collections import UserDict
from collections.abc import Callable, Iterable, Mapping, ValuesView
from datetime import datetime, timedelta
from enum import StrEnum
import logging
import time
from typing import TYPE_CHECKING, Any, TypeVar, cast
@ -19,7 +20,6 @@ from typing import TYPE_CHECKING, Any, TypeVar, cast
import attr
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.const import (
ATTR_DEVICE_CLASS,
ATTR_FRIENDLY_NAME,

View File

@ -3,12 +3,12 @@ from __future__ import annotations
import dataclasses
from datetime import datetime
from enum import StrEnum
import functools as ft
from typing import Any, cast
from awesomeversion import AwesomeVersion, AwesomeVersionStrategy
from homeassistant.backports.enum import StrEnum
from homeassistant.const import __version__ as ha_version
from homeassistant.core import HomeAssistant, callback
from homeassistant.util.async_ import run_callback_threadsafe

View File

@ -2,14 +2,13 @@
from __future__ import annotations
from collections.abc import Callable, Mapping, Sequence
from enum import IntFlag
from enum import IntFlag, StrEnum
from functools import cache
from typing import Any, Generic, Literal, Required, TypedDict, TypeVar, cast
from uuid import UUID
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.const import CONF_MODE, CONF_UNIT_OF_MEASUREMENT
from homeassistant.core import split_entity_id, valid_entity_id
from homeassistant.util import decorator

View File

@ -1,13 +1,12 @@
"""Helper to create SSL contexts."""
import contextlib
from enum import StrEnum
from functools import cache
from os import environ
import ssl
import certifi
from homeassistant.backports.enum import StrEnum
class SSLCipherList(StrEnum):
"""SSL cipher lists."""

View File

@ -18,6 +18,12 @@ class ObsoleteImportMatch:
_OBSOLETE_IMPORT: dict[str, list[ObsoleteImportMatch]] = {
"homeassistant.backports.enum": [
ObsoleteImportMatch(
reason="We can now use the Python 3.11 provided enum.StrEnum instead",
constant=re.compile(r"^StrEnum$"),
),
],
"homeassistant.components.alarm_control_panel": [
ObsoleteImportMatch(
reason="replaced by AlarmControlPanelEntityFeature enum",

View File

@ -1 +0,0 @@
"""The tests for the backports."""

View File

@ -1,35 +0,0 @@
"""Test Home Assistant enum utils."""
from enum import auto
import pytest
from homeassistant.backports.enum import StrEnum
def test_strenum() -> None:
"""Test StrEnum."""
class TestEnum(StrEnum):
Test = "test"
assert str(TestEnum.Test) == "test"
assert TestEnum.Test == "test"
assert TestEnum("test") is TestEnum.Test
assert TestEnum(TestEnum.Test) is TestEnum.Test
with pytest.raises(ValueError):
TestEnum(42)
with pytest.raises(ValueError):
TestEnum("str but unknown")
with pytest.raises(TypeError):
class FailEnum(StrEnum):
Test = 42
with pytest.raises(TypeError):
class FailEnum2(StrEnum):
Test = auto()

View File

@ -1,8 +1,9 @@
"""Test ESPHome enum mapper."""
from enum import StrEnum
from aioesphomeapi import APIIntEnum
from homeassistant.backports.enum import StrEnum
from homeassistant.components.esphome.enum_mapper import EsphomeEnumMapper

View File

@ -694,7 +694,7 @@ async def test_device_class(hass: HomeAssistant) -> None:
"""Test for device_class property."""
await setup_samsungtv_entry(hass, MOCK_CONFIG)
state = hass.states.get(ENTITY_ID)
assert state.attributes[ATTR_DEVICE_CLASS] is MediaPlayerDeviceClass.TV.value
assert state.attributes[ATTR_DEVICE_CLASS] == MediaPlayerDeviceClass.TV
@pytest.mark.usefixtures("rest_api")

View File

@ -489,7 +489,7 @@ async def test_device_class(
state = hass.states.get("sensor.energy_meter")
assert state is not None
assert state.state == "0"
assert state.attributes.get(ATTR_DEVICE_CLASS) is SensorDeviceClass.ENERGY.value
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.ENERGY
assert state.attributes.get(ATTR_STATE_CLASS) is SensorStateClass.TOTAL
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfEnergy.KILO_WATT_HOUR

View File

@ -1,10 +1,9 @@
"""Test enum helpers."""
from enum import Enum, IntEnum, IntFlag
from enum import Enum, IntEnum, IntFlag, StrEnum
from typing import Any
import pytest
from homeassistant.backports.enum import StrEnum
from homeassistant.util.enum import try_parse_enum