8000 Exclude __getattr__ for deprecated attributes from type checkers · python-kasa/python-kasa@0a62e1c · GitHub
[go: up one dir, main page]

Skip to content

Commit 0a62e1c

Browse files
committed
Exclude __getattr__ for deprecated attributes from type checkers
1 parent dab64e5 commit 0a62e1c

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

kasa/interfaces/energy.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from abc import ABC, abstractmethod
66
from enum import IntFlag, auto
7-
from typing import Any
7+
from typing import TYPE_CHECKING, Any
88
from warnings import warn
99

1010
from ..emeterstatus import EmeterStatus
@@ -184,9 +184,11 @@ async def get_monthly_stats(
184184
"get_monthstat": "get_monthly_stats",
185185
}
186186

187-
def __getattr__(self, name: str) -> Any:
188-
if attr := self._deprecated_attributes.get(name):
189-
msg = f"{name} is deprecated, use {attr} instead"
190-
warn(msg, DeprecationWarning, stacklevel=2)
191-
return getattr(self, attr)
192-
raise AttributeError(f"Energy module has no attribute {name!r}")
187+
if not TYPE_CHECKING:
188+
189+
def __getattr__(self, name: str) -> Any:
190+
if attr := self._deprecated_attributes.get(name):
191+
msg = f"{name} is deprecated, use {attr} instead"
192+
warn(msg, DeprecationWarning, stacklevel=2)
193+
return getattr(self, attr)
194+
raise AttributeError(f"Energy module has no attribute {name!r}")

tests/test_emeter.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from kasa.iot.modules.emeter import Emeter
1717
from kasa.smart import SmartDevice
1818
from kasa.smart.modules import Energy as SmartEnergyModule
19+
from kasa.smart.smartmodule import SmartModule
1920

2021
from .conftest import has_emeter, has_emeter_iot, no_emeter
2122

@@ -192,6 +193,7 @@ async def test_supported(dev: Device):
192193
pytest.skip(f"Energy module not supported for {dev}.")
193194
energy_module = dev.modules.get(Module.Energy)
194195
assert energy_module
196+
195197
if isinstance(dev, IotDevice):
196198
info = (
197199
dev._last_update
@@ -210,6 +212,7 @@ async def test_supported(dev: Device):
210212
)
211213
assert energy_module.supports(Energy.ModuleFeature.PERIODIC_STATS) is True
212214
else:
215+
assert isinstance(energy_module, SmartModule)
213216
assert energy_module.supports(Energy.ModuleFeature.CONSUMPTION_TOTAL) is False
214217
assert energy_module.supports(Energy.ModuleFeature.PERIODIC_STATS) is False
215218
if energy_module.supported_version < 2:

0 commit comments

Comments
 (0)
0