Move tailscale base entity to separate module (#126527)

This commit is contained in:
epenet 2024-09-23 14:14:22 +02:00 committed by GitHub
parent 60eba6d783
commit 46f9e86f6a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 54 additions and 48 deletions

View file

@ -2,17 +2,9 @@
from __future__ import annotations
from tailscale import Device as TailscaleDevice
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity import EntityDescription
from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
DataUpdateCoordinator,
)
from .const import DOMAIN
from .coordinator import TailscaleDataUpdateCoordinator
@ -37,41 +29,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
if unload_ok:
del hass.data[DOMAIN][entry.entry_id]
return unload_ok
class TailscaleEntity(CoordinatorEntity):
"""Defines a Tailscale base entity."""
_attr_has_entity_name = True
def __init__(
self,
*,
coordinator: DataUpdateCoordinator,
device: TailscaleDevice,
description: EntityDescription,
) -> None:
"""Initialize a Tailscale sensor."""
super().__init__(coordinator=coordinator)
self.entity_description = description
self.device_id = device.device_id
self._attr_unique_id = f"{device.device_id}_{description.key}"
@property
def device_info(self) -> DeviceInfo:
"""Return the device info."""
device: TailscaleDevice = self.coordinator.data[self.device_id]
configuration_url = "https://login.tailscale.com/admin/machines/"
if device.addresses:
configuration_url += device.addresses[0]
return DeviceInfo(
configuration_url=configuration_url,
entry_type=DeviceEntryType.SERVICE,
identifiers={(DOMAIN, device.device_id)},
manufacturer="Tailscale Inc.",
model=device.os,
name=device.name.split(".")[0],
sw_version=device.client_version,
)

View file

@ -17,8 +17,8 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import TailscaleEntity
from .const import DOMAIN
from .entity import TailscaleEntity
@dataclass(frozen=True, kw_only=True)

View file

@ -0,0 +1,52 @@
"""The Tailscale integration."""
from __future__ import annotations
from tailscale import Device as TailscaleDevice
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity import EntityDescription
from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
DataUpdateCoordinator,
)
from .const import DOMAIN
class TailscaleEntity(CoordinatorEntity):
"""Defines a Tailscale base entity."""
_attr_has_entity_name = True
def __init__(
self,
*,
coordinator: DataUpdateCoordinator,
device: TailscaleDevice,
description: EntityDescription,
) -> None:
"""Initialize a Tailscale sensor."""
super().__init__(coordinator=coordinator)
self.entity_description = description
self.device_id = device.device_id
self._attr_unique_id = f"{device.device_id}_{description.key}"
@property
def device_info(self) -> DeviceInfo:
"""Return the device info."""
device: TailscaleDevice = self.coordinator.data[self.device_id]
configuration_url = "https://login.tailscale.com/admin/machines/"
if device.addresses:
configuration_url += device.addresses[0]
return DeviceInfo(
configuration_url=configuration_url,
entry_type=DeviceEntryType.SERVICE,
identifiers={(DOMAIN, device.device_id)},
manufacturer="Tailscale Inc.",
model=device.os,
name=device.name.split(".")[0],
sw_version=device.client_version,
)

View file

@ -18,8 +18,8 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import TailscaleEntity
from .const import DOMAIN
from .entity import TailscaleEntity
@dataclass(frozen=True, kw_only=True)