Skip to content
Snippets Groups Projects
Unverified Commit f4fda554 authored by javicalle's avatar javicalle Committed by GitHub
Browse files

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

* Update comment

---------

Co-authored-by: default avatarTheJulianJES <TheJulianJES@users.noreply.github.com>
parent 89f89cab
No related branches found
No related tags found
No related merge requests found
"""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: ...@@ -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))
module = importlib.import_module(quirk_mod)
# Check if we have found the right module clss = dict(inspect.getmembers(module, inspect.isclass))
if quirk_mod in mods: # Check quirk_cls in module classes
# If so, look for the class return quirk_cls in clss
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
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: ...@@ -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]):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment