GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Use stacklevel=2 for warnings to report on callsites by rytilahti · Pull Request #1219 · python-kasa/python-kasa

Conversation

@rytilahti

@rytilahti rytilahti commented Oct 31, 2024

Copy link
Copy Markdown
Member

Use stacklevel=2 for warnings, as this will correctly show the callsite instead of the line where the warning is reported.
Thanks to https://www.youtube.com/watch?v=Ljfn4x8t3Ow by @asottile

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")

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@rytilahti
Use stacklevel=2 for warnings to report on callsites
27c41fd
@rytilahti rytilahti added the maintenance Project improvements and maintenance label Oct 31, 2024
@codecov

codecov Bot commented Oct 31, 2024 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 85.71429% with 1 line in your changes missing coverage. Please review.

Project coverage is 92.48%. Comparing base (530cf4b) to head (27c41fd).
Report is 209 commits behind head on master.

Files with missing lines Patch % Lines
kasa/iot/iotdevice.py 50.00% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##           master    #1219   +/-   ##
=======================================
  Coverage   92.48%   92.48%           
=======================================
  Files          99       99           
  Lines        6535     6535           
  Branches      700      700           
=======================================
  Hits         6044     6044           
  Misses        374      374           
  Partials      117      117           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@sdb9696

sdb9696 commented Oct 31, 2024

Copy link
Copy Markdown
Contributor

This makes sense when the warning is coming from __getattr__ etc but I'm wondering whether it makes sense for things like the test framework. What does the after look like then?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@rytilahti

rytilahti commented Oct 31, 2024

Copy link
Copy Markdown
Member Author

I think it makes sense there, too:

kasa/tests/test_strip.py::test_children_alias[P300(EU)_1.0_1.0.13.json-SMART]
  /home/tpr/code/python-kasa/kasa/tests/fakeprotocol_smart.py:438: UserWarning: Could not find child fixture 000000000000000000000000000000000000000001 in P300(EU)_1.0_1.0.13.json
    return await self._handle_control_child(request_dict["params"])

vs.

kasa/tests/test_strip.py::test_children_alias[P300(EU)_1.0_1.0.13.json-SMART]
  /home/tpr/code/python-kasa/kasa/tests/fakeprotocol_smart.py:224: UserWarning: Could not find child fixture 000000000000000000000000000000000000000000 in P300(EU)_1.0_1.0.13.json
    warn(

and

kasa/tests/test_smartprotocol.py::test_smart_protocol_lists_multiple_request[50-30]
  /home/tpr/code/python-kasa/kasa/tests/fakeprotocol_smart.py:51: UserWarning: Child is a cameraprotocol which needs to be implemented {'foo': 26}
    self.child_protocols = self._get_child_protocols(

vs.

kasa/tests/test_smartprotocol.py::test_smart_protocol_lists_multiple_request[50-30]
  /home/tpr/code/python-kasa/kasa/tests/fakeprotocol_smart.py:208: UserWarning: Child is a cameraprotocol which needs to be implemented {'foo': 26}
    warn(

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

sdb9696
sdb9696 approved these changes Oct 31, 2024
View reviewed changes

@sdb9696 sdb9696 left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok cool, let's merge. N.B. Once all the ANN changes are in we might want to consider putting all the deprecated __getattr__ behind if not TYPE_CHECKING:

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

rytilahti reacted with thumbs up emoji
All reactions
  • 👍 1 reaction
@rytilahti
rytilahti merged commit 5da41fc into master Oct 31, 2024
@rytilahti
rytilahti deleted the fix/warn_stacklevel branch October 31, 2024 13:12
@sdb9696 sdb9696 added this to the 0.7.7 milestone Nov 4, 2024
@sdb9696 sdb9696 mentioned this pull request Nov 4, 2024
Prepare 0.7.7 #1229
Merged
sdb9696 added a commit that referenced this pull request Nov 4, 2024
@sdb9696
Prepare 0.7.7 (#1229)
331baf6
## [0.7.7](https://github.com/python-kasa/python-kasa/tree/0.7.7) (2024-11-04)

[Full Changelog](0.7.6...0.7.7)

**Release summary:**

- Bugfix for child device device creation error with credentials_hash
- PIR support for iot dimmers and wall switches.
- Various small enhancements and project improvements.

**Implemented enhancements:**

- Add PIR&LAS for wall switches mentioning PIR support [\#1227](#1227) (@rytilahti)
- Expose ambient light setting for iot dimmers [\#1210](#1210) (@rytilahti)
- Expose PIR enabled setting for iot dimmers [\#1174](#1174) (@rytilahti)
- Add childprotection module [\#1141](#1141) (@rytilahti)
- Initial trigger logs implementation [\#900](#900) (@rytilahti)

**Fixed bugs:**

- Fix AES child device creation error [\#1220](#1220) (@sdb9696)

**Project maintenance:**

- Update TC65 fixture [\#1225](#1225) (@rytilahti)
- Update smartcamera fixtures from latest dump\_devinfo [\#1224](#1224) (@sdb9696)
- Add component queries to smartcamera devices [\#1223](#1223) (@sdb9696)
- Update try\_connect\_all to be more efficient and report attempts [\#1222](#1222) (@sdb9696)
- Use stacklevel=2 for warnings to report on callsites [\#1219](#1219) (@rytilahti)
- parse\_pcap\_klap: various code cleanups [\#1138](#1138) (@rytilahti)
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 22, 2026
@rytilahti
Use stacklevel=2 for warnings to report on callsites (python-kasa#1219)
5169a8b
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")
```
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 22, 2026
@sdb9696
Prepare 0.7.7 (python-kasa#1229)
c91fc85
## [0.7.7](https://github.com/python-kasa/python-kasa/tree/0.7.7) (2024-11-04)

[Full Changelog](python-kasa/python-kasa@0.7.6...0.7.7)

**Release summary:**

- Bugfix for child device device creation error with credentials_hash
- PIR support for iot dimmers and wall switches.
- Various small enhancements and project improvements.

**Implemented enhancements:**

- Add PIR&LAS for wall switches mentioning PIR support [\python-kasa#1227](python-kasa#1227) (@rytilahti)
- Expose ambient light setting for iot dimmers [\python-kasa#1210](python-kasa#1210) (@rytilahti)
- Expose PIR enabled setting for iot dimmers [\python-kasa#1174](python-kasa#1174) (@rytilahti)
- Add childprotection module [\python-kasa#1141](python-kasa#1141) (@rytilahti)
- Initial trigger logs implementation [\python-kasa#900](python-kasa#900) (@rytilahti)

**Fixed bugs:**

- Fix AES child device creation error [\python-kasa#1220](python-kasa#1220) (@sdb9696)

**Project maintenance:**

- Update TC65 fixture [\python-kasa#1225](python-kasa#1225) (@rytilahti)
- Update smartcamera fixtures from latest dump\_devinfo [\python-kasa#1224](python-kasa#1224) (@sdb9696)
- Add component queries to smartcamera devices [\python-kasa#1223](python-kasa#1223) (@sdb9696)
- Update try\_connect\_all to be more efficient and report attempts [\python-kasa#1222](python-kasa#1222) (@sdb9696)
- Use stacklevel=2 for warnings to report on callsites [\python-kasa#1219](python-kasa#1219) (@rytilahti)
- parse\_pcap\_klap: various code cleanups [\python-kasa#1138](python-kasa#1138) (@rytilahti)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@sdb9696 sdb9696 sdb9696 approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

maintenance Project improvements and maintenance

Projects

None yet

Milestone

0.7.7

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@rytilahti @sdb9696
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.