mirror of
https://github.com/python-kasa/python-kasa.git
synced 2026-10-25 22:22:55 +00:00
Strip multi-word rich tags when rich is not installed (#1807)
Without `rich` installed, `kasa` prints tags like `[bold red]Only discover is available without --host or --alias[/bold red]` verbatim. The fallback in `kasa/cli/common.py` strips only single-word tags (`\[/?[a-z]+]`), and `error()` uses the two-word `[bold red]`. The pattern is changed to `\[/?[a-z]+(?: [a-z]+)*]`, so space-separated lowercase words are stripped too.
This commit is contained in:
@@ -34,7 +34,7 @@ except ImportError:
|
||||
# but only lower case tags to avoid stripping out
|
||||
# raw data from the device that is printed from
|
||||
# the device state.
|
||||
rich_formatting = re.compile(r"\[/?[a-z]+]")
|
||||
rich_formatting = re.compile(r"\[/?[a-z]+(?: [a-z]+)*]")
|
||||
|
||||
def _strip_rich_formatting(echo_func):
|
||||
"""Strip rich formatting from messages."""
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import importlib.util
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
from datetime import datetime
|
||||
from unittest.mock import ANY, PropertyMock, patch
|
||||
from zoneinfo import ZoneInfo
|
||||
@@ -1552,3 +1554,17 @@ async def test_discover_config_invalid(
|
||||
)
|
||||
assert res.exit_code == 1
|
||||
assert "--target is not a valid option for single host discovery" in res.output
|
||||
|
||||
|
||||
def test_echo_strips_rich_tags_without_rich(monkeypatch, capsys):
|
||||
"""Multi-word rich tags are stripped when rich is not installed."""
|
||||
monkeypatch.setitem(sys.modules, "rich", None)
|
||||
spec = importlib.util.find_spec("kasa.cli.common")
|
||||
assert spec
|
||||
assert spec.loader
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
|
||||
module._echo("[bold red]Only discover is available[/bold red] [ABC]")
|
||||
|
||||
assert capsys.readouterr().out == "Only discover is available [ABC]\n"
|
||||
|
||||
Reference in New Issue
Block a user