mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-08-06 10:44:04 +00:00
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:
@@ -12,9 +12,13 @@ Module-specific errors are raised as `SmartDeviceException` and are expected
|
||||
to be handled by the user of the library.
|
||||
"""
|
||||
from importlib.metadata import version
|
||||
from typing import TYPE_CHECKING
|
||||
from warnings import warn
|
||||
|
||||
from kasa.bulb import Bulb
|
||||
from kasa.credentials import Credentials
|
||||
from kasa.device import Device
|
||||
from kasa.device_type import DeviceType
|
||||
from kasa.deviceconfig import (
|
||||
ConnectionType,
|
||||
DeviceConfig,
|
||||
@@ -29,18 +33,14 @@ from kasa.exceptions import (
|
||||
TimeoutException,
|
||||
UnsupportedDeviceException,
|
||||
)
|
||||
from kasa.iot.iotbulb import BulbPreset, TurnOnBehavior, TurnOnBehaviors
|
||||
from kasa.iotprotocol import (
|
||||
IotProtocol,
|
||||
_deprecated_TPLinkSmartHomeProtocol, # noqa: F401
|
||||
)
|
||||
from kasa.plug import Plug
|
||||
from kasa.protocol import BaseProtocol
|
||||
from kasa.smartbulb import SmartBulb, SmartBulbPreset, TurnOnBehavior, TurnOnBehaviors
|
||||
from kasa.smartdevice import DeviceType, SmartDevice
|
||||
from kasa.smartdimmer import SmartDimmer
|
||||
from kasa.smartlightstrip import SmartLightStrip
|
||||
from kasa.smartplug import SmartPlug
|
||||
from kasa.smartprotocol import SmartProtocol
|
||||
from kasa.smartstrip import SmartStrip
|
||||
|
||||
__version__ = version("python-kasa")
|
||||
|
||||
@@ -50,18 +50,15 @@ __all__ = [
|
||||
"BaseProtocol",
|
||||
"IotProtocol",
|
||||
"SmartProtocol",
|
||||
"SmartBulb",
|
||||
"SmartBulbPreset",
|
||||
"BulbPreset",
|
||||
"TurnOnBehaviors",
|
||||
"TurnOnBehavior",
|
||||
"DeviceType",
|
||||
"EmeterStatus",
|
||||
"SmartDevice",
|
||||
"Device",
|
||||
"Bulb",
|
||||
"Plug",
|
||||
"SmartDeviceException",
|
||||
"SmartPlug",
|
||||
"SmartStrip",
|
||||
"SmartDimmer",
|
||||
"SmartLightStrip",
|
||||
"AuthenticationException",
|
||||
"UnsupportedDeviceException",
|
||||
"TimeoutException",
|
||||
@@ -72,11 +69,55 @@ __all__ = [
|
||||
"DeviceFamilyType",
|
||||
]
|
||||
|
||||
from . import iot
|
||||
|
||||
deprecated_names = ["TPLinkSmartHomeProtocol"]
|
||||
deprecated_smart_devices = {
|
||||
"SmartDevice": iot.IotDevice,
|
||||
"SmartPlug": iot.IotPlug,
|
||||
"SmartBulb": iot.IotBulb,
|
||||
"SmartLightStrip": iot.IotLightStrip,
|
||||
"SmartStrip": iot.IotStrip,
|
||||
"SmartDimmer": iot.IotDimmer,
|
||||
"SmartBulbPreset": BulbPreset,
|
||||
}
|
||||
|
||||
|
||||
def __getattr__(name):
|
||||
if name in deprecated_names:
|
||||
warn(f"{name} is deprecated", DeprecationWarning, stacklevel=1)
|
||||
return globals()[f"_deprecated_{name}"]
|
||||
if name in deprecated_smart_devices:
|
||||
new_class = deprecated_smart_devices[name]
|
||||
package_name = ".".join(new_class.__module__.split(".")[:-1])
|
||||
warn(
|
||||
f"{name} is deprecated, use {new_class.__name__} "
|
||||
+ f"from package {package_name} instead or use Discover.discover_single()"
|
||||
+ " and Device.connect() to support new protocols",
|
||||
DeprecationWarning,
|
||||
stacklevel=1,
|
||||
)
|
||||
return new_class
|
||||
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
SmartDevice = Device
|
||||
SmartBulb = iot.IotBulb
|
||||
SmartPlug = iot.IotPlug
|
||||
SmartLightStrip = iot.IotLightStrip
|
||||
SmartStrip = iot.IotStrip
|
||||
SmartDimmer = iot.IotDimmer
|
||||
SmartBulbPreset = BulbPreset
|
||||
# Instanstiate all classes so the type checkers catch abstract issues
|
||||
from . import smart
|
||||
|
||||
smart.SmartDevice("127.0.0.1")
|
||||
smart.SmartPlug("127.0.0.1")
|
||||
smart.SmartBulb("127.0.0.1")
|
||||
iot.IotDevice("127.0.0.1")
|
||||
iot.IotPlug("127.0.0.1")
|
||||
iot.IotBulb("127.0.0.1")
|
||||
iot.IotLightStrip("127.0.0.1")
|
||||
iot.IotStrip("127.0.0.1")
|
||||
iot.IotDimmer("127.0.0.1")
|
||||
|
Reference in New Issue
Block a user