Move StrEnum to homeassistant.backports and move Platform to homeassistant.const (#60880)

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
This commit is contained in:
Marvin Wichmann 2021-12-03 09:31:17 +01:00 committed by GitHub
parent 3188a364e2
commit 707fe67c00
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 59 additions and 86 deletions

View file

@ -0,0 +1 @@
"""Backports from newer Python versions."""

View file

@ -1,4 +1,4 @@
"""Enum related utilities."""
"""Enum backports from standard lib."""
from __future__ import annotations
from enum import Enum

View file

@ -8,6 +8,7 @@ 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 STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant
@ -18,7 +19,6 @@ from homeassistant.helpers.config_validation import ( # noqa: F401
from homeassistant.helpers.entity import Entity, EntityDescription
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.typing import ConfigType, StateType
from homeassistant.util.enum import StrEnum
_LOGGER = logging.getLogger(__name__)

View file

@ -8,6 +8,7 @@ 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
@ -19,7 +20,6 @@ from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.typing import ConfigType
from homeassistant.util import dt as dt_util
from homeassistant.util.enum import StrEnum
from .const import DOMAIN, SERVICE_PRESS

View file

@ -9,6 +9,7 @@ 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 (
SERVICE_CLOSE_COVER,
@ -34,7 +35,6 @@ from homeassistant.helpers.config_validation import ( # noqa: F401
from homeassistant.helpers.entity import Entity, EntityDescription
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.loader import bind_hass
from homeassistant.util.enum import StrEnum
# mypy: allow-untyped-calls, allow-untyped-defs, no-check-untyped-defs

View file

@ -8,6 +8,7 @@ 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,
@ -26,7 +27,6 @@ from homeassistant.helpers.entity import ToggleEntity, ToggleEntityDescription
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.typing import ConfigType
from homeassistant.loader import bind_hass
from homeassistant.util.enum import StrEnum
from .const import ( # noqa: F401
ATTR_AVAILABLE_MODES,

View file

@ -22,6 +22,7 @@ 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.const import (
@ -63,7 +64,6 @@ from homeassistant.helpers.entity import Entity, EntityDescription
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.network import get_url
from homeassistant.loader import bind_hass
from homeassistant.util.enum import StrEnum
from .const import (
ATTR_APP_ID,

View file

@ -8,6 +8,7 @@ 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
from homeassistant.core import HomeAssistant, ServiceCall
@ -18,7 +19,6 @@ from homeassistant.helpers.config_validation import ( # noqa: F401
from homeassistant.helpers.entity import Entity, EntityDescription
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.typing import ConfigType
from homeassistant.util.enum import StrEnum
from .const import (
ATTR_MAX,

View file

@ -12,6 +12,7 @@ from typing import Any, Final, cast, final
import ciso8601
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( # noqa: F401
DEVICE_CLASS_AQI,
@ -53,7 +54,6 @@ from homeassistant.helpers.config_validation import ( # noqa: F401
from homeassistant.helpers.entity import Entity, EntityDescription
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.typing import ConfigType, StateType
from homeassistant.util.enum import StrEnum
from .const import CONF_STATE_CLASS # noqa: F401

View file

@ -8,6 +8,7 @@ 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 (
SERVICE_TOGGLE,
@ -24,7 +25,6 @@ from homeassistant.helpers.entity import ToggleEntity, ToggleEntityDescription
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.typing import ConfigType
from homeassistant.loader import bind_hass
from homeassistant.util.enum import StrEnum
DOMAIN = "switch"
SCAN_INTERVAL = timedelta(seconds=30)

View file

@ -2,8 +2,8 @@
from __future__ import annotations
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import Platform
from .const import DOMAIN
from .coordinator import WLEDDataUpdateCoordinator

View file

@ -3,6 +3,8 @@ from __future__ import annotations
from typing import Final
from homeassistant.backports.enum import StrEnum
MAJOR_VERSION: Final = 2021
MINOR_VERSION: Final = 12
PATCH_VERSION: Final = "0.dev0"
@ -16,6 +18,42 @@ REQUIRED_NEXT_PYTHON_HA_RELEASE: Final = "2022.1"
# Format for platform files
PLATFORM_FORMAT: Final = "{platform}.{domain}"
class Platform(StrEnum):
"""Available entity platforms."""
AIR_QUALITY = "air_quality"
ALARM_CONTROL_PANEL = "alarm_control_panel"
BINARY_SENSOR = "binary_sensor"
BUTTON = "button"
CALENDAR = "calendar"
CAMERA = "camera"
CLIMATE = "climate"
COVER = "cover"
DEVICE_TRACKER = "device_tracker"
FAN = "fan"
GEO_LOCATION = "geo_location"
HUMIDIFIER = "humidifier"
IMAGE_PROCESSING = "image_processing"
LIGHT = "light"
LOCK = "lock"
MAILBOX = "mailbox"
MEDIA_PLAYER = "media_player"
NOTIFY = "notify"
NUMBER = "number"
REMOTE = "remote"
SCENE = "scene"
SELECT = "select"
SENSOR = "sensor"
SIREN = "siren"
STT = "stt"
SWITCH = "switch"
TTS = "tts"
VACUUM = "vacuum"
WATER_HEATER = "water_heater"
WEATHER = "weather"
# Can be used to specify a catch all when registering state or event listeners.
MATCH_ALL: Final = "*"

View file

@ -8,13 +8,13 @@ from typing import TYPE_CHECKING, Any, NamedTuple, cast
import attr
from homeassistant.backports.enum import StrEnum
from homeassistant.const import EVENT_HOMEASSISTANT_STARTED
from homeassistant.core import Event, HomeAssistant, callback
from homeassistant.exceptions import RequiredParameterMissing
from homeassistant.helpers import storage
from homeassistant.helpers.frame import report
from homeassistant.loader import bind_hass
from homeassistant.util.enum import StrEnum
import homeassistant.util.uuid as uuid_util
from .debounce import Debouncer

View file

@ -15,6 +15,7 @@ from typing import Any, Final, Literal, TypedDict, final
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.config import DATA_CUSTOMIZE
from homeassistant.const import (
ATTR_ASSUMED_STATE,
@ -43,7 +44,6 @@ from homeassistant.helpers.event import Event, async_track_entity_registry_updat
from homeassistant.helpers.typing import StateType
from homeassistant.loader import bind_hass
from homeassistant.util import dt as dt_util, ensure_unique_string, slugify
from homeassistant.util.enum import StrEnum
_LOGGER = logging.getLogger(__name__)
SLOW_UPDATE_WARNING = 10

View file

@ -34,7 +34,6 @@ from homeassistant.exceptions import (
)
from homeassistant.setup import async_start_setup
from homeassistant.util.async_ import run_callback_threadsafe
from homeassistant.util.enum import StrEnum
from . import (
config_validation as cv,
@ -63,41 +62,6 @@ PLATFORM_NOT_READY_BASE_WAIT_TIME = 30 # seconds
_LOGGER = getLogger(__name__)
class Platform(StrEnum):
"""Available platforms."""
AIR_QUALITY = "air_quality"
ALARM_CONTROL_PANEL = "alarm_control_panel"
BINARY_SENSOR = "binary_sensor"
BUTTON = "button"
CALENDAR = "calendar"
CAMERA = "camera"
CLIMATE = "climate"
COVER = "cover"
DEVICE_TRACKER = "device_tracker"
FAN = "fan"
GEO_LOCATION = "geo_location"
HUMIDIFIER = "humidifier"
IMAGE_PROCESSING = "image_processing"
LIGHT = "light"
LOCK = "lock"
MAILBOX = "mailbox"
MEDIA_PLAYER = "media_player"
NOTIFY = "notify"
NUMBER = "number"
REMOTE = "remote"
SCENE = "scene"
SELECT = "select"
SENSOR = "sensor"
SIREN = "siren"
SST = "sst"
SWITCH = "switch"
TTS = "tts"
VACUUM = "vacuum"
WATER_HEATER = "water_heater"
WEATHER = "weather"
class AddEntitiesCallback(Protocol):
"""Protocol type for EntityPlatform.add_entities callback."""

View file

@ -17,6 +17,7 @@ from typing import TYPE_CHECKING, Any, cast
import attr
import voluptuous as vol
from homeassistant.backports.enum import StrEnum
from homeassistant.const import (
ATTR_DEVICE_CLASS,
ATTR_FRIENDLY_NAME,
@ -42,7 +43,6 @@ from homeassistant.helpers.device_registry import EVENT_DEVICE_REGISTRY_UPDATED
from homeassistant.helpers.frame import report
from homeassistant.loader import bind_hass
from homeassistant.util import slugify, uuid as uuid_util
from homeassistant.util.enum import StrEnum
from homeassistant.util.yaml import load_yaml
from .typing import UNDEFINED, UndefinedType

View file

@ -14,6 +14,7 @@ from homeassistant.const import (
EVENT_COMPONENT_LOADED,
EVENT_HOMEASSISTANT_START,
PLATFORM_FORMAT,
Platform,
)
from homeassistant.core import CALLBACK_TYPE
from homeassistant.exceptions import HomeAssistantError
@ -26,34 +27,7 @@ _LOGGER = logging.getLogger(__name__)
ATTR_COMPONENT = "component"
BASE_PLATFORMS = {
"air_quality",
"alarm_control_panel",
"binary_sensor",
"camera",
"calendar",
"climate",
"cover",
"device_tracker",
"fan",
"humidifier",
"image_processing",
"light",
"lock",
"media_player",
"notify",
"number",
"remote",
"scene",
"select",
"sensor",
"siren",
"switch",
"tts",
"vacuum",
"water_heater",
"weather",
}
BASE_PLATFORMS = {platform.value for platform in Platform}
DATA_SETUP_DONE = "setup_done"
DATA_SETUP_STARTED = "setup_started"

View file

@ -10,8 +10,6 @@ from typing import Any, cast
import ciso8601
from homeassistant.const import MATCH_ALL
if sys.version_info[:2] >= (3, 9):
import zoneinfo
else:
@ -215,7 +213,7 @@ def get_age(date: dt.datetime) -> str:
def parse_time_expression(parameter: Any, min_value: int, max_value: int) -> list[int]:
"""Parse the time expression part and return a list of times to match."""
if parameter is None or parameter == MATCH_ALL:
if parameter is None or parameter == "*":
res = list(range(min_value, max_value + 1))
elif isinstance(parameter, str):
if parameter.startswith("/"):

View file

@ -4,8 +4,8 @@ from __future__ import annotations
import ast
from pathlib import Path
from homeassistant.const import Platform
from homeassistant.requirements import DISCOVERY_INTEGRATIONS
from homeassistant.setup import BASE_PLATFORMS
from .model import Integration
@ -91,12 +91,11 @@ class ImportCollector(ast.NodeVisitor):
ALLOWED_USED_COMPONENTS = {
*{platform.value for platform in Platform},
# Internal integrations
"alert",
"automation",
"button",
"conversation",
"button",
"device_automation",
"frontend",
"group",
@ -119,8 +118,6 @@ ALLOWED_USED_COMPONENTS = {
"webhook",
"websocket_api",
"zone",
# Entity integrations with platforms
*BASE_PLATFORMS,
# Other
"mjpeg", # base class, has no reqs or component to load.
"stream", # Stream cannot install on all systems, can be imported without reqs.

View file

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

View file

@ -4,7 +4,7 @@ from enum import auto
import pytest
from homeassistant.util.enum import StrEnum
from homeassistant.backports.enum import StrEnum
def test_strenum():