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 <TheJulianJES@users.noreply.github.com>

* Update comment

---------

Co-authored-by: TheJulianJES <TheJulianJES@users.noreply.github.com>
This commit is contained in:
javicalle 2023-03-27 17:57:40 +02:00 committed by GitHub
parent 89f89cab2c
commit f4fda55405
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,5 @@
"""Test ZHA registries.""" """Test ZHA registries."""
import importlib
import inspect import inspect
from unittest import mock from unittest import mock
@ -440,24 +441,11 @@ def test_quirk_classes() -> None:
def find_quirk_class(base_obj, quirk_mod, quirk_cls): def find_quirk_class(base_obj, quirk_mod, quirk_cls):
"""Find a specific quirk class.""" """Find a specific quirk class."""
mods = dict(inspect.getmembers(base_obj, inspect.ismodule))
# Check if we have found the right module module = importlib.import_module(quirk_mod)
if quirk_mod in mods: clss = dict(inspect.getmembers(module, inspect.isclass))
# If so, look for the class # Check quirk_cls in module classes
clss = dict(inspect.getmembers(mods[quirk_mod], inspect.isclass)) return quirk_cls in clss
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
def quirk_class_validator(value): def quirk_class_validator(value):
"""Validate quirk classes during self test.""" """Validate quirk classes during self test."""
@ -471,9 +459,9 @@ def test_quirk_classes() -> None:
quirk_class_validator(v) quirk_class_validator(v)
return return
quirk_tok = value.split(".") quirk_tok = value.rsplit(".", 1)
if len(quirk_tok) != 2: 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}'") raise ValueError(f"Invalid quirk class : '{value}'")
if not find_quirk_class(zhaquirks, quirk_tok[0], quirk_tok[1]): if not find_quirk_class(zhaquirks, quirk_tok[0], quirk_tok[1]):