mirror of
https://github.com/python-kasa/python-kasa.git
synced 2026-10-26 06:32:58 +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
|
# but only lower case tags to avoid stripping out
|
||||||
# raw data from the device that is printed from
|
# raw data from the device that is printed from
|
||||||
# the device state.
|
# 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):
|
def _strip_rich_formatting(echo_func):
|
||||||
"""Strip rich formatting from messages."""
|
"""Strip rich formatting from messages."""
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
import importlib.util
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from unittest.mock import ANY, PropertyMock, patch
|
from unittest.mock import ANY, PropertyMock, patch
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
@@ -1552,3 +1554,17 @@ async def test_discover_config_invalid(
|
|||||||
)
|
)
|
||||||
assert res.exit_code == 1
|
assert res.exit_code == 1
|
||||||
assert "--target is not a valid option for single host discovery" in res.output
|
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