From 2bb2153b9c7c12f494362a1321e675239346e08c Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:12:45 +0000 Subject: [PATCH] Refactor split between quirks and device_quirks --- homeassistant/components/tuya/__init__.py | 2 +- homeassistant/components/tuya/cover.py | 6 +--- homeassistant/components/tuya/select.py | 6 +--- homeassistant/components/tuya/sensor.py | 6 +--- .../xternal_tuya_device_quirks}/__init__.py | 31 +++++------------- .../tuya/xternal_tuya_device_quirks}/cl.py | 9 ++++-- .../tuya/xternal_tuya_quirks/__init__.py | 32 +++++++++++++++++++ .../tuya}/xternal_tuya_quirks/device_quirk.py | 0 .../xternal_tuya_quirks/homeassistant.py | 0 .../tuya}/xternal_tuya_quirks/registry.py | 0 .../device_quirks/__init__.py | 1 - 11 files changed, 50 insertions(+), 43 deletions(-) rename homeassistant/{xternal_tuya_quirks => components/tuya/xternal_tuya_device_quirks}/__init__.py (70%) rename homeassistant/{xternal_tuya_quirks/device_quirks => components/tuya/xternal_tuya_device_quirks}/cl.py (90%) create mode 100644 homeassistant/components/tuya/xternal_tuya_quirks/__init__.py rename homeassistant/{ => components/tuya}/xternal_tuya_quirks/device_quirk.py (100%) rename homeassistant/{ => components/tuya}/xternal_tuya_quirks/homeassistant.py (100%) rename homeassistant/{ => components/tuya}/xternal_tuya_quirks/registry.py (100%) delete mode 100644 homeassistant/xternal_tuya_quirks/device_quirks/__init__.py diff --git a/homeassistant/components/tuya/__init__.py b/homeassistant/components/tuya/__init__.py index 7018b1124fba..798c201b82e1 100644 --- a/homeassistant/components/tuya/__init__.py +++ b/homeassistant/components/tuya/__init__.py @@ -17,7 +17,6 @@ from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import ConfigEntryAuthFailed from homeassistant.helpers import device_registry as dr from homeassistant.helpers.dispatcher import dispatcher_send -from homeassistant.xternal_tuya_quirks import register_tuya_quirks from .const import ( CONF_APP_TYPE, @@ -32,6 +31,7 @@ from .const import ( TUYA_DISCOVERY_NEW, TUYA_HA_SIGNAL_UPDATE_ENTITY, ) +from .xternal_tuya_device_quirks import register_tuya_quirks # Suppress logs from the library, it logs unneeded on error logging.getLogger("tuya_sharing").setLevel(logging.CRITICAL) diff --git a/homeassistant/components/tuya/cover.py b/homeassistant/components/tuya/cover.py index 523222cab570..bac478f1407d 100644 --- a/homeassistant/components/tuya/cover.py +++ b/homeassistant/components/tuya/cover.py @@ -18,17 +18,13 @@ from homeassistant.components.cover import ( from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from homeassistant.xternal_tuya_quirks import ( - TUYA_QUIRKS_REGISTRY, - TuyaCoverDefinition, - parse_enum, -) from . import TuyaConfigEntry from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode, DPType from .entity import TuyaEntity from .models import EnumTypeData, IntegerTypeData from .util import get_dpcode +from .xternal_tuya_quirks import TUYA_QUIRKS_REGISTRY, TuyaCoverDefinition, parse_enum @dataclass(frozen=True) diff --git a/homeassistant/components/tuya/select.py b/homeassistant/components/tuya/select.py index 3517f0cb7d76..781ca0ac22c9 100644 --- a/homeassistant/components/tuya/select.py +++ b/homeassistant/components/tuya/select.py @@ -9,15 +9,11 @@ from homeassistant.const import EntityCategory from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback -from homeassistant.xternal_tuya_quirks import ( - TUYA_QUIRKS_REGISTRY, - TuyaSelectDefinition, - parse_enum, -) from . import TuyaConfigEntry from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode, DPType from .entity import TuyaEntity +from .xternal_tuya_quirks import TUYA_QUIRKS_REGISTRY, TuyaSelectDefinition, parse_enum # All descriptions can be found here. Mostly the Enum data types in the # default instructions set of each category end up being a select. diff --git a/homeassistant/components/tuya/sensor.py b/homeassistant/components/tuya/sensor.py index ceebd74a31b2..f5b6e448316d 100644 --- a/homeassistant/components/tuya/sensor.py +++ b/homeassistant/components/tuya/sensor.py @@ -30,11 +30,6 @@ from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.typing import StateType -from homeassistant.xternal_tuya_quirks import ( - TUYA_QUIRKS_REGISTRY, - TuyaSensorDefinition, - parse_enum, -) from . import TuyaConfigEntry from .const import ( @@ -50,6 +45,7 @@ from .const import ( from .entity import TuyaEntity from .models import ComplexValue, ElectricityValue, EnumTypeData, IntegerTypeData from .util import get_dptype +from .xternal_tuya_quirks import TUYA_QUIRKS_REGISTRY, TuyaSensorDefinition, parse_enum _WIND_DIRECTIONS = { "north": 0.0, diff --git a/homeassistant/xternal_tuya_quirks/__init__.py b/homeassistant/components/tuya/xternal_tuya_device_quirks/__init__.py similarity index 70% rename from homeassistant/xternal_tuya_quirks/__init__.py rename to homeassistant/components/tuya/xternal_tuya_device_quirks/__init__.py index d8747c538fe7..e54126a96575 100644 --- a/homeassistant/xternal_tuya_quirks/__init__.py +++ b/homeassistant/components/tuya/xternal_tuya_device_quirks/__init__.py @@ -8,38 +8,23 @@ import pathlib import pkgutil import sys -from .device_quirk import ( - TuyaCoverDefinition, - TuyaDeviceQuirk, - TuyaSelectDefinition, - TuyaSensorDefinition, -) -from .homeassistant import TuyaCoverDeviceClass, TuyaSensorDeviceClass, parse_enum -from .registry import QuirksRegistry +from ..xternal_tuya_quirks import TUYA_QUIRKS_REGISTRY -__all__ = [ - "QUIRKS_REGISTRY", - "QuirksRegistry", - "TuyaCoverDefinition", - "TuyaCoverDeviceClass", - "TuyaDeviceQuirk", - "TuyaSelectDefinition", - "TuyaSensorDefinition", - "TuyaSensorDeviceClass", - "parse_enum", -] _LOGGER = logging.getLogger(__name__) -TUYA_QUIRKS_REGISTRY = QuirksRegistry() - def register_tuya_quirks(custom_quirks_path: str | None = None) -> None: - """Register all quirks with zigpy, including optional custom quirks.""" + """Register all quirks with xternal_tuya_quirks. + + - remove custom quirks from `custom_quirks_path` + - add quirks from `xternal_tuya_device_quirks` + - add custom quirks from `custom_quirks_path` + """ if custom_quirks_path is not None: TUYA_QUIRKS_REGISTRY.purge_custom_quirks(custom_quirks_path) - # Import all quirks in the `zhaquirks` package first + # Import all quirks in the `xternal_tuya_device_quirks` package first for _importer, modname, _ispkg in pkgutil.walk_packages( path=__path__, prefix=__name__ + ".", diff --git a/homeassistant/xternal_tuya_quirks/device_quirks/cl.py b/homeassistant/components/tuya/xternal_tuya_device_quirks/cl.py similarity index 90% rename from homeassistant/xternal_tuya_quirks/device_quirks/cl.py rename to homeassistant/components/tuya/xternal_tuya_device_quirks/cl.py index 5316113aa54f..6b00d36fbd1e 100644 --- a/homeassistant/xternal_tuya_quirks/device_quirks/cl.py +++ b/homeassistant/components/tuya/xternal_tuya_device_quirks/cl.py @@ -2,9 +2,12 @@ from __future__ import annotations -from .. import TUYA_QUIRKS_REGISTRY # noqa: TID252 -from ..device_quirk import TuyaDeviceQuirk # noqa: TID252 -from ..homeassistant import TuyaCoverDeviceClass, TuyaEntityCategory # noqa: TID252 +from ..xternal_tuya_quirks import ( + TUYA_QUIRKS_REGISTRY, + TuyaCoverDeviceClass, + TuyaDeviceQuirk, + TuyaEntityCategory, +) ( # This model has percent_state and percent_control but percent_state never diff --git a/homeassistant/components/tuya/xternal_tuya_quirks/__init__.py b/homeassistant/components/tuya/xternal_tuya_quirks/__init__.py new file mode 100644 index 000000000000..3f00811678d2 --- /dev/null +++ b/homeassistant/components/tuya/xternal_tuya_quirks/__init__.py @@ -0,0 +1,32 @@ +"""Quirks for Tuya.""" + +from __future__ import annotations + +from .device_quirk import ( + TuyaCoverDefinition, + TuyaDeviceQuirk, + TuyaSelectDefinition, + TuyaSensorDefinition, +) +from .homeassistant import ( + TuyaCoverDeviceClass, + TuyaEntityCategory, + TuyaSensorDeviceClass, + parse_enum, +) +from .registry import QuirksRegistry + +__all__ = [ + "QUIRKS_REGISTRY", + "QuirksRegistry", + "TuyaCoverDefinition", + "TuyaCoverDeviceClass", + "TuyaDeviceQuirk", + "TuyaEntityCategory", + "TuyaSelectDefinition", + "TuyaSensorDefinition", + "TuyaSensorDeviceClass", + "parse_enum", +] + +TUYA_QUIRKS_REGISTRY = QuirksRegistry() diff --git a/homeassistant/xternal_tuya_quirks/device_quirk.py b/homeassistant/components/tuya/xternal_tuya_quirks/device_quirk.py similarity index 100% rename from homeassistant/xternal_tuya_quirks/device_quirk.py rename to homeassistant/components/tuya/xternal_tuya_quirks/device_quirk.py diff --git a/homeassistant/xternal_tuya_quirks/homeassistant.py b/homeassistant/components/tuya/xternal_tuya_quirks/homeassistant.py similarity index 100% rename from homeassistant/xternal_tuya_quirks/homeassistant.py rename to homeassistant/components/tuya/xternal_tuya_quirks/homeassistant.py diff --git a/homeassistant/xternal_tuya_quirks/registry.py b/homeassistant/components/tuya/xternal_tuya_quirks/registry.py similarity index 100% rename from homeassistant/xternal_tuya_quirks/registry.py rename to homeassistant/components/tuya/xternal_tuya_quirks/registry.py diff --git a/homeassistant/xternal_tuya_quirks/device_quirks/__init__.py b/homeassistant/xternal_tuya_quirks/device_quirks/__init__.py deleted file mode 100644 index c7d3b34da317..000000000000 --- a/homeassistant/xternal_tuya_quirks/device_quirks/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Quirks for Tuya."""