Update post review

This commit is contained in:
Steven B 2024-12-19 16:59:34 +00:00
parent f4857ef76d
commit 8b4f3ed084
No known key found for this signature in database
GPG Key ID: 6D5B46B3679F2A43
4 changed files with 24 additions and 17 deletions

View File

@ -1,7 +1,7 @@
"""Module for cli light control commands."""
"""Module for cli listen commands."""
import asyncio
import sys
from contextlib import suppress
from typing import cast
import asyncclick as click
@ -15,12 +15,12 @@ from kasa.eventtype import EventType
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."""
loop = asyncio.get_event_loop()
await loop.run_in_executor(None, lambda s=string: sys.stdout.write(s + " ")) # type: ignore[misc]
echo(msg + ", press Ctrl-C to cancel\n")
return await loop.run_in_executor(None, sys.stdin.readline)
with suppress(asyncio.CancelledError):
await asyncio.Event().wait()
@click.command()
@ -68,15 +68,15 @@ async def listen(
listen_ip: str | None,
event_types: list[EventType] | None,
) -> None:
"""Commands to control light settings."""
"""Listen for events like motion, triggers or alarms."""
try:
import onvif # type: ignore[import-untyped] # noqa: F401
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:
error(f"Device {dev.host} does not support listening for events.")
@ -92,7 +92,9 @@ async def listen(
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()

View File

@ -253,7 +253,9 @@ async def cli(
if target != DEFAULT_TARGET and host:
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:
from rich.logging import RichHandler
@ -268,7 +270,6 @@ async def cli(
# The configuration should be converted to use dictConfig,
# but this keeps mypy happy for now
logging.basicConfig(**logging_config) # type: ignore
logging.getLogger("kasa").setLevel(logging.DEBUG if debug > 0 else logging.INFO)
if ctx.invoked_subcommand == "discover":
return

View File

@ -20,6 +20,8 @@ from ...exceptions import KasaException
from ..smartcammodule import SmartCamModule
_LOGGER = logging.getLogger(__name__)
logging.getLogger("aiohttp").setLevel(logging.WARNING)
logging.getLogger("httpx").setLevel(logging.WARNING)
DEFAULT_LISTEN_PORT = 28002
@ -31,7 +33,7 @@ TOPIC_EVENT_TYPE = {
}
class Listen(SmartCamModule):
class OnvifListen(SmartCamModule):
"""Implementation of lens mask module."""
manager: NotificationManager

View File

@ -133,9 +133,11 @@ class SmartCamDevice(SmartDevice):
import onvif # type: ignore[import-untyped] # noqa: F401
except ImportError:
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:
"""Initialize modules based on component negotiation response."""