Add type hints for MQTT tag (#81495)
* Improve typing tag * Additional type hints for tag platform * Follow up comment tag * Folow up comments * Revert comment removalpull/81771/head
parent
88faf33cb8
commit
8c0a7b9d7f
|
@ -1,6 +1,7 @@
|
||||||
"""Provides tag scanning for MQTT."""
|
"""Provides tag scanning for MQTT."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections.abc import Callable
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
@ -9,11 +10,12 @@ from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_DEVICE, CONF_PLATFORM, CONF_VALUE_TEMPLATE
|
from homeassistant.const import CONF_DEVICE, CONF_PLATFORM, CONF_VALUE_TEMPLATE
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||||
|
|
||||||
from . import subscription
|
from . import subscription
|
||||||
from .config import MQTT_BASE_SCHEMA
|
from .config import MQTT_BASE_SCHEMA
|
||||||
from .const import ATTR_DISCOVERY_HASH, CONF_QOS, CONF_TOPIC
|
from .const import ATTR_DISCOVERY_HASH, CONF_QOS, CONF_TOPIC
|
||||||
|
from .discovery import MQTTDiscoveryPayload
|
||||||
from .mixins import (
|
from .mixins import (
|
||||||
MQTT_ENTITY_DEVICE_INFO_SCHEMA,
|
MQTT_ENTITY_DEVICE_INFO_SCHEMA,
|
||||||
MqttDiscoveryDeviceUpdate,
|
MqttDiscoveryDeviceUpdate,
|
||||||
|
@ -21,7 +23,7 @@ from .mixins import (
|
||||||
send_discovery_done,
|
send_discovery_done,
|
||||||
update_device,
|
update_device,
|
||||||
)
|
)
|
||||||
from .models import MqttValueTemplate, ReceiveMessage
|
from .models import MqttValueTemplate, ReceiveMessage, ReceivePayloadType
|
||||||
from .subscription import EntitySubscription
|
from .subscription import EntitySubscription
|
||||||
from .util import get_mqtt_data, valid_subscribe_topic
|
from .util import get_mqtt_data, valid_subscribe_topic
|
||||||
|
|
||||||
|
@ -87,12 +89,14 @@ def async_has_tags(hass: HomeAssistant, device_id: str) -> bool:
|
||||||
class MQTTTagScanner(MqttDiscoveryDeviceUpdate):
|
class MQTTTagScanner(MqttDiscoveryDeviceUpdate):
|
||||||
"""MQTT Tag scanner."""
|
"""MQTT Tag scanner."""
|
||||||
|
|
||||||
|
_value_template: Callable[[ReceivePayloadType, str], ReceivePayloadType]
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
device_id: str | None,
|
device_id: str | None,
|
||||||
discovery_data: dict,
|
discovery_data: DiscoveryInfoType,
|
||||||
config_entry: ConfigEntry,
|
config_entry: ConfigEntry,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize."""
|
"""Initialize."""
|
||||||
|
@ -111,10 +115,10 @@ class MQTTTagScanner(MqttDiscoveryDeviceUpdate):
|
||||||
self, hass, discovery_data, device_id, config_entry, LOG_NAME
|
self, hass, discovery_data, device_id, config_entry, LOG_NAME
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_update(self, discovery_data: dict) -> None:
|
async def async_update(self, discovery_data: MQTTDiscoveryPayload) -> None:
|
||||||
"""Handle MQTT tag discovery updates."""
|
"""Handle MQTT tag discovery updates."""
|
||||||
# Update tag scanner
|
# Update tag scanner
|
||||||
config = PLATFORM_SCHEMA(discovery_data)
|
config: DiscoveryInfoType = PLATFORM_SCHEMA(discovery_data)
|
||||||
self._config = config
|
self._config = config
|
||||||
self._value_template = MqttValueTemplate(
|
self._value_template = MqttValueTemplate(
|
||||||
config.get(CONF_VALUE_TEMPLATE),
|
config.get(CONF_VALUE_TEMPLATE),
|
||||||
|
@ -127,7 +131,7 @@ class MQTTTagScanner(MqttDiscoveryDeviceUpdate):
|
||||||
"""Subscribe to MQTT topics."""
|
"""Subscribe to MQTT topics."""
|
||||||
|
|
||||||
async def tag_scanned(msg: ReceiveMessage) -> None:
|
async def tag_scanned(msg: ReceiveMessage) -> None:
|
||||||
tag_id = self._value_template(msg.payload, "").strip()
|
tag_id = str(self._value_template(msg.payload, "")).strip()
|
||||||
if not tag_id: # No output from template, ignore
|
if not tag_id: # No output from template, ignore
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue