Refactor devices into subpackages and deprecate old names (#716)

* Refactor devices into subpackages and deprecate old names

* Tweak and add tests

* Fix linting

* Remove duplicate implementations affecting project coverage

* Update post review

* Add device base class attributes and rename subclasses

* Rename Module to BaseModule

* Remove has_emeter_history

* Fix missing _time in init

* Update post review

* Fix test_readmeexamples

* Fix erroneously duped files

* Clean up iot and smart imports

* Update post latest review

* Tweak Device docstring
This commit is contained in:
Steven B
2024-02-04 15:20:08 +00:00
committed by GitHub
parent 6afd05be59
commit 0d119e63d0
49 changed files with 1046 additions and 606 deletions

View File

@@ -13,18 +13,14 @@ import pytest # type: ignore # see https://github.com/pytest-dev/pytest/issues/
from kasa import (
Credentials,
Device,
DeviceConfig,
Discover,
SmartBulb,
SmartDevice,
SmartDimmer,
SmartLightStrip,
SmartPlug,
SmartProtocol,
SmartStrip,
)
from kasa.iot import IotBulb, IotDimmer, IotLightStrip, IotPlug, IotStrip
from kasa.protocol import BaseTransport
from kasa.tapo import TapoBulb, TapoPlug
from kasa.smart import SmartBulb, SmartPlug
from kasa.xortransport import XorEncryption
from .fakeprotocol_iot import FakeIotProtocol
@@ -350,37 +346,37 @@ def device_for_file(model, protocol):
if protocol == "SMART":
for d in PLUGS_SMART:
if d in model:
return TapoPlug
return SmartPlug
for d in BULBS_SMART:
if d in model:
return TapoBulb
return SmartBulb
for d in DIMMERS_SMART:
if d in model:
return TapoBulb
return SmartBulb
for d in STRIPS_SMART:
if d in model:
return TapoPlug
return SmartPlug
else:
for d in STRIPS_IOT:
if d in model:
return SmartStrip
return IotStrip
for d in PLUGS_IOT:
if d in model:
return SmartPlug
return IotPlug
# Light strips are recognized also as bulbs, so this has to go first
for d in BULBS_IOT_LIGHT_STRIP:
if d in model:
return SmartLightStrip
return IotLightStrip
for d in BULBS_IOT:
if d in model:
return SmartBulb
return IotBulb
for d in DIMMERS_IOT:
if d in model:
return SmartDimmer
return IotDimmer
raise Exception("Unable to find type for %s", model)
@@ -446,11 +442,11 @@ async def dev(request):
IP_MODEL_CACHE[ip] = model = d.model
if model not in file:
pytest.skip(f"skipping file {file}")
dev: SmartDevice = (
dev: Device = (
d if d else await _discover_update_and_close(ip, username, password)
)
else:
dev: SmartDevice = await get_device_for_file(file, protocol)
dev: Device = await get_device_for_file(file, protocol)
yield dev