Enable strict typing of deconz_device (#70341)

* Enable strict typing of deconz_device completing strict typing of deconz integration
This commit is contained in:
Robert Svensson 2022-04-22 09:19:35 +02:00 committed by GitHub
parent 74b50a8009
commit 69f4aeaf42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 253 deletions

View File

@ -63,27 +63,7 @@ homeassistant.components.canary.*
homeassistant.components.cover.*
homeassistant.components.crownstone.*
homeassistant.components.cpuspeed.*
homeassistant.components.deconz
homeassistant.components.deconz.alarm_control_panel
homeassistant.components.deconz.binary_sensor
homeassistant.components.deconz.button
homeassistant.components.deconz.climate
homeassistant.components.deconz.config_flow
homeassistant.components.deconz.cover
homeassistant.components.deconz.deconz_event
homeassistant.components.deconz.device_trigger
homeassistant.components.deconz.diagnostics
homeassistant.components.deconz.fan
homeassistant.components.deconz.gateway
homeassistant.components.deconz.light
homeassistant.components.deconz.lock
homeassistant.components.deconz.logbook
homeassistant.components.deconz.number
homeassistant.components.deconz.scene
homeassistant.components.deconz.sensor
homeassistant.components.deconz.services
homeassistant.components.deconz.siren
homeassistant.components.deconz.switch
homeassistant.components.deconz.*
homeassistant.components.device_automation.*
homeassistant.components.device_tracker.*
homeassistant.components.devolo_home_control.*

View File

@ -20,7 +20,7 @@ class DeconzBase:
def __init__(
self,
device: DeconzGroup | DeconzLight | DeconzSensor,
device: DeconzGroup | DeconzLight | DeconzSensor | PydeconzScene,
gateway: DeconzGateway,
) -> None:
"""Set up device and add update callback to get data from websocket."""
@ -30,19 +30,21 @@ class DeconzBase:
@property
def unique_id(self) -> str:
"""Return a unique identifier for this device."""
return self._device.unique_id
assert not isinstance(self._device, PydeconzScene)
return self._device.unique_id # type: ignore[no-any-return]
@property
def serial(self) -> str | None:
"""Return a serial number for this device."""
assert not isinstance(self._device, PydeconzScene)
if not self._device.unique_id or self._device.unique_id.count(":") != 7:
return None
return self._device.unique_id.split("-", 1)[0]
return self._device.unique_id.split("-", 1)[0] # type: ignore[no-any-return]
@property
def device_info(self) -> DeviceInfo | None:
"""Return a device description for device registry."""
assert not isinstance(self._device, PydeconzScene)
if self.serial is None:
return None
@ -66,7 +68,7 @@ class DeconzDevice(DeconzBase, Entity):
def __init__(
self,
device: DeconzGroup | DeconzLight | DeconzSensor,
device: DeconzGroup | DeconzLight | DeconzSensor | PydeconzScene,
gateway: DeconzGateway,
) -> None:
"""Set up device and add update callback to get data from websocket."""
@ -109,6 +111,8 @@ class DeconzDevice(DeconzBase, Entity):
@property
def available(self) -> bool:
"""Return True if device is available."""
if isinstance(self._device, PydeconzScene):
return self.gateway.available
return self.gateway.available and self._device.reachable
@ -117,7 +121,11 @@ class DeconzSceneMixin(DeconzDevice):
_device: PydeconzScene
def __init__(self, device: PydeconzScene, gateway: DeconzGateway) -> None:
def __init__(
self,
device: PydeconzScene,
gateway: DeconzGateway,
) -> None:
"""Set up a scene."""
super().__init__(device, gateway)
@ -132,11 +140,6 @@ class DeconzSceneMixin(DeconzDevice):
"""Describe a unique identifier for group this scene belongs to."""
return f"{self.gateway.bridgeid}-{self._device.group_deconz_id}"
@property
def available(self) -> bool:
"""Return True if scene is available."""
return self.gateway.available
@property
def unique_id(self) -> str:
"""Return a unique identifier for this scene."""

222
mypy.ini
View File

@ -495,227 +495,7 @@ no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.alarm_control_panel]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.binary_sensor]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.button]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.climate]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.config_flow]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.cover]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.deconz_event]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.device_trigger]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.diagnostics]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.fan]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.gateway]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.light]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.lock]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.logbook]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.number]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.scene]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.sensor]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.services]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.siren]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
no_implicit_optional = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.deconz.switch]
[mypy-homeassistant.components.deconz.*]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true