From f4fda55405764446c571701a23860ce0fe0b1254 Mon Sep 17 00:00:00 2001 From: javicalle <31999997+javicalle@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:57:40 +0200 Subject: [PATCH] Fix `quirk_class_validator` in ZHA unit tests (#90140) * Fix `quirk_class_validator` Fix the `quirk_class_validator` for quirks with more than 1 module level * fix black * Shorten `quirk_cls` in `clss` Co-authored-by: TheJulianJES * Update comment --------- Co-authored-by: TheJulianJES --- tests/components/zha/test_registries.py | 26 +++++++------------------ 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/tests/components/zha/test_registries.py b/tests/components/zha/test_registries.py index 6a6bf758ceb..80b1f10f561 100644 --- a/tests/components/zha/test_registries.py +++ b/tests/components/zha/test_registries.py @@ -1,4 +1,5 @@ """Test ZHA registries.""" +import importlib import inspect from unittest import mock @@ -440,24 +441,11 @@ def test_quirk_classes() -> None: def find_quirk_class(base_obj, quirk_mod, quirk_cls): """Find a specific quirk class.""" - mods = dict(inspect.getmembers(base_obj, inspect.ismodule)) - # Check if we have found the right module - if quirk_mod in mods: - # If so, look for the class - clss = dict(inspect.getmembers(mods[quirk_mod], inspect.isclass)) - if quirk_cls in clss: - # Quirk class found - return True - - else: - # Recurse into other modules - for mod in mods: - if not mods[mod].__name__.startswith("zhaquirks."): - continue - if find_quirk_class(mods[mod], quirk_mod, quirk_cls): - return True - return False + module = importlib.import_module(quirk_mod) + clss = dict(inspect.getmembers(module, inspect.isclass)) + # Check quirk_cls in module classes + return quirk_cls in clss def quirk_class_validator(value): """Validate quirk classes during self test.""" @@ -471,9 +459,9 @@ def test_quirk_classes() -> None: quirk_class_validator(v) return - quirk_tok = value.split(".") + quirk_tok = value.rsplit(".", 1) if len(quirk_tok) != 2: - # quirk_class is always __module__.__class__ + # quirk_class is at least __module__.__class__ raise ValueError(f"Invalid quirk class : '{value}'") if not find_quirk_class(zhaquirks, quirk_tok[0], quirk_tok[1]):