mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-12-01 05:38:33 +00:00
Use stacklevel=2 for warnings to report on callsites (#1219)
Use stacklevel=2 for warnings, as this will correctly show the callsite
instead of the line where the warning is reported.
Currently:
```
kasa/__init__.py:110
/home/tpr/code/python-kasa/kasa/__init__.py:110: DeprecationWarning: SmartDevice is deprecated, use IotDevice from package kasa.iot instead or use Discover.discover_single() and Device.connect() to support new protocols
warn(
```
After:
```
kasa/tests/smart/modules/test_contact.py:3
/home/tpr/code/python-kasa/kasa/tests/smart/modules/test_contact.py:3: DeprecationWarning: SmartDevice is deprecated, use IotDevice from package kasa.iot instead or use Discover.discover_single() and Device.connect() to support new protocols
from kasa import Module, SmartDevice
```
Currently:
```
kasa/tests/test_lightstrip.py: 56 warnings
/home/tpr/code/python-kasa/kasa/device.py:559: DeprecationWarning: effect is deprecated, use: Module.LightEffect in device.modules instead
warn(msg, DeprecationWarning, stacklevel=1)
```
After:
```
kasa/tests/test_lightstrip.py::test_effects_lightstrip_set_effect_transition[500-KL430(US)_2.0_1.0.9.json]
/home/tpr/code/python-kasa/kasa/tests/test_lightstrip.py:62: DeprecationWarning: set_effect is deprecated, use: Module.LightEffect in device.modules instead
await dev.set_effect("Candy Cane")
```
This commit is contained in:
@@ -545,7 +545,7 @@ class Device(ABC):
|
||||
msg = f"{name} is deprecated"
|
||||
if module:
|
||||
msg += f", use: {module} in device.modules instead"
|
||||
warn(msg, DeprecationWarning, stacklevel=1)
|
||||
warn(msg, DeprecationWarning, stacklevel=2)
|
||||
return self.device_type == dep_device_type_attr[1]
|
||||
# Other deprecated attributes
|
||||
if (dep_attr := self._deprecated_other_attributes.get(name)) and (
|
||||
@@ -556,6 +556,6 @@ class Device(ABC):
|
||||
dev_or_mod = self.modules[mod] if mod else self
|
||||
replacing = f"Module.{mod} in device.modules" if mod else replacing_attr
|
||||
msg = f"{name} is deprecated, use: {replacing} instead"
|
||||
warn(msg, DeprecationWarning, stacklevel=1)
|
||||
warn(msg, DeprecationWarning, stacklevel=2)
|
||||
return getattr(dev_or_mod, replacing_attr)
|
||||
raise AttributeError(f"Device has no attribute {name!r}")
|
||||
|
||||
Reference in New Issue
Block a user