mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-23 03:33:35 +00:00
implement SyncSmartDevice and sort imports and use absolute imports
This commit is contained in:
parent
30677b2af0
commit
0c1d8b6efe
@ -1,21 +1,18 @@
|
|||||||
"""pyHS100 cli tool."""
|
"""pyHS100 cli tool."""
|
||||||
import asyncio
|
import asyncio
|
||||||
import sys
|
|
||||||
import click
|
|
||||||
import logging
|
import logging
|
||||||
|
import sys
|
||||||
from pprint import pformat as pf
|
from pprint import pformat as pf
|
||||||
|
|
||||||
|
import click
|
||||||
|
|
||||||
if sys.version_info < (3, 4):
|
if sys.version_info < (3, 4):
|
||||||
print("To use this script you need python 3.4 or newer! got %s" % sys.version_info)
|
print("To use this script you need python 3.4 or newer! got %s" % sys.version_info)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
from pyHS100 import (
|
from pyHS100 import SmartPlug # noqa: E402
|
||||||
SmartDevice,
|
from pyHS100 import Discover, SmartBulb, SmartDevice, SmartStrip
|
||||||
SmartPlug,
|
|
||||||
SmartBulb,
|
|
||||||
SmartStrip,
|
|
||||||
Discover,
|
|
||||||
) # noqa: E402
|
|
||||||
|
|
||||||
pass_dev = click.make_pass_decorator(SmartDevice)
|
pass_dev = click.make_pass_decorator(SmartDevice)
|
||||||
|
|
||||||
|
@ -1,16 +1,13 @@
|
|||||||
import socket
|
|
||||||
import logging
|
|
||||||
import json
|
import json
|
||||||
from typing import Dict, Type, Optional
|
import logging
|
||||||
|
import socket
|
||||||
|
from typing import Dict, Optional, Type
|
||||||
|
|
||||||
from pyHS100 import (
|
from pyHS100.protocol import TPLinkSmartHomeProtocol
|
||||||
TPLinkSmartHomeProtocol,
|
from pyHS100.smartbulb import SmartBulb
|
||||||
SmartDevice,
|
from pyHS100.smartdevice import SmartDevice, SmartDeviceException
|
||||||
SmartPlug,
|
from pyHS100.smartplug import SmartPlug
|
||||||
SmartBulb,
|
from pyHS100.smartstrip import SmartStrip
|
||||||
SmartStrip,
|
|
||||||
SmartDeviceException,
|
|
||||||
)
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
import struct
|
|
||||||
import logging
|
import logging
|
||||||
|
import struct
|
||||||
from typing import Any, Dict, Union
|
from typing import Any, Dict, Union
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
from pyHS100 import DeviceType, SmartDevice, SmartDeviceException
|
|
||||||
from .protocol import TPLinkSmartHomeProtocol
|
|
||||||
import re
|
import re
|
||||||
from typing import Any, Dict, Tuple
|
from typing import Any, Dict, Tuple
|
||||||
|
|
||||||
|
from pyHS100.protocol import TPLinkSmartHomeProtocol
|
||||||
|
from pyHS100.smartdevice import DeviceType, SmartDevice, SmartDeviceException
|
||||||
|
|
||||||
TPLINK_KELVIN = {
|
TPLINK_KELVIN = {
|
||||||
"LB130": (2500, 9000),
|
"LB130": (2500, 9000),
|
||||||
|
@ -14,13 +14,15 @@ You may obtain a copy of the license at
|
|||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
"""
|
"""
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import inspect
|
||||||
|
import functools
|
||||||
import logging
|
import logging
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
|
||||||
from .protocol import TPLinkSmartHomeProtocol
|
from pyHS100.protocol import TPLinkSmartHomeProtocol
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -116,6 +118,7 @@ class SmartDevice:
|
|||||||
self.cache = defaultdict(lambda: defaultdict(lambda: None))
|
self.cache = defaultdict(lambda: defaultdict(lambda: None))
|
||||||
self._device_type = DeviceType.Unknown
|
self._device_type = DeviceType.Unknown
|
||||||
self.ioloop = ioloop or asyncio.get_event_loop()
|
self.ioloop = ioloop or asyncio.get_event_loop()
|
||||||
|
self.sync = SyncSmartDevice(self)
|
||||||
|
|
||||||
def _result_from_cache(self, target, cmd) -> Optional[Dict]:
|
def _result_from_cache(self, target, cmd) -> Optional[Dict]:
|
||||||
"""Return query result from cache if still fresh.
|
"""Return query result from cache if still fresh.
|
||||||
@ -604,3 +607,29 @@ class SmartDevice:
|
|||||||
asyncio.run(self.is_on()),
|
asyncio.run(self.is_on()),
|
||||||
asyncio.run(self.get_state_information()),
|
asyncio.run(self.get_state_information()),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SyncSmartDevice:
|
||||||
|
"""A synchronous SmartDevice speaker class.
|
||||||
|
This has the same methods as `SyncSmartDevice`, however, it wraps all async
|
||||||
|
methods and call them in a blocking way.
|
||||||
|
|
||||||
|
Taken from https://github.com/basnijholt/media_player.kef/
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, async_device):
|
||||||
|
self.async_device = async_device
|
||||||
|
|
||||||
|
def __getattr__(self, attr):
|
||||||
|
method = getattr(self.async_device, attr)
|
||||||
|
if method is None:
|
||||||
|
raise AttributeError(f"'SyncSmartDevice' object has no attribute '{attr}.'")
|
||||||
|
if inspect.iscoroutinefunction(method):
|
||||||
|
|
||||||
|
@functools.wraps(method)
|
||||||
|
def wrapped(*args, **kwargs):
|
||||||
|
return asyncio.run(method(*args, **kwargs))
|
||||||
|
|
||||||
|
return wrapped
|
||||||
|
else:
|
||||||
|
return method
|
||||||
|
@ -2,8 +2,12 @@ import datetime
|
|||||||
import logging
|
import logging
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
|
|
||||||
from pyHS100 import SmartDevice, DeviceType, SmartDeviceException
|
from pyHS100.protocol import TPLinkSmartHomeProtocol
|
||||||
from .protocol import TPLinkSmartHomeProtocol
|
from pyHS100.smartdevice import (
|
||||||
|
DeviceType,
|
||||||
|
SmartDevice,
|
||||||
|
SmartDeviceException,
|
||||||
|
)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ import datetime
|
|||||||
import logging
|
import logging
|
||||||
from typing import Any, Dict, Optional, Union
|
from typing import Any, Dict, Optional, Union
|
||||||
|
|
||||||
from pyHS100 import DeviceType, EmeterStatus, SmartDeviceException, SmartPlug
|
from pyHS100.protocol import TPLinkSmartHomeProtocol
|
||||||
|
from pyHS100.smartdevice import DeviceType, EmeterStatus, SmartDeviceException
|
||||||
from .protocol import TPLinkSmartHomeProtocol
|
from pyHS100.smartplug import SmartPlug
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user