From 0e22047712ea35d15b5d1bb4bb85d59db7b7c6f2 Mon Sep 17 00:00:00 2001 From: epenet Date: Fri, 24 Dec 2021 11:00:17 +0000 Subject: [PATCH 1/3] Add basic type hints to ads --- homeassistant/components/ads/__init__.py | 38 ++++++++++--------- homeassistant/components/ads/binary_sensor.py | 3 +- homeassistant/components/ads/cover.py | 3 +- homeassistant/components/ads/light.py | 3 +- homeassistant/components/ads/sensor.py | 3 +- homeassistant/components/ads/switch.py | 3 +- 6 files changed, 30 insertions(+), 23 deletions(-) diff --git a/homeassistant/components/ads/__init__.py b/homeassistant/components/ads/__init__.py index 53687564cd2880..027bb4bb52c2ce 100644 --- a/homeassistant/components/ads/__init__.py +++ b/homeassistant/components/ads/__init__.py @@ -16,8 +16,10 @@ CONF_PORT, EVENT_HOMEASSISTANT_STOP, ) +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity +from homeassistant.helpers.typing import ConfigType _LOGGER = logging.getLogger(__name__) @@ -77,7 +79,7 @@ ) -def setup(hass, config): +def setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the ADS component.""" conf = config[DOMAIN] @@ -88,23 +90,6 @@ def setup(hass, config): client = pyads.Connection(net_id, port, ip_address) - AdsHub.ADS_TYPEMAP = { - ADSTYPE_BOOL: pyads.PLCTYPE_BOOL, - ADSTYPE_BYTE: pyads.PLCTYPE_BYTE, - ADSTYPE_DINT: pyads.PLCTYPE_DINT, - ADSTYPE_INT: pyads.PLCTYPE_INT, - ADSTYPE_UDINT: pyads.PLCTYPE_UDINT, - ADSTYPE_UINT: pyads.PLCTYPE_UINT, - } - - AdsHub.ADSError = pyads.ADSError - AdsHub.PLCTYPE_BOOL = pyads.PLCTYPE_BOOL - AdsHub.PLCTYPE_BYTE = pyads.PLCTYPE_BYTE - AdsHub.PLCTYPE_DINT = pyads.PLCTYPE_DINT - AdsHub.PLCTYPE_INT = pyads.PLCTYPE_INT - AdsHub.PLCTYPE_UDINT = pyads.PLCTYPE_UDINT - AdsHub.PLCTYPE_UINT = pyads.PLCTYPE_UINT - try: ads = AdsHub(client) except pyads.ADSError: @@ -149,6 +134,23 @@ def handle_write_data_by_name(call): class AdsHub: """Representation of an ADS connection.""" + ADS_TYPEMAP = { + ADSTYPE_BOOL: pyads.PLCTYPE_BOOL, + ADSTYPE_BYTE: pyads.PLCTYPE_BYTE, + ADSTYPE_DINT: pyads.PLCTYPE_DINT, + ADSTYPE_INT: pyads.PLCTYPE_INT, + ADSTYPE_UDINT: pyads.PLCTYPE_UDINT, + ADSTYPE_UINT: pyads.PLCTYPE_UINT, + } + + ADSError = pyads.ADSError + PLCTYPE_BOOL = pyads.PLCTYPE_BOOL + PLCTYPE_BYTE = pyads.PLCTYPE_BYTE + PLCTYPE_DINT = pyads.PLCTYPE_DINT + PLCTYPE_INT = pyads.PLCTYPE_INT + PLCTYPE_UDINT = pyads.PLCTYPE_UDINT + PLCTYPE_UINT = pyads.PLCTYPE_UINT + def __init__(self, ads_client): """Initialize the ADS hub.""" self._client = ads_client diff --git a/homeassistant/components/ads/binary_sensor.py b/homeassistant/components/ads/binary_sensor.py index 0cdec25313f26c..ab729b8ed0031e 100644 --- a/homeassistant/components/ads/binary_sensor.py +++ b/homeassistant/components/ads/binary_sensor.py @@ -8,6 +8,7 @@ BinarySensorEntity, ) from homeassistant.const import CONF_DEVICE_CLASS, CONF_NAME +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from . import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE, AdsEntity @@ -22,7 +23,7 @@ ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): """Set up the Binary Sensor platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) diff --git a/homeassistant/components/ads/cover.py b/homeassistant/components/ads/cover.py index 976bfd58feda43..d2558770c77f8f 100644 --- a/homeassistant/components/ads/cover.py +++ b/homeassistant/components/ads/cover.py @@ -12,6 +12,7 @@ CoverEntity, ) from homeassistant.const import CONF_DEVICE_CLASS, CONF_NAME +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from . import ( @@ -44,7 +45,7 @@ ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): """Set up the cover platform for ADS.""" ads_hub = hass.data[DATA_ADS] diff --git a/homeassistant/components/ads/light.py b/homeassistant/components/ads/light.py index fd6b5e66482125..4e5c9fb26a1e81 100644 --- a/homeassistant/components/ads/light.py +++ b/homeassistant/components/ads/light.py @@ -10,6 +10,7 @@ LightEntity, ) from homeassistant.const import CONF_NAME +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from . import ( @@ -31,7 +32,7 @@ ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): """Set up the light platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) diff --git a/homeassistant/components/ads/sensor.py b/homeassistant/components/ads/sensor.py index 26b04d8605040b..26e5625fce524b 100644 --- a/homeassistant/components/ads/sensor.py +++ b/homeassistant/components/ads/sensor.py @@ -4,6 +4,7 @@ from homeassistant.components import ads from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from homeassistant.helpers.typing import StateType @@ -29,7 +30,7 @@ ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): """Set up an ADS sensor device.""" ads_hub = hass.data.get(ads.DATA_ADS) diff --git a/homeassistant/components/ads/switch.py b/homeassistant/components/ads/switch.py index 4888c876e1df83..9c14db09e67add 100644 --- a/homeassistant/components/ads/switch.py +++ b/homeassistant/components/ads/switch.py @@ -3,6 +3,7 @@ from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchEntity from homeassistant.const import CONF_NAME +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from . import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE, AdsEntity @@ -17,7 +18,7 @@ ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): """Set up switch platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) From 4ab6db6c581863068e6066a12c343dcbbcc68d14 Mon Sep 17 00:00:00 2001 From: epenet Date: Fri, 24 Dec 2021 11:25:01 +0000 Subject: [PATCH 2/3] Adjust setup_platform --- homeassistant/components/ads/binary_sensor.py | 11 ++++++++++- homeassistant/components/ads/cover.py | 11 ++++++++++- homeassistant/components/ads/light.py | 9 ++++++++- homeassistant/components/ads/sensor.py | 12 ++++++++++-- homeassistant/components/ads/switch.py | 11 ++++++++++- 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/ads/binary_sensor.py b/homeassistant/components/ads/binary_sensor.py index ab729b8ed0031e..952562b49ecb53 100644 --- a/homeassistant/components/ads/binary_sensor.py +++ b/homeassistant/components/ads/binary_sensor.py @@ -1,4 +1,6 @@ """Support for ADS binary sensors.""" +from __future__ import annotations + import voluptuous as vol from homeassistant.components.binary_sensor import ( @@ -10,6 +12,8 @@ from homeassistant.const import CONF_DEVICE_CLASS, CONF_NAME from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from . import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE, AdsEntity @@ -23,7 +27,12 @@ ) -def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Binary Sensor platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) diff --git a/homeassistant/components/ads/cover.py b/homeassistant/components/ads/cover.py index d2558770c77f8f..636b0f77ef0bd0 100644 --- a/homeassistant/components/ads/cover.py +++ b/homeassistant/components/ads/cover.py @@ -1,4 +1,6 @@ """Support for ADS covers.""" +from __future__ import annotations + import voluptuous as vol from homeassistant.components.cover import ( @@ -14,6 +16,8 @@ from homeassistant.const import CONF_DEVICE_CLASS, CONF_NAME from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from . import ( CONF_ADS_VAR, @@ -45,7 +49,12 @@ ) -def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the cover platform for ADS.""" ads_hub = hass.data[DATA_ADS] diff --git a/homeassistant/components/ads/light.py b/homeassistant/components/ads/light.py index 4e5c9fb26a1e81..2508d4866658ea 100644 --- a/homeassistant/components/ads/light.py +++ b/homeassistant/components/ads/light.py @@ -12,6 +12,8 @@ from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from . import ( CONF_ADS_VAR, @@ -32,7 +34,12 @@ ) -def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the light platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) diff --git a/homeassistant/components/ads/sensor.py b/homeassistant/components/ads/sensor.py index 26e5625fce524b..c0966535a841e2 100644 --- a/homeassistant/components/ads/sensor.py +++ b/homeassistant/components/ads/sensor.py @@ -1,4 +1,6 @@ """Support for ADS sensors.""" +from __future__ import annotations + import voluptuous as vol from homeassistant.components import ads @@ -6,7 +8,8 @@ from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.typing import StateType +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, StateType from . import CONF_ADS_FACTOR, CONF_ADS_TYPE, CONF_ADS_VAR, STATE_KEY_STATE, AdsEntity @@ -30,7 +33,12 @@ ) -def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up an ADS sensor device.""" ads_hub = hass.data.get(ads.DATA_ADS) diff --git a/homeassistant/components/ads/switch.py b/homeassistant/components/ads/switch.py index 9c14db09e67add..cea4655ca29c73 100644 --- a/homeassistant/components/ads/switch.py +++ b/homeassistant/components/ads/switch.py @@ -1,10 +1,14 @@ """Support for ADS switch platform.""" +from __future__ import annotations + import voluptuous as vol from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchEntity from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from . import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE, AdsEntity @@ -18,7 +22,12 @@ ) -def setup_platform(hass: HomeAssistant, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up switch platform for ADS.""" ads_hub = hass.data.get(DATA_ADS) From 7ac21cc834510b90a167697dfb62beb40757182f Mon Sep 17 00:00:00 2001 From: epenet Date: Fri, 24 Dec 2021 13:22:39 +0000 Subject: [PATCH 3/3] Revert changes to __init__.py --- homeassistant/components/ads/__init__.py | 38 +++++++++++------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/ads/__init__.py b/homeassistant/components/ads/__init__.py index 027bb4bb52c2ce..53687564cd2880 100644 --- a/homeassistant/components/ads/__init__.py +++ b/homeassistant/components/ads/__init__.py @@ -16,10 +16,8 @@ CONF_PORT, EVENT_HOMEASSISTANT_STOP, ) -from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity -from homeassistant.helpers.typing import ConfigType _LOGGER = logging.getLogger(__name__) @@ -79,7 +77,7 @@ ) -def setup(hass: HomeAssistant, config: ConfigType) -> bool: +def setup(hass, config): """Set up the ADS component.""" conf = config[DOMAIN] @@ -90,6 +88,23 @@ def setup(hass: HomeAssistant, config: ConfigType) -> bool: client = pyads.Connection(net_id, port, ip_address) + AdsHub.ADS_TYPEMAP = { + ADSTYPE_BOOL: pyads.PLCTYPE_BOOL, + ADSTYPE_BYTE: pyads.PLCTYPE_BYTE, + ADSTYPE_DINT: pyads.PLCTYPE_DINT, + ADSTYPE_INT: pyads.PLCTYPE_INT, + ADSTYPE_UDINT: pyads.PLCTYPE_UDINT, + ADSTYPE_UINT: pyads.PLCTYPE_UINT, + } + + AdsHub.ADSError = pyads.ADSError + AdsHub.PLCTYPE_BOOL = pyads.PLCTYPE_BOOL + AdsHub.PLCTYPE_BYTE = pyads.PLCTYPE_BYTE + AdsHub.PLCTYPE_DINT = pyads.PLCTYPE_DINT + AdsHub.PLCTYPE_INT = pyads.PLCTYPE_INT + AdsHub.PLCTYPE_UDINT = pyads.PLCTYPE_UDINT + AdsHub.PLCTYPE_UINT = pyads.PLCTYPE_UINT + try: ads = AdsHub(client) except pyads.ADSError: @@ -134,23 +149,6 @@ def handle_write_data_by_name(call): class AdsHub: """Representation of an ADS connection.""" - ADS_TYPEMAP = { - ADSTYPE_BOOL: pyads.PLCTYPE_BOOL, - ADSTYPE_BYTE: pyads.PLCTYPE_BYTE, - ADSTYPE_DINT: pyads.PLCTYPE_DINT, - ADSTYPE_INT: pyads.PLCTYPE_INT, - ADSTYPE_UDINT: pyads.PLCTYPE_UDINT, - ADSTYPE_UINT: pyads.PLCTYPE_UINT, - } - - ADSError = pyads.ADSError - PLCTYPE_BOOL = pyads.PLCTYPE_BOOL - PLCTYPE_BYTE = pyads.PLCTYPE_BYTE - PLCTYPE_DINT = pyads.PLCTYPE_DINT - PLCTYPE_INT = pyads.PLCTYPE_INT - PLCTYPE_UDINT = pyads.PLCTYPE_UDINT - PLCTYPE_UINT = pyads.PLCTYPE_UINT - def __init__(self, ads_client): """Initialize the ADS hub.""" self._client = ads_client