Replace custom deviceconfig serialization with mashumaru#1274
Replace custom deviceconfig serialization with mashumaru#1274
Conversation
| {'host': '127.0.0.3', 'timeout': 5, 'credentials': Credentials(), 'connection_type'\ | ||
| : {'device_family': 'SMART.TAPOBULB', 'encryption_type': 'KLAP', 'https': False, \ | ||
| 'login_version': 2}, 'uses_http': True} | ||
| {'host': '127.0.0.3', 'timeout': 5, 'credentials': {'username': 'user@example.com', \ | ||
| 'password': 'great_password'}, 'connection_type'\ | ||
| : {'device_family': 'SMART.TAPOBULB', 'encryption_type': 'KLAP', 'login_version': 2, \ | ||
| 'https': False}, 'uses_http': True} |
There was a problem hiding this comment.
Identified a bug here whereby credentials were not actually being fully serialized previously.
There was a problem hiding this comment.
That's sort of expected with any custom (de)serialization code, so thanks a lot for doing the conversion! :-)
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #1274 +/- ##
==========================================
+ Coverage 91.93% 91.95% +0.02%
==========================================
Files 117 117
Lines 7475 7447 -28
Branches 782 770 -12
==========================================
- Hits 6872 6848 -24
+ Misses 458 456 -2
+ Partials 145 143 -2 ☔ View full report in Codecov by Sentry. |
rytilahti
left a comment
There was a problem hiding this comment.
Great improvement over the manual parsing. In a couple of places, I'm not sure if we should just go with the defaults, but feel free to merge as-is if you wish.
| {'host': '127.0.0.3', 'timeout': 5, 'credentials': Credentials(), 'connection_type'\ | ||
| : {'device_family': 'SMART.TAPOBULB', 'encryption_type': 'KLAP', 'https': False, \ | ||
| 'login_version': 2}, 'uses_http': True} | ||
| {'host': '127.0.0.3', 'timeout': 5, 'credentials': {'username': 'user@example.com', \ | ||
| 'password': 'great_password'}, 'connection_type'\ | ||
| : {'device_family': 'SMART.TAPOBULB', 'encryption_type': 'KLAP', 'login_version': 2, \ | ||
| 'https': False}, 'uses_http': True} |
There was a problem hiding this comment.
That's sort of expected with any custom (de)serialization code, so thanks a lot for doing the conversion! :-)
| if credentials_hash: | ||
| self.credentials_hash = credentials_hash | ||
| return _dataclass_to_dict(self) | ||
| """Convert deviceconfig to dict controlling how to serialize credentials. |
There was a problem hiding this comment.
Do we have a real use case for not using the default and avoid having extra code to strip this?
There was a problem hiding this comment.
We don't really have a case ourselves anymore as we don't serialize the whole deviceconfig in HA anymore. Maybe we could remove this in a subsequent PR or mark it for deprecation. Also perhaps the default should be to not serialize the credentials as well?
There was a problem hiding this comment.
Yeah, I think we could remove it in the future, but it's not that critical. I would perhaps avoid making it too magical, but I'd guess skipping pw&user in favor of credentials_hash makes sense to avoid storing clear text creds (but would break on protocol updates).
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26) [Full Changelog](0.7.7...0.8.0) **Release highlights:** - **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.** - New camera functionality such as exposing RTSP streaming urls and camera pan/tilt. - New way of testing module support for individual features with `has_feature` and `get_feature`. - Adding voltage and current monitoring to `smart` devices. - Migration from pydantic to mashumaro for serialization. Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues! **Breaking change notes:** - Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/). - Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters. - From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case. **Breaking changes:** - Migrate iot cloud module to mashumaro [\#1282](#1282) (@sdb9696) - Replace custom deviceconfig serialization with mashumaru [\#1274](#1274) (@sdb9696) - Remove support for python \<3.11 [\#1273](#1273) (@sdb9696) **Implemented enhancements:** - Update cli modify presets to support smart devices [\#1295](#1295) (@sdb9696) - Use credentials\_hash for smartcamera rtsp url [\#1293](#1293) (@sdb9696) - Add voltage and current monitoring to smart Devices [\#1281](#1281) (@ryenitcher) - Update cli feature command for actions not to require a value [\#1264](#1264) (@sdb9696) - Add pan tilt camera module [\#1261](#1261) (@sdb9696) - Add alarm module for smartcamera hubs [\#1258](#1258) (@sdb9696) - Move TAPO smartcamera out of experimental package [\#1255](#1255) (@sdb9696) - Add SmartCamera Led Module [\#1249](#1249) (@sdb9696) - Use component queries to select smartcamera modules [\#1248](#1248) (@sdb9696) - Print formatting for IotLightPreset [\#1216](#1216) (@Puxtril) - Allow getting Annotated features from modules [\#1018](#1018) (@sdb9696) - Add common Thermostat module [\#977](#977) (@sdb9696) **Fixed bugs:** - TP-Link Tapo S505D cannot disable gradual on/off [\#1309](#1309) - Inconsistent emeter information between features and emeter cli [\#1308](#1308) - How to dump power usage after latest updates? [\#1306](#1306) - kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\#1267](#1267) - device \_\_repr\_\_ fails if no sys\_info [\#1262](#1262) - Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy [\#1243](#1243) - Listing light presets throws error [\#1201](#1201) - Include duration when disabling smooth transition on/off [\#1313](#1313) (@rytilahti) - Expose energy command to cli [\#1307](#1307) (@rytilahti) - Make discovery on unsupported devices less noisy [\#1291](#1291) (@rytilahti) - Fix repr for device created with no sysinfo or discovery info" [\#1266](#1266) (@sdb9696) - Fix discovery by alias for smart devices [\#1260](#1260) (@sdb9696) - Make \_\_repr\_\_ work on discovery info [\#1233](#1233) (@rytilahti) **Added support for devices:** - Add HS200 \(US\) Smart Fixture [\#1303](#1303) (@ZeliardM) - Add smartcamera devices to supported docs [\#1257](#1257) (@sdb9696) - Add P110M\(AU\) fixture [\#1244](#1244) (@rytilahti) - Add L630 fixture [\#1240](#1240) (@rytilahti) - Add EP40M Fixture [\#1238](#1238) (@ryenitcher) - Add KS220 Fixture [\#1237](#1237) (@ryenitcher) **Documentation updates:** - Use markdown footnotes in supported.md [\#1310](#1310) (@sdb9696) - Update docs for the new module attributes has/get feature [\#1301](#1301) (@sdb9696) - Fixup contributing.md for running test against a real device [\#1236](#1236) (@sdb9696) **Project maintenance:** - Rename tests/smartcamera to tests/smartcam [\#1315](#1315) (@sdb9696) - Do not error on smartcam hub attached smartcam child devices [\#1314](#1314) (@sdb9696) - Add P110M\(EU\) fixture [\#1305](#1305) (@sdb9696) - Run tests with caplog in a single worker [\#1304](#1304) (@sdb9696) - Rename smartcamera to smartcam [\#1300](#1300) (@sdb9696) - Move iot fixtures into iot subfolder [\#1299](#1299) (@sdb9696) - Annotate fan\_speed\_level of Fan interface [\#1298](#1298) (@sdb9696) - Add PIR ADC Values to Test Fixtures [\#1296](#1296) (@ryenitcher) - Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\#1294](#1294) (@sdb9696) - Simplify omit http\_client in DeviceConfig serialization [\#1292](#1292) (@sdb9696) - Add SMART Voltage Monitoring to Fixtures [\#1290](#1290) (@ryenitcher) - Remove pydantic dependency [\#1289](#1289) (@sdb9696) - Do not print out all the fixture names at the start of test runs [\#1287](#1287) (@sdb9696) - dump\_devinfo: iot light strip commands [\#1286](#1286) (@sdb9696) - Migrate TurnOnBehaviours to mashumaro [\#1285](#1285) (@sdb9696) - dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\#1284](#1284) (@rytilahti) - Migrate RuleModule to mashumaro [\#1283](#1283) (@sdb9696) - Update sphinx dependency to 6.2 to fix docs build [\#1280](#1280) (@sdb9696) - Update DiscoveryResult to use mashu Annotated Alias [\#1279](#1279) (@sdb9696) - Extend dump\_devinfo iot queries [\#1278](#1278) (@sdb9696) - Migrate triggerlogs to mashumaru [\#1277](#1277) (@sdb9696) - Migrate smart firmware module to mashumaro [\#1276](#1276) (@sdb9696) - Migrate IotLightPreset to mashumaru [\#1275](#1275) (@sdb9696) - Allow callable coroutines for feature setters [\#1272](#1272) (@sdb9696) - Fix deprecated SSLContext\(\) usage [\#1271](#1271) (@sdb9696) - Use \_get\_device\_info methods for smart and iot devs in devtools [\#1265](#1265) (@sdb9696) - Remove experimental support [\#1256](#1256) (@sdb9696) - Move protocol modules into protocols package [\#1254](#1254) (@sdb9696) - Add linkcheck to readthedocs CI [\#1253](#1253) (@rytilahti) - Update cli energy command to use energy module [\#1252](#1252) (@sdb9696) - Consolidate warnings for fixtures missing child devices [\#1251](#1251) (@sdb9696) - Update smartcamera fixtures with components [\#1250](#1250) (@sdb9696) - Move transports into their own package [\#1247](#1247) (@rytilahti) - Fix warnings in our test suite [\#1246](#1246) (@rytilahti) - Move tests folder to top level of project [\#1242](#1242) (@sdb9696) - Fix test framework running against real devices [\#1235](#1235) (@sdb9696) - Add Additional Firmware Test Fixures [\#1234](#1234) (@ryenitcher) - Update DiscoveryResult to use Mashumaro instead of pydantic [\#1231](#1231) (@sdb9696) - Update fixture for ES20M 1.0.11 [\#1215](#1215) (@rytilahti) - Enable ruff check for ANN [\#1139](#1139) (@rytilahti) **Closed issues:** - Expose Fan speed range from the library [\#1008](#1008) - \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\#783](#783)
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26) [Full Changelog](0.7.7...0.8.0) **Release highlights:** - **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.** - New camera functionality such as exposing RTSP streaming urls and camera pan/tilt. - New way of testing module support for individual features with `has_feature` and `get_feature`. - Adding voltage and current monitoring to `smart` devices. - Migration from pydantic to mashumaro for serialization. Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues! **Breaking change notes:** - Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/). - Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters. - From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case. **Breaking changes:** - Migrate iot cloud module to mashumaro [\#1282](#1282) (@sdb9696) - Replace custom deviceconfig serialization with mashumaru [\#1274](#1274) (@sdb9696) - Remove support for python \<3.11 [\#1273](#1273) (@sdb9696) **Implemented enhancements:** - Update cli modify presets to support smart devices [\#1295](#1295) (@sdb9696) - Use credentials\_hash for smartcamera rtsp url [\#1293](#1293) (@sdb9696) - Add voltage and current monitoring to smart Devices [\#1281](#1281) (@ryenitcher) - Update cli feature command for actions not to require a value [\#1264](#1264) (@sdb9696) - Add pan tilt camera module [\#1261](#1261) (@sdb9696) - Add alarm module for smartcamera hubs [\#1258](#1258) (@sdb9696) - Move TAPO smartcamera out of experimental package [\#1255](#1255) (@sdb9696) - Add SmartCamera Led Module [\#1249](#1249) (@sdb9696) - Use component queries to select smartcamera modules [\#1248](#1248) (@sdb9696) - Print formatting for IotLightPreset [\#1216](#1216) (@Puxtril) - Allow getting Annotated features from modules [\#1018](#1018) (@sdb9696) - Add common Thermostat module [\#977](#977) (@sdb9696) **Fixed bugs:** - TP-Link Tapo S505D cannot disable gradual on/off [\#1309](#1309) - Inconsistent emeter information between features and emeter cli [\#1308](#1308) - How to dump power usage after latest updates? [\#1306](#1306) - kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\#1267](#1267) - device \_\_repr\_\_ fails if no sys\_info [\#1262](#1262) - Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy [\#1243](#1243) - Listing light presets throws error [\#1201](#1201) - Include duration when disabling smooth transition on/off [\#1313](#1313) (@rytilahti) - Expose energy command to cli [\#1307](#1307) (@rytilahti) - Make discovery on unsupported devices less noisy [\#1291](#1291) (@rytilahti) - Fix repr for device created with no sysinfo or discovery info" [\#1266](#1266) (@sdb9696) - Fix discovery by alias for smart devices [\#1260](#1260) (@sdb9696) - Make \_\_repr\_\_ work on discovery info [\#1233](#1233) (@rytilahti) **Added support for devices:** - Add HS200 \(US\) Smart Fixture [\#1303](#1303) (@ZeliardM) - Add smartcamera devices to supported docs [\#1257](#1257) (@sdb9696) - Add P110M\(AU\) fixture [\#1244](#1244) (@rytilahti) - Add L630 fixture [\#1240](#1240) (@rytilahti) - Add EP40M Fixture [\#1238](#1238) (@ryenitcher) - Add KS220 Fixture [\#1237](#1237) (@ryenitcher) **Documentation updates:** - Use markdown footnotes in supported.md [\#1310](#1310) (@sdb9696) - Update docs for the new module attributes has/get feature [\#1301](#1301) (@sdb9696) - Fixup contributing.md for running test against a real device [\#1236](#1236) (@sdb9696) **Project maintenance:** - Rename tests/smartcamera to tests/smartcam [\#1315](#1315) (@sdb9696) - Do not error on smartcam hub attached smartcam child devices [\#1314](#1314) (@sdb9696) - Add P110M\(EU\) fixture [\#1305](#1305) (@sdb9696) - Run tests with caplog in a single worker [\#1304](#1304) (@sdb9696) - Rename smartcamera to smartcam [\#1300](#1300) (@sdb9696) - Move iot fixtures into iot subfolder [\#1299](#1299) (@sdb9696) - Annotate fan\_speed\_level of Fan interface [\#1298](#1298) (@sdb9696) - Add PIR ADC Values to Test Fixtures [\#1296](#1296) (@ryenitcher) - Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\#1294](#1294) (@sdb9696) - Simplify omit http\_client in DeviceConfig serialization [\#1292](#1292) (@sdb9696) - Add SMART Voltage Monitoring to Fixtures [\#1290](#1290) (@ryenitcher) - Remove pydantic dependency [\#1289](#1289) (@sdb9696) - Do not print out all the fixture names at the start of test runs [\#1287](#1287) (@sdb9696) - dump\_devinfo: iot light strip commands [\#1286](#1286) (@sdb9696) - Migrate TurnOnBehaviours to mashumaro [\#1285](#1285) (@sdb9696) - dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\#1284](#1284) (@rytilahti) - Migrate RuleModule to mashumaro [\#1283](#1283) (@sdb9696) - Update sphinx dependency to 6.2 to fix docs build [\#1280](#1280) (@sdb9696) - Update DiscoveryResult to use mashu Annotated Alias [\#1279](#1279) (@sdb9696) - Extend dump\_devinfo iot queries [\#1278](#1278) (@sdb9696) - Migrate triggerlogs to mashumaru [\#1277](#1277) (@sdb9696) - Migrate smart firmware module to mashumaro [\#1276](#1276) (@sdb9696) - Migrate IotLightPreset to mashumaru [\#1275](#1275) (@sdb9696) - Allow callable coroutines for feature setters [\#1272](#1272) (@sdb9696) - Fix deprecated SSLContext\(\) usage [\#1271](#1271) (@sdb9696) - Use \_get\_device\_info methods for smart and iot devs in devtools [\#1265](#1265) (@sdb9696) - Remove experimental support [\#1256](#1256) (@sdb9696) - Move protocol modules into protocols package [\#1254](#1254) (@sdb9696) - Add linkcheck to readthedocs CI [\#1253](#1253) (@rytilahti) - Update cli energy command to use energy module [\#1252](#1252) (@sdb9696) - Consolidate warnings for fixtures missing child devices [\#1251](#1251) (@sdb9696) - Update smartcamera fixtures with components [\#1250](#1250) (@sdb9696) - Move transports into their own package [\#1247](#1247) (@rytilahti) - Fix warnings in our test suite [\#1246](#1246) (@rytilahti) - Move tests folder to top level of project [\#1242](#1242) (@sdb9696) - Fix test framework running against real devices [\#1235](#1235) (@sdb9696) - Add Additional Firmware Test Fixures [\#1234](#1234) (@ryenitcher) - Update DiscoveryResult to use Mashumaro instead of pydantic [\#1231](#1231) (@sdb9696) - Update fixture for ES20M 1.0.11 [\#1215](#1215) (@rytilahti) - Enable ruff check for ANN [\#1139](#1139) (@rytilahti) **Closed issues:** - Expose Fan speed range from the library [\#1008](#1008) - \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\#783](#783)
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26) [Full Changelog](python-kasa/python-kasa@0.7.7...0.8.0) **Release highlights:** - **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.** - New camera functionality such as exposing RTSP streaming urls and camera pan/tilt. - New way of testing module support for individual features with `has_feature` and `get_feature`. - Adding voltage and current monitoring to `smart` devices. - Migration from pydantic to mashumaro for serialization. Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues! **Breaking change notes:** - Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/). - Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters. - From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case. **Breaking changes:** - Migrate iot cloud module to mashumaro [\python-kasa#1282](python-kasa#1282) (@sdb9696) - Replace custom deviceconfig serialization with mashumaru [\python-kasa#1274](python-kasa#1274) (@sdb9696) - Remove support for python \<3.11 [\python-kasa#1273](python-kasa#1273) (@sdb9696) **Implemented enhancements:** - Update cli modify presets to support smart devices [\python-kasa#1295](python-kasa#1295) (@sdb9696) - Use credentials\_hash for smartcamera rtsp url [\python-kasa#1293](python-kasa#1293) (@sdb9696) - Add voltage and current monitoring to smart Devices [\python-kasa#1281](python-kasa#1281) (@ryenitcher) - Update cli feature command for actions not to require a value [\python-kasa#1264](python-kasa#1264) (@sdb9696) - Add pan tilt camera module [\python-kasa#1261](python-kasa#1261) (@sdb9696) - Add alarm module for smartcamera hubs [\python-kasa#1258](python-kasa#1258) (@sdb9696) - Move TAPO smartcamera out of experimental package [\python-kasa#1255](python-kasa#1255) (@sdb9696) - Add SmartCamera Led Module [\python-kasa#1249](python-kasa#1249) (@sdb9696) - Use component queries to select smartcamera modules [\python-kasa#1248](python-kasa#1248) (@sdb9696) - Print formatting for IotLightPreset [\python-kasa#1216](python-kasa#1216) (@Puxtril) - Allow getting Annotated features from modules [\python-kasa#1018](python-kasa#1018) (@sdb9696) - Add common Thermostat module [\python-kasa#977](python-kasa#977) (@sdb9696) **Fixed bugs:** - TP-Link Tapo S505D cannot disable gradual on/off [\python-kasa#1309](python-kasa#1309) - Inconsistent emeter information between features and emeter cli [\python-kasa#1308](python-kasa#1308) - How to dump power usage after latest updates? [\python-kasa#1306](python-kasa#1306) - kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\python-kasa#1267](python-kasa#1267) - device \_\_repr\_\_ fails if no sys\_info [\python-kasa#1262](python-kasa#1262) - Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy [\python-kasa#1243](python-kasa#1243) - Listing light presets throws error [\python-kasa#1201](python-kasa#1201) - Include duration when disabling smooth transition on/off [\python-kasa#1313](python-kasa#1313) (@rytilahti) - Expose energy command to cli [\python-kasa#1307](python-kasa#1307) (@rytilahti) - Make discovery on unsupported devices less noisy [\python-kasa#1291](python-kasa#1291) (@rytilahti) - Fix repr for device created with no sysinfo or discovery info" [\python-kasa#1266](python-kasa#1266) (@sdb9696) - Fix discovery by alias for smart devices [\python-kasa#1260](python-kasa#1260) (@sdb9696) - Make \_\_repr\_\_ work on discovery info [\python-kasa#1233](python-kasa#1233) (@rytilahti) **Added support for devices:** - Add HS200 \(US\) Smart Fixture [\python-kasa#1303](python-kasa#1303) (@ZeliardM) - Add smartcamera devices to supported docs [\python-kasa#1257](python-kasa#1257) (@sdb9696) - Add P110M\(AU\) fixture [\python-kasa#1244](python-kasa#1244) (@rytilahti) - Add L630 fixture [\python-kasa#1240](python-kasa#1240) (@rytilahti) - Add EP40M Fixture [\python-kasa#1238](python-kasa#1238) (@ryenitcher) - Add KS220 Fixture [\python-kasa#1237](python-kasa#1237) (@ryenitcher) **Documentation updates:** - Use markdown footnotes in supported.md [\python-kasa#1310](python-kasa#1310) (@sdb9696) - Update docs for the new module attributes has/get feature [\python-kasa#1301](python-kasa#1301) (@sdb9696) - Fixup contributing.md for running test against a real device [\python-kasa#1236](python-kasa#1236) (@sdb9696) **Project maintenance:** - Rename tests/smartcamera to tests/smartcam [\python-kasa#1315](python-kasa#1315) (@sdb9696) - Do not error on smartcam hub attached smartcam child devices [\python-kasa#1314](python-kasa#1314) (@sdb9696) - Add P110M\(EU\) fixture [\python-kasa#1305](python-kasa#1305) (@sdb9696) - Run tests with caplog in a single worker [\python-kasa#1304](python-kasa#1304) (@sdb9696) - Rename smartcamera to smartcam [\python-kasa#1300](python-kasa#1300) (@sdb9696) - Move iot fixtures into iot subfolder [\python-kasa#1299](python-kasa#1299) (@sdb9696) - Annotate fan\_speed\_level of Fan interface [\python-kasa#1298](python-kasa#1298) (@sdb9696) - Add PIR ADC Values to Test Fixtures [\python-kasa#1296](python-kasa#1296) (@ryenitcher) - Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\python-kasa#1294](python-kasa#1294) (@sdb9696) - Simplify omit http\_client in DeviceConfig serialization [\python-kasa#1292](python-kasa#1292) (@sdb9696) - Add SMART Voltage Monitoring to Fixtures [\python-kasa#1290](python-kasa#1290) (@ryenitcher) - Remove pydantic dependency [\python-kasa#1289](python-kasa#1289) (@sdb9696) - Do not print out all the fixture names at the start of test runs [\python-kasa#1287](python-kasa#1287) (@sdb9696) - dump\_devinfo: iot light strip commands [\python-kasa#1286](python-kasa#1286) (@sdb9696) - Migrate TurnOnBehaviours to mashumaro [\python-kasa#1285](python-kasa#1285) (@sdb9696) - dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\python-kasa#1284](python-kasa#1284) (@rytilahti) - Migrate RuleModule to mashumaro [\python-kasa#1283](python-kasa#1283) (@sdb9696) - Update sphinx dependency to 6.2 to fix docs build [\python-kasa#1280](python-kasa#1280) (@sdb9696) - Update DiscoveryResult to use mashu Annotated Alias [\python-kasa#1279](python-kasa#1279) (@sdb9696) - Extend dump\_devinfo iot queries [\python-kasa#1278](python-kasa#1278) (@sdb9696) - Migrate triggerlogs to mashumaru [\python-kasa#1277](python-kasa#1277) (@sdb9696) - Migrate smart firmware module to mashumaro [\python-kasa#1276](python-kasa#1276) (@sdb9696) - Migrate IotLightPreset to mashumaru [\python-kasa#1275](python-kasa#1275) (@sdb9696) - Allow callable coroutines for feature setters [\python-kasa#1272](python-kasa#1272) (@sdb9696) - Fix deprecated SSLContext\(\) usage [\python-kasa#1271](python-kasa#1271) (@sdb9696) - Use \_get\_device\_info methods for smart and iot devs in devtools [\python-kasa#1265](python-kasa#1265) (@sdb9696) - Remove experimental support [\python-kasa#1256](python-kasa#1256) (@sdb9696) - Move protocol modules into protocols package [\python-kasa#1254](python-kasa#1254) (@sdb9696) - Add linkcheck to readthedocs CI [\python-kasa#1253](python-kasa#1253) (@rytilahti) - Update cli energy command to use energy module [\python-kasa#1252](python-kasa#1252) (@sdb9696) - Consolidate warnings for fixtures missing child devices [\python-kasa#1251](python-kasa#1251) (@sdb9696) - Update smartcamera fixtures with components [\python-kasa#1250](python-kasa#1250) (@sdb9696) - Move transports into their own package [\python-kasa#1247](python-kasa#1247) (@rytilahti) - Fix warnings in our test suite [\python-kasa#1246](python-kasa#1246) (@rytilahti) - Move tests folder to top level of project [\python-kasa#1242](python-kasa#1242) (@sdb9696) - Fix test framework running against real devices [\python-kasa#1235](python-kasa#1235) (@sdb9696) - Add Additional Firmware Test Fixures [\python-kasa#1234](python-kasa#1234) (@ryenitcher) - Update DiscoveryResult to use Mashumaro instead of pydantic [\python-kasa#1231](python-kasa#1231) (@sdb9696) - Update fixture for ES20M 1.0.11 [\python-kasa#1215](python-kasa#1215) (@rytilahti) - Enable ruff check for ANN [\python-kasa#1139](python-kasa#1139) (@rytilahti) **Closed issues:** - Expose Fan speed range from the library [\python-kasa#1008](python-kasa#1008) - \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\python-kasa#783](python-kasa#783)
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26) [Full Changelog](python-kasa/python-kasa@0.7.7...0.8.0) **Release highlights:** - **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.** - New camera functionality such as exposing RTSP streaming urls and camera pan/tilt. - New way of testing module support for individual features with `has_feature` and `get_feature`. - Adding voltage and current monitoring to `smart` devices. - Migration from pydantic to mashumaro for serialization. Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues! **Breaking change notes:** - Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/). - Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters. - From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case. **Breaking changes:** - Migrate iot cloud module to mashumaro [\python-kasa#1282](python-kasa#1282) (@sdb9696) - Replace custom deviceconfig serialization with mashumaru [\python-kasa#1274](python-kasa#1274) (@sdb9696) - Remove support for python \<3.11 [\python-kasa#1273](python-kasa#1273) (@sdb9696) **Implemented enhancements:** - Update cli modify presets to support smart devices [\python-kasa#1295](python-kasa#1295) (@sdb9696) - Use credentials\_hash for smartcamera rtsp url [\python-kasa#1293](python-kasa#1293) (@sdb9696) - Add voltage and current monitoring to smart Devices [\python-kasa#1281](python-kasa#1281) (@ryenitcher) - Update cli feature command for actions not to require a value [\python-kasa#1264](python-kasa#1264) (@sdb9696) - Add pan tilt camera module [\python-kasa#1261](python-kasa#1261) (@sdb9696) - Add alarm module for smartcamera hubs [\python-kasa#1258](python-kasa#1258) (@sdb9696) - Move TAPO smartcamera out of experimental package [\python-kasa#1255](python-kasa#1255) (@sdb9696) - Add SmartCamera Led Module [\python-kasa#1249](python-kasa#1249) (@sdb9696) - Use component queries to select smartcamera modules [\python-kasa#1248](python-kasa#1248) (@sdb9696) - Print formatting for IotLightPreset [\python-kasa#1216](python-kasa#1216) (@Puxtril) - Allow getting Annotated features from modules [\python-kasa#1018](python-kasa#1018) (@sdb9696) - Add common Thermostat module [\python-kasa#977](python-kasa#977) (@sdb9696) **Fixed bugs:** - TP-Link Tapo S505D cannot disable gradual on/off [\python-kasa#1309](python-kasa#1309) - Inconsistent emeter information between features and emeter cli [\python-kasa#1308](python-kasa#1308) - How to dump power usage after latest updates? [\python-kasa#1306](python-kasa#1306) - kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\python-kasa#1267](python-kasa#1267) - device \_\_repr\_\_ fails if no sys\_info [\python-kasa#1262](python-kasa#1262) - Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy [\python-kasa#1243](python-kasa#1243) - Listing light presets throws error [\python-kasa#1201](python-kasa#1201) - Include duration when disabling smooth transition on/off [\python-kasa#1313](python-kasa#1313) (@rytilahti) - Expose energy command to cli [\python-kasa#1307](python-kasa#1307) (@rytilahti) - Make discovery on unsupported devices less noisy [\python-kasa#1291](python-kasa#1291) (@rytilahti) - Fix repr for device created with no sysinfo or discovery info" [\python-kasa#1266](python-kasa#1266) (@sdb9696) - Fix discovery by alias for smart devices [\python-kasa#1260](python-kasa#1260) (@sdb9696) - Make \_\_repr\_\_ work on discovery info [\python-kasa#1233](python-kasa#1233) (@rytilahti) **Added support for devices:** - Add HS200 \(US\) Smart Fixture [\python-kasa#1303](python-kasa#1303) (@ZeliardM) - Add smartcamera devices to supported docs [\python-kasa#1257](python-kasa#1257) (@sdb9696) - Add P110M\(AU\) fixture [\python-kasa#1244](python-kasa#1244) (@rytilahti) - Add L630 fixture [\python-kasa#1240](python-kasa#1240) (@rytilahti) - Add EP40M Fixture [\python-kasa#1238](python-kasa#1238) (@ryenitcher) - Add KS220 Fixture [\python-kasa#1237](python-kasa#1237) (@ryenitcher) **Documentation updates:** - Use markdown footnotes in supported.md [\python-kasa#1310](python-kasa#1310) (@sdb9696) - Update docs for the new module attributes has/get feature [\python-kasa#1301](python-kasa#1301) (@sdb9696) - Fixup contributing.md for running test against a real device [\python-kasa#1236](python-kasa#1236) (@sdb9696) **Project maintenance:** - Rename tests/smartcamera to tests/smartcam [\python-kasa#1315](python-kasa#1315) (@sdb9696) - Do not error on smartcam hub attached smartcam child devices [\python-kasa#1314](python-kasa#1314) (@sdb9696) - Add P110M\(EU\) fixture [\python-kasa#1305](python-kasa#1305) (@sdb9696) - Run tests with caplog in a single worker [\python-kasa#1304](python-kasa#1304) (@sdb9696) - Rename smartcamera to smartcam [\python-kasa#1300](python-kasa#1300) (@sdb9696) - Move iot fixtures into iot subfolder [\python-kasa#1299](python-kasa#1299) (@sdb9696) - Annotate fan\_speed\_level of Fan interface [\python-kasa#1298](python-kasa#1298) (@sdb9696) - Add PIR ADC Values to Test Fixtures [\python-kasa#1296](python-kasa#1296) (@ryenitcher) - Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\python-kasa#1294](python-kasa#1294) (@sdb9696) - Simplify omit http\_client in DeviceConfig serialization [\python-kasa#1292](python-kasa#1292) (@sdb9696) - Add SMART Voltage Monitoring to Fixtures [\python-kasa#1290](python-kasa#1290) (@ryenitcher) - Remove pydantic dependency [\python-kasa#1289](python-kasa#1289) (@sdb9696) - Do not print out all the fixture names at the start of test runs [\python-kasa#1287](python-kasa#1287) (@sdb9696) - dump\_devinfo: iot light strip commands [\python-kasa#1286](python-kasa#1286) (@sdb9696) - Migrate TurnOnBehaviours to mashumaro [\python-kasa#1285](python-kasa#1285) (@sdb9696) - dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\python-kasa#1284](python-kasa#1284) (@rytilahti) - Migrate RuleModule to mashumaro [\python-kasa#1283](python-kasa#1283) (@sdb9696) - Update sphinx dependency to 6.2 to fix docs build [\python-kasa#1280](python-kasa#1280) (@sdb9696) - Update DiscoveryResult to use mashu Annotated Alias [\python-kasa#1279](python-kasa#1279) (@sdb9696) - Extend dump\_devinfo iot queries [\python-kasa#1278](python-kasa#1278) (@sdb9696) - Migrate triggerlogs to mashumaru [\python-kasa#1277](python-kasa#1277) (@sdb9696) - Migrate smart firmware module to mashumaro [\python-kasa#1276](python-kasa#1276) (@sdb9696) - Migrate IotLightPreset to mashumaru [\python-kasa#1275](python-kasa#1275) (@sdb9696) - Allow callable coroutines for feature setters [\python-kasa#1272](python-kasa#1272) (@sdb9696) - Fix deprecated SSLContext\(\) usage [\python-kasa#1271](python-kasa#1271) (@sdb9696) - Use \_get\_device\_info methods for smart and iot devs in devtools [\python-kasa#1265](python-kasa#1265) (@sdb9696) - Remove experimental support [\python-kasa#1256](python-kasa#1256) (@sdb9696) - Move protocol modules into protocols package [\python-kasa#1254](python-kasa#1254) (@sdb9696) - Add linkcheck to readthedocs CI [\python-kasa#1253](python-kasa#1253) (@rytilahti) - Update cli energy command to use energy module [\python-kasa#1252](python-kasa#1252) (@sdb9696) - Consolidate warnings for fixtures missing child devices [\python-kasa#1251](python-kasa#1251) (@sdb9696) - Update smartcamera fixtures with components [\python-kasa#1250](python-kasa#1250) (@sdb9696) - Move transports into their own package [\python-kasa#1247](python-kasa#1247) (@rytilahti) - Fix warnings in our test suite [\python-kasa#1246](python-kasa#1246) (@rytilahti) - Move tests folder to top level of project [\python-kasa#1242](python-kasa#1242) (@sdb9696) - Fix test framework running against real devices [\python-kasa#1235](python-kasa#1235) (@sdb9696) - Add Additional Firmware Test Fixures [\python-kasa#1234](python-kasa#1234) (@ryenitcher) - Update DiscoveryResult to use Mashumaro instead of pydantic [\python-kasa#1231](python-kasa#1231) (@sdb9696) - Update fixture for ES20M 1.0.11 [\python-kasa#1215](python-kasa#1215) (@rytilahti) - Enable ruff check for ANN [\python-kasa#1139](python-kasa#1139) (@rytilahti) **Closed issues:** - Expose Fan speed range from the library [\python-kasa#1008](python-kasa#1008) - \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\python-kasa#783](python-kasa#783)
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26) [Full Changelog](python-kasa/python-kasa@0.7.7...0.8.0) **Release highlights:** - **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.** - New camera functionality such as exposing RTSP streaming urls and camera pan/tilt. - New way of testing module support for individual features with `has_feature` and `get_feature`. - Adding voltage and current monitoring to `smart` devices. - Migration from pydantic to mashumaro for serialization. Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues! **Breaking change notes:** - Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/). - Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters. - From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case. **Breaking changes:** - Migrate iot cloud module to mashumaro [\python-kasa#1282](python-kasa#1282) (@sdb9696) - Replace custom deviceconfig serialization with mashumaru [\python-kasa#1274](python-kasa#1274) (@sdb9696) - Remove support for python \<3.11 [\python-kasa#1273](python-kasa#1273) (@sdb9696) **Implemented enhancements:** - Update cli modify presets to support smart devices [\python-kasa#1295](python-kasa#1295) (@sdb9696) - Use credentials\_hash for smartcamera rtsp url [\python-kasa#1293](python-kasa#1293) (@sdb9696) - Add voltage and current monitoring to smart Devices [\python-kasa#1281](python-kasa#1281) (@ryenitcher) - Update cli feature command for actions not to require a value [\python-kasa#1264](python-kasa#1264) (@sdb9696) - Add pan tilt camera module [\python-kasa#1261](python-kasa#1261) (@sdb9696) - Add alarm module for smartcamera hubs [\python-kasa#1258](python-kasa#1258) (@sdb9696) - Move TAPO smartcamera out of experimental package [\python-kasa#1255](python-kasa#1255) (@sdb9696) - Add SmartCamera Led Module [\python-kasa#1249](python-kasa#1249) (@sdb9696) - Use component queries to select smartcamera modules [\python-kasa#1248](python-kasa#1248) (@sdb9696) - Print formatting for IotLightPreset [\python-kasa#1216](python-kasa#1216) (@Puxtril) - Allow getting Annotated features from modules [\python-kasa#1018](python-kasa#1018) (@sdb9696) - Add common Thermostat module [\python-kasa#977](python-kasa#977) (@sdb9696) **Fixed bugs:** - TP-Link Tapo S505D cannot disable gradual on/off [\python-kasa#1309](python-kasa#1309) - Inconsistent emeter information between features and emeter cli [\python-kasa#1308](python-kasa#1308) - How to dump power usage after latest updates? [\python-kasa#1306](python-kasa#1306) - kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\python-kasa#1267](python-kasa#1267) - device \_\_repr\_\_ fails if no sys\_info [\python-kasa#1262](python-kasa#1262) - Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy [\python-kasa#1243](python-kasa#1243) - Listing light presets throws error [\python-kasa#1201](python-kasa#1201) - Include duration when disabling smooth transition on/off [\python-kasa#1313](python-kasa#1313) (@rytilahti) - Expose energy command to cli [\python-kasa#1307](python-kasa#1307) (@rytilahti) - Make discovery on unsupported devices less noisy [\python-kasa#1291](python-kasa#1291) (@rytilahti) - Fix repr for device created with no sysinfo or discovery info" [\python-kasa#1266](python-kasa#1266) (@sdb9696) - Fix discovery by alias for smart devices [\python-kasa#1260](python-kasa#1260) (@sdb9696) - Make \_\_repr\_\_ work on discovery info [\python-kasa#1233](python-kasa#1233) (@rytilahti) **Added support for devices:** - Add HS200 \(US\) Smart Fixture [\python-kasa#1303](python-kasa#1303) (@ZeliardM) - Add smartcamera devices to supported docs [\python-kasa#1257](python-kasa#1257) (@sdb9696) - Add P110M\(AU\) fixture [\python-kasa#1244](python-kasa#1244) (@rytilahti) - Add L630 fixture [\python-kasa#1240](python-kasa#1240) (@rytilahti) - Add EP40M Fixture [\python-kasa#1238](python-kasa#1238) (@ryenitcher) - Add KS220 Fixture [\python-kasa#1237](python-kasa#1237) (@ryenitcher) **Documentation updates:** - Use markdown footnotes in supported.md [\python-kasa#1310](python-kasa#1310) (@sdb9696) - Update docs for the new module attributes has/get feature [\python-kasa#1301](python-kasa#1301) (@sdb9696) - Fixup contributing.md for running test against a real device [\python-kasa#1236](python-kasa#1236) (@sdb9696) **Project maintenance:** - Rename tests/smartcamera to tests/smartcam [\python-kasa#1315](python-kasa#1315) (@sdb9696) - Do not error on smartcam hub attached smartcam child devices [\python-kasa#1314](python-kasa#1314) (@sdb9696) - Add P110M\(EU\) fixture [\python-kasa#1305](python-kasa#1305) (@sdb9696) - Run tests with caplog in a single worker [\python-kasa#1304](python-kasa#1304) (@sdb9696) - Rename smartcamera to smartcam [\python-kasa#1300](python-kasa#1300) (@sdb9696) - Move iot fixtures into iot subfolder [\python-kasa#1299](python-kasa#1299) (@sdb9696) - Annotate fan\_speed\_level of Fan interface [\python-kasa#1298](python-kasa#1298) (@sdb9696) - Add PIR ADC Values to Test Fixtures [\python-kasa#1296](python-kasa#1296) (@ryenitcher) - Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\python-kasa#1294](python-kasa#1294) (@sdb9696) - Simplify omit http\_client in DeviceConfig serialization [\python-kasa#1292](python-kasa#1292) (@sdb9696) - Add SMART Voltage Monitoring to Fixtures [\python-kasa#1290](python-kasa#1290) (@ryenitcher) - Remove pydantic dependency [\python-kasa#1289](python-kasa#1289) (@sdb9696) - Do not print out all the fixture names at the start of test runs [\python-kasa#1287](python-kasa#1287) (@sdb9696) - dump\_devinfo: iot light strip commands [\python-kasa#1286](python-kasa#1286) (@sdb9696) - Migrate TurnOnBehaviours to mashumaro [\python-kasa#1285](python-kasa#1285) (@sdb9696) - dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\python-kasa#1284](python-kasa#1284) (@rytilahti) - Migrate RuleModule to mashumaro [\python-kasa#1283](python-kasa#1283) (@sdb9696) - Update sphinx dependency to 6.2 to fix docs build [\python-kasa#1280](python-kasa#1280) (@sdb9696) - Update DiscoveryResult to use mashu Annotated Alias [\python-kasa#1279](python-kasa#1279) (@sdb9696) - Extend dump\_devinfo iot queries [\python-kasa#1278](python-kasa#1278) (@sdb9696) - Migrate triggerlogs to mashumaru [\python-kasa#1277](python-kasa#1277) (@sdb9696) - Migrate smart firmware module to mashumaro [\python-kasa#1276](python-kasa#1276) (@sdb9696) - Migrate IotLightPreset to mashumaru [\python-kasa#1275](python-kasa#1275) (@sdb9696) - Allow callable coroutines for feature setters [\python-kasa#1272](python-kasa#1272) (@sdb9696) - Fix deprecated SSLContext\(\) usage [\python-kasa#1271](python-kasa#1271) (@sdb9696) - Use \_get\_device\_info methods for smart and iot devs in devtools [\python-kasa#1265](python-kasa#1265) (@sdb9696) - Remove experimental support [\python-kasa#1256](python-kasa#1256) (@sdb9696) - Move protocol modules into protocols package [\python-kasa#1254](python-kasa#1254) (@sdb9696) - Add linkcheck to readthedocs CI [\python-kasa#1253](python-kasa#1253) (@rytilahti) - Update cli energy command to use energy module [\python-kasa#1252](python-kasa#1252) (@sdb9696) - Consolidate warnings for fixtures missing child devices [\python-kasa#1251](python-kasa#1251) (@sdb9696) - Update smartcamera fixtures with components [\python-kasa#1250](python-kasa#1250) (@sdb9696) - Move transports into their own package [\python-kasa#1247](python-kasa#1247) (@rytilahti) - Fix warnings in our test suite [\python-kasa#1246](python-kasa#1246) (@rytilahti) - Move tests folder to top level of project [\python-kasa#1242](python-kasa#1242) (@sdb9696) - Fix test framework running against real devices [\python-kasa#1235](python-kasa#1235) (@sdb9696) - Add Additional Firmware Test Fixures [\python-kasa#1234](python-kasa#1234) (@ryenitcher) - Update DiscoveryResult to use Mashumaro instead of pydantic [\python-kasa#1231](python-kasa#1231) (@sdb9696) - Update fixture for ES20M 1.0.11 [\python-kasa#1215](python-kasa#1215) (@rytilahti) - Enable ruff check for ANN [\python-kasa#1139](python-kasa#1139) (@rytilahti) **Closed issues:** - Expose Fan speed range from the library [\python-kasa#1008](python-kasa#1008) - \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\python-kasa#783](python-kasa#783)
This PR simplifies the deviceconfig serialization to use Mashumaro instead of custom serialization.
It is a breaking change as the
deviceconfig.to_dict()that takes parameters to control serialization of credentials is renamed toto_dict_control_credentials(). This should not have much impact as callingto_dict()with no parameters has the same behaviour and HA no longer serializes the entire deviceconfig.The first commit adds tests against the previous implementation, the second does the conversion.