mirror of
https://github.com/home-assistant/core.git
synced 2025-08-01 09:38:21 +00:00
Add override decorators
Cross checked with mypy's explicit-override optional error code enabled.
This commit is contained in:
parent
427e5d81df
commit
942cbc6051
@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import Any
|
||||
from typing import Any, override
|
||||
|
||||
from huawei_lte_api.enums.cradle import ConnectionStatusEnum
|
||||
|
||||
@ -59,9 +59,11 @@ class HuaweiLteBaseBinarySensor(HuaweiLteBaseEntityWithDevice, BinarySensorEntit
|
||||
_raw_state: str | None = None
|
||||
|
||||
@property
|
||||
@override
|
||||
def _device_unique_id(self) -> str:
|
||||
return f"{self.key}.{self.item}"
|
||||
|
||||
@override
|
||||
async def async_added_to_hass(self) -> None:
|
||||
"""Subscribe to needed data on add."""
|
||||
await super().async_added_to_hass()
|
||||
@ -69,6 +71,7 @@ class HuaweiLteBaseBinarySensor(HuaweiLteBaseEntityWithDevice, BinarySensorEntit
|
||||
f"{BINARY_SENSOR_DOMAIN}/{self.item}"
|
||||
)
|
||||
|
||||
@override
|
||||
async def async_will_remove_from_hass(self) -> None:
|
||||
"""Unsubscribe from needed data on remove."""
|
||||
await super().async_will_remove_from_hass()
|
||||
@ -76,6 +79,7 @@ class HuaweiLteBaseBinarySensor(HuaweiLteBaseEntityWithDevice, BinarySensorEntit
|
||||
f"{BINARY_SENSOR_DOMAIN}/{self.item}"
|
||||
)
|
||||
|
||||
@override
|
||||
async def async_update(self) -> None:
|
||||
"""Update state."""
|
||||
try:
|
||||
@ -111,6 +115,7 @@ class HuaweiLteMobileConnectionBinarySensor(HuaweiLteBaseBinarySensor):
|
||||
item = "ConnectionStatus"
|
||||
|
||||
@property
|
||||
@override
|
||||
def is_on(self) -> bool:
|
||||
"""Return whether the binary sensor is on."""
|
||||
return bool(
|
||||
@ -120,6 +125,7 @@ class HuaweiLteMobileConnectionBinarySensor(HuaweiLteBaseBinarySensor):
|
||||
)
|
||||
|
||||
@property
|
||||
@override
|
||||
def assumed_state(self) -> bool:
|
||||
"""Return True if real state is assumed, not known."""
|
||||
return not self._raw_state or int(self._raw_state) not in (
|
||||
@ -129,6 +135,7 @@ class HuaweiLteMobileConnectionBinarySensor(HuaweiLteBaseBinarySensor):
|
||||
)
|
||||
|
||||
@property
|
||||
@override
|
||||
def extra_state_attributes(self) -> dict[str, Any] | None:
|
||||
"""Get additional attributes related to connection status."""
|
||||
attributes = {}
|
||||
@ -145,11 +152,13 @@ class HuaweiLteBaseWifiStatusBinarySensor(HuaweiLteBaseBinarySensor):
|
||||
_attr_device_class = BinarySensorDeviceClass.CONNECTIVITY
|
||||
|
||||
@property
|
||||
@override
|
||||
def is_on(self) -> bool:
|
||||
"""Return whether the binary sensor is on."""
|
||||
return self._raw_state is not None and int(self._raw_state) == 1
|
||||
|
||||
@property
|
||||
@override
|
||||
def assumed_state(self) -> bool:
|
||||
"""Return True if real state is assumed, not known."""
|
||||
return self._raw_state is None
|
||||
@ -191,11 +200,13 @@ class HuaweiLteSmsStorageFullBinarySensor(HuaweiLteBaseBinarySensor):
|
||||
item = "SmsStorageFull"
|
||||
|
||||
@property
|
||||
@override
|
||||
def is_on(self) -> bool:
|
||||
"""Return whether the binary sensor is on."""
|
||||
return self._raw_state is not None and int(self._raw_state) != 0
|
||||
|
||||
@property
|
||||
@override
|
||||
def assumed_state(self) -> bool:
|
||||
"""Return True if real state is assumed, not known."""
|
||||
return self._raw_state is None
|
||||
|
@ -3,6 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import override
|
||||
|
||||
from huawei_lte_api.enums.device import ControlModeEnum
|
||||
|
||||
@ -40,13 +41,16 @@ class BaseButton(HuaweiLteBaseEntityWithDevice, ButtonEntity):
|
||||
"""Huawei LTE button base class."""
|
||||
|
||||
@property
|
||||
@override
|
||||
def _device_unique_id(self) -> str:
|
||||
"""Return unique ID for entity within a router."""
|
||||
return f"button-{self.entity_description.key}"
|
||||
|
||||
@override
|
||||
async def async_update(self) -> None:
|
||||
"""Update is not necessary for button entities."""
|
||||
|
||||
@override
|
||||
def press(self) -> None:
|
||||
"""Press button."""
|
||||
if self.router.suspended:
|
||||
@ -74,6 +78,7 @@ class ClearTrafficStatisticsButton(BaseButton):
|
||||
entity_category=EntityCategory.CONFIG,
|
||||
)
|
||||
|
||||
@override
|
||||
def _press(self) -> str:
|
||||
"""Call clear traffic statistics endpoint."""
|
||||
return self.router.client.monitoring.set_clear_traffic()
|
||||
@ -92,6 +97,7 @@ class RestartButton(BaseButton):
|
||||
entity_category=EntityCategory.CONFIG,
|
||||
)
|
||||
|
||||
@override
|
||||
def _press(self) -> str:
|
||||
"""Call restart endpoint."""
|
||||
return self.router.client.device.set_control(ControlModeEnum.REBOOT)
|
||||
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
||||
|
||||
from collections.abc import Mapping
|
||||
import logging
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from typing import TYPE_CHECKING, Any, override
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from huawei_lte_api.Client import Client
|
||||
@ -75,6 +75,7 @@ class HuaweiLteConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
|
||||
@staticmethod
|
||||
@callback
|
||||
@override
|
||||
def async_get_options_flow(
|
||||
config_entry: ConfigEntry,
|
||||
) -> HuaweiLteOptionsFlow:
|
||||
@ -194,6 +195,7 @@ class HuaweiLteConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
except Exception:
|
||||
_LOGGER.exception("Disconnect error")
|
||||
|
||||
@override
|
||||
async def async_step_user(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> ConfigFlowResult:
|
||||
@ -272,6 +274,7 @@ class HuaweiLteConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
|
||||
return self.async_create_entry(title=title, data=user_input)
|
||||
|
||||
@override
|
||||
async def async_step_ssdp(
|
||||
self, discovery_info: SsdpServiceInfo
|
||||
) -> ConfigFlowResult:
|
||||
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import re
|
||||
from typing import Any, cast
|
||||
from typing import Any, cast, override
|
||||
|
||||
from stringcase import snakecase
|
||||
|
||||
@ -186,39 +186,47 @@ class HuaweiLteScannerEntity(HuaweiLteBaseEntity, ScannerEntity):
|
||||
self._mac_address = mac_address
|
||||
|
||||
@property
|
||||
@override
|
||||
def name(self) -> str:
|
||||
"""Return the name of the entity."""
|
||||
return self.hostname or self.mac_address
|
||||
|
||||
@property
|
||||
@override
|
||||
def _device_unique_id(self) -> str:
|
||||
return self.mac_address
|
||||
|
||||
@property
|
||||
@override
|
||||
def ip_address(self) -> str | None:
|
||||
"""Return the primary ip address of the device."""
|
||||
return self._ip_address
|
||||
|
||||
@property
|
||||
@override
|
||||
def mac_address(self) -> str:
|
||||
"""Return the mac address of the device."""
|
||||
return self._mac_address
|
||||
|
||||
@property
|
||||
@override
|
||||
def hostname(self) -> str | None:
|
||||
"""Return hostname of the device."""
|
||||
return self._hostname
|
||||
|
||||
@property
|
||||
@override
|
||||
def is_connected(self) -> bool:
|
||||
"""Get whether the entity is connected."""
|
||||
return self._is_connected
|
||||
|
||||
@property
|
||||
@override
|
||||
def extra_state_attributes(self) -> dict[str, Any]:
|
||||
"""Get additional attributes related to entity state."""
|
||||
return self._extra_state_attributes
|
||||
|
||||
@override
|
||||
async def async_update(self) -> None:
|
||||
"""Update state."""
|
||||
if (hosts := _get_hosts(self.router)) is None:
|
||||
|
@ -3,6 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import timedelta
|
||||
from typing import override
|
||||
|
||||
from homeassistant.helpers.device_registry import DeviceInfo
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
@ -31,11 +32,13 @@ class HuaweiLteBaseEntity(Entity):
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@override
|
||||
def unique_id(self) -> str:
|
||||
"""Return unique ID for entity."""
|
||||
return f"{self.router.config_entry.unique_id}-{self._device_unique_id}"
|
||||
|
||||
@property
|
||||
@override
|
||||
def available(self) -> bool:
|
||||
"""Return whether the entity is available."""
|
||||
return self._available
|
||||
@ -44,6 +47,7 @@ class HuaweiLteBaseEntity(Entity):
|
||||
"""Update state."""
|
||||
raise NotImplementedError
|
||||
|
||||
@override
|
||||
async def async_added_to_hass(self) -> None:
|
||||
"""Connect to update signals."""
|
||||
self.async_on_remove(
|
||||
@ -60,6 +64,7 @@ class HuaweiLteBaseEntityWithDevice(HuaweiLteBaseEntity):
|
||||
"""Base entity with device info."""
|
||||
|
||||
@property
|
||||
@override
|
||||
def device_info(self) -> DeviceInfo:
|
||||
"""Get info for matching with parent router."""
|
||||
return DeviceInfo(
|
||||
|
@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import Any
|
||||
from typing import Any, override
|
||||
|
||||
from huawei_lte_api.exceptions import ResponseErrorException
|
||||
|
||||
@ -41,6 +41,7 @@ class HuaweiLteSmsNotificationService(BaseNotificationService):
|
||||
self.router = router
|
||||
self.default_targets = default_targets
|
||||
|
||||
@override
|
||||
def send_message(self, message: str = "", **kwargs: Any) -> None:
|
||||
"""Send message to target numbers."""
|
||||
|
||||
|
@ -6,6 +6,7 @@ from collections.abc import Callable
|
||||
from dataclasses import dataclass
|
||||
from functools import partial
|
||||
import logging
|
||||
from typing import override
|
||||
|
||||
from huawei_lte_api.enums.net import LTEBandEnum, NetworkBandEnum, NetworkModeEnum
|
||||
|
||||
@ -100,29 +101,35 @@ class HuaweiLteSelectEntity(HuaweiLteBaseEntityWithDevice, SelectEntity):
|
||||
name = self.entity_description.name
|
||||
self._attr_name = name or self.item
|
||||
|
||||
@override
|
||||
def select_option(self, option: str) -> None:
|
||||
"""Change the selected option."""
|
||||
self.entity_description.setter_fn(option)
|
||||
|
||||
@property
|
||||
@override
|
||||
def current_option(self) -> str | None:
|
||||
"""Return current option."""
|
||||
return self._raw_state
|
||||
|
||||
@property
|
||||
@override
|
||||
def _device_unique_id(self) -> str:
|
||||
return f"{self.key}.{self.item}"
|
||||
|
||||
@override
|
||||
async def async_added_to_hass(self) -> None:
|
||||
"""Subscribe to needed data on add."""
|
||||
await super().async_added_to_hass()
|
||||
self.router.subscriptions[self.key].append(f"{SELECT_DOMAIN}/{self.item}")
|
||||
|
||||
@override
|
||||
async def async_will_remove_from_hass(self) -> None:
|
||||
"""Unsubscribe from needed data on remove."""
|
||||
await super().async_will_remove_from_hass()
|
||||
self.router.subscriptions[self.key].remove(f"{SELECT_DOMAIN}/{self.item}")
|
||||
|
||||
@override
|
||||
async def async_update(self) -> None:
|
||||
"""Update state."""
|
||||
try:
|
||||
|
@ -8,6 +8,7 @@ from dataclasses import dataclass
|
||||
from datetime import datetime, timedelta
|
||||
import logging
|
||||
import re
|
||||
from typing import override
|
||||
|
||||
from homeassistant.components.sensor import (
|
||||
DOMAIN as SENSOR_DOMAIN,
|
||||
@ -790,6 +791,7 @@ class HuaweiLteSensor(HuaweiLteBaseEntityWithDevice, SensorEntity):
|
||||
self.item = item
|
||||
self.entity_description = entity_description
|
||||
|
||||
@override
|
||||
async def async_added_to_hass(self) -> None:
|
||||
"""Subscribe to needed data on add."""
|
||||
await super().async_added_to_hass()
|
||||
@ -799,6 +801,7 @@ class HuaweiLteSensor(HuaweiLteBaseEntityWithDevice, SensorEntity):
|
||||
f"{SENSOR_DOMAIN}/{self.entity_description.last_reset_item}"
|
||||
)
|
||||
|
||||
@override
|
||||
async def async_will_remove_from_hass(self) -> None:
|
||||
"""Unsubscribe from needed data on remove."""
|
||||
await super().async_will_remove_from_hass()
|
||||
@ -809,15 +812,18 @@ class HuaweiLteSensor(HuaweiLteBaseEntityWithDevice, SensorEntity):
|
||||
)
|
||||
|
||||
@property
|
||||
@override
|
||||
def _device_unique_id(self) -> str:
|
||||
return f"{self.key}.{self.item}"
|
||||
|
||||
@property
|
||||
@override
|
||||
def native_value(self) -> StateType:
|
||||
"""Return sensor state."""
|
||||
return self._state
|
||||
|
||||
@property
|
||||
@override
|
||||
def native_unit_of_measurement(self) -> str | None:
|
||||
"""Return sensor's unit of measurement."""
|
||||
return self.entity_description.native_unit_of_measurement or self._unit
|
||||
@ -830,6 +836,7 @@ class HuaweiLteSensor(HuaweiLteBaseEntityWithDevice, SensorEntity):
|
||||
return super().icon
|
||||
|
||||
@property
|
||||
@override
|
||||
def device_class(self) -> SensorDeviceClass | None:
|
||||
"""Return device class for sensor."""
|
||||
if self.entity_description.device_class_fn:
|
||||
@ -838,10 +845,12 @@ class HuaweiLteSensor(HuaweiLteBaseEntityWithDevice, SensorEntity):
|
||||
return super().device_class
|
||||
|
||||
@property
|
||||
@override
|
||||
def last_reset(self) -> datetime | None:
|
||||
"""Return the time when the sensor was last reset, if any."""
|
||||
return self._last_reset
|
||||
|
||||
@override
|
||||
async def async_update(self) -> None:
|
||||
"""Update state."""
|
||||
try:
|
||||
|
@ -3,7 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import Any
|
||||
from typing import Any, override
|
||||
|
||||
from homeassistant.components.switch import (
|
||||
DOMAIN as SWITCH_DOMAIN,
|
||||
@ -55,24 +55,29 @@ class HuaweiLteBaseSwitch(HuaweiLteBaseEntityWithDevice, SwitchEntity):
|
||||
def _turn(self, state: bool) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
@override
|
||||
def turn_on(self, **kwargs: Any) -> None:
|
||||
"""Turn switch on."""
|
||||
self._turn(state=True)
|
||||
|
||||
@override
|
||||
def turn_off(self, **kwargs: Any) -> None:
|
||||
"""Turn switch off."""
|
||||
self._turn(state=False)
|
||||
|
||||
@override
|
||||
async def async_added_to_hass(self) -> None:
|
||||
"""Subscribe to needed data on add."""
|
||||
await super().async_added_to_hass()
|
||||
self.router.subscriptions[self.key].append(f"{SWITCH_DOMAIN}/{self.item}")
|
||||
|
||||
@override
|
||||
async def async_will_remove_from_hass(self) -> None:
|
||||
"""Unsubscribe from needed data on remove."""
|
||||
await super().async_will_remove_from_hass()
|
||||
self.router.subscriptions[self.key].remove(f"{SWITCH_DOMAIN}/{self.item}")
|
||||
|
||||
@override
|
||||
async def async_update(self) -> None:
|
||||
"""Update state."""
|
||||
try:
|
||||
@ -94,14 +99,17 @@ class HuaweiLteMobileDataSwitch(HuaweiLteBaseSwitch):
|
||||
item = "dataswitch"
|
||||
|
||||
@property
|
||||
@override
|
||||
def _device_unique_id(self) -> str:
|
||||
return f"{self.key}.{self.item}"
|
||||
|
||||
@property
|
||||
@override
|
||||
def is_on(self) -> bool:
|
||||
"""Return whether the switch is on."""
|
||||
return self._raw_state == "1"
|
||||
|
||||
@override
|
||||
def _turn(self, state: bool) -> None:
|
||||
value = 1 if state else 0
|
||||
self.router.client.dial_up.set_mobile_dataswitch(dataswitch=value)
|
||||
@ -118,20 +126,24 @@ class HuaweiLteWifiGuestNetworkSwitch(HuaweiLteBaseSwitch):
|
||||
item = "WifiEnable"
|
||||
|
||||
@property
|
||||
@override
|
||||
def _device_unique_id(self) -> str:
|
||||
return f"{self.key}.{self.item}"
|
||||
|
||||
@property
|
||||
@override
|
||||
def is_on(self) -> bool:
|
||||
"""Return whether the switch is on."""
|
||||
return self._raw_state == "1"
|
||||
|
||||
@override
|
||||
def _turn(self, state: bool) -> None:
|
||||
self.router.client.wlan.wifi_guest_network_switch(state)
|
||||
self._raw_state = "1" if state else "0"
|
||||
self.schedule_update_ha_state()
|
||||
|
||||
@property
|
||||
@override
|
||||
def extra_state_attributes(self) -> dict[str, str | None]:
|
||||
"""Return the state attributes."""
|
||||
return {"ssid": self.router.data[self.key].get("WifiSsid")}
|
||||
|
Loading…
x
Reference in New Issue
Block a user