mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 19:23:34 +00:00
Update post review
This commit is contained in:
parent
f4857ef76d
commit
8b4f3ed084
@ -1,7 +1,7 @@
|
|||||||
"""Module for cli light control commands."""
|
"""Module for cli listen commands."""
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import sys
|
from contextlib import suppress
|
||||||
from typing import cast
|
from typing import cast
|
||||||
|
|
||||||
import asyncclick as click
|
import asyncclick as click
|
||||||
@ -15,12 +15,12 @@ from kasa.eventtype import EventType
|
|||||||
from .common import echo, error, pass_dev_or_child
|
from .common import echo, error, pass_dev_or_child
|
||||||
|
|
||||||
|
|
||||||
async def aioinput(string: str):
|
async def wait_on_keyboard_interrupt(msg: str):
|
||||||
"""Non loop blocking get input."""
|
"""Non loop blocking get input."""
|
||||||
loop = asyncio.get_event_loop()
|
echo(msg + ", press Ctrl-C to cancel\n")
|
||||||
await loop.run_in_executor(None, lambda s=string: sys.stdout.write(s + " ")) # type: ignore[misc]
|
|
||||||
|
|
||||||
return await loop.run_in_executor(None, sys.stdin.readline)
|
with suppress(asyncio.CancelledError):
|
||||||
|
await asyncio.Event().wait()
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
@ -68,15 +68,15 @@ async def listen(
|
|||||||
listen_ip: str | None,
|
listen_ip: str | None,
|
||||||
event_types: list[EventType] | None,
|
event_types: list[EventType] | None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Commands to control light settings."""
|
"""Listen for events like motion, triggers or alarms."""
|
||||||
try:
|
try:
|
||||||
import onvif # type: ignore[import-untyped] # noqa: F401
|
import onvif # type: ignore[import-untyped] # noqa: F401
|
||||||
except ImportError:
|
except ImportError:
|
||||||
error("python-kasa must be installed with [onvif] extra for listen.")
|
error("python-kasa must be installed with onvif extra for listen.")
|
||||||
|
|
||||||
from kasa.smartcam.modules.listen import EventType, Listen
|
from kasa.smartcam.modules.onviflisten import OnvifListen
|
||||||
|
|
||||||
listen: Listen = cast(Listen, dev.modules.get(Listen._module_name()))
|
listen: OnvifListen = cast(OnvifListen, dev.modules.get(OnvifListen._module_name()))
|
||||||
if not listen:
|
if not listen:
|
||||||
error(f"Device {dev.host} does not support listening for events.")
|
error(f"Device {dev.host} does not support listening for events.")
|
||||||
|
|
||||||
@ -92,7 +92,9 @@ async def listen(
|
|||||||
event_types=event_types,
|
event_types=event_types,
|
||||||
)
|
)
|
||||||
|
|
||||||
await aioinput("Listening, press enter to cancel\n")
|
msg = f"Listening for events on {listen.listening_address}"
|
||||||
|
|
||||||
echo("Stopping listener")
|
await wait_on_keyboard_interrupt(msg)
|
||||||
|
|
||||||
|
echo("\nStopping listener")
|
||||||
await listen.stop()
|
await listen.stop()
|
||||||
|
@ -253,7 +253,9 @@ async def cli(
|
|||||||
if target != DEFAULT_TARGET and host:
|
if target != DEFAULT_TARGET and host:
|
||||||
error("--target is not a valid option for single host discovery")
|
error("--target is not a valid option for single host discovery")
|
||||||
|
|
||||||
logging_config: dict[str, Any] = {"level": logging.WARNING}
|
logging_config: dict[str, Any] = {
|
||||||
|
"level": logging.DEBUG if debug > 0 else logging.INFO
|
||||||
|
}
|
||||||
try:
|
try:
|
||||||
from rich.logging import RichHandler
|
from rich.logging import RichHandler
|
||||||
|
|
||||||
@ -268,7 +270,6 @@ async def cli(
|
|||||||
# The configuration should be converted to use dictConfig,
|
# The configuration should be converted to use dictConfig,
|
||||||
# but this keeps mypy happy for now
|
# but this keeps mypy happy for now
|
||||||
logging.basicConfig(**logging_config) # type: ignore
|
logging.basicConfig(**logging_config) # type: ignore
|
||||||
logging.getLogger("kasa").setLevel(logging.DEBUG if debug > 0 else logging.INFO)
|
|
||||||
|
|
||||||
if ctx.invoked_subcommand == "discover":
|
if ctx.invoked_subcommand == "discover":
|
||||||
return
|
return
|
||||||
|
@ -20,6 +20,8 @@ from ...exceptions import KasaException
|
|||||||
from ..smartcammodule import SmartCamModule
|
from ..smartcammodule import SmartCamModule
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
logging.getLogger("aiohttp").setLevel(logging.WARNING)
|
||||||
|
logging.getLogger("httpx").setLevel(logging.WARNING)
|
||||||
|
|
||||||
DEFAULT_LISTEN_PORT = 28002
|
DEFAULT_LISTEN_PORT = 28002
|
||||||
|
|
||||||
@ -31,7 +33,7 @@ TOPIC_EVENT_TYPE = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class Listen(SmartCamModule):
|
class OnvifListen(SmartCamModule):
|
||||||
"""Implementation of lens mask module."""
|
"""Implementation of lens mask module."""
|
||||||
|
|
||||||
manager: NotificationManager
|
manager: NotificationManager
|
@ -133,9 +133,11 @@ class SmartCamDevice(SmartDevice):
|
|||||||
import onvif # type: ignore[import-untyped] # noqa: F401
|
import onvif # type: ignore[import-untyped] # noqa: F401
|
||||||
except ImportError:
|
except ImportError:
|
||||||
return
|
return
|
||||||
from .modules.listen import Listen
|
from .modules.onviflisten import OnvifListen
|
||||||
|
|
||||||
self._modules[Listen._module_name()] = Listen(self, Listen._module_name())
|
self._modules[OnvifListen._module_name()] = OnvifListen(
|
||||||
|
self, OnvifListen._module_name()
|
||||||
|
)
|
||||||
|
|
||||||
async def _initialize_modules(self) -> None:
|
async def _initialize_modules(self) -> None:
|
||||||
"""Initialize modules based on component negotiation response."""
|
"""Initialize modules based on component negotiation response."""
|
||||||
|
Loading…
Reference in New Issue
Block a user