From 73089b3cb0025972ce024b48c9ca018bc229b23f Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Mon, 18 Jul 2022 17:24:38 +0300 Subject: [PATCH] Warn about unknown device monitor filters // Resolve #4362 --- HISTORY.rst | 1 + platformio/device/monitor/command.py | 13 ++++++++++++- platformio/device/monitor/terminal.py | 6 +++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index e659e93d..e05d6706 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -18,6 +18,7 @@ PlatformIO Core 6 * Export a ``PIO_UNIT_TESTING`` macro to the project source files and dependent libraries in the |UNITTESTING| mode * Improved detection of Windows architecture (`issue #4353 `_) +* Warn about unknown `device monitor filters `__ (`issue #4362 `_) * Fixed a regression bug when `libArchive `__ option declared in the `library.json `__ manifest was ignored (`issue #4351 `_) * Fixed an issue when the `pio pkg publish `__ command didn't work with Python 3.6 (`issue #4352 `_) diff --git a/platformio/device/monitor/command.py b/platformio/device/monitor/command.py index 0a484eee..11a1afdf 100644 --- a/platformio/device/monitor/command.py +++ b/platformio/device/monitor/command.py @@ -20,7 +20,7 @@ import click from platformio import exception, fs from platformio.device.finder import find_serial_port from platformio.device.monitor.filters.base import register_filters -from platformio.device.monitor.terminal import start_terminal +from platformio.device.monitor.terminal import get_available_filters, start_terminal from platformio.platform.factory import PlatformFactory from platformio.project.config import ProjectConfig from platformio.project.exception import NotPlatformIOProjectError @@ -138,6 +138,17 @@ def device_monitor_cmd(**options): "--exit-char can not be the same as --menu-char" ) + # check for unknown filters + known_filters = set(get_available_filters()) + unknown_filters = set(options["filters"]) - known_filters + if unknown_filters: + options["filters"] = list(known_filters & set(options["filters"])) + click.secho( + ("Warning! Skipping unknown filters `%s`. Known filters are `%s`") + % (", ".join(unknown_filters), ", ".join(sorted(known_filters))), + fg="yellow", + ) + start_terminal(options) diff --git a/platformio/device/monitor/terminal.py b/platformio/device/monitor/terminal.py index 38c18390..bec825e9 100644 --- a/platformio/device/monitor/terminal.py +++ b/platformio/device/monitor/terminal.py @@ -41,6 +41,10 @@ class Terminal(miniterm.Miniterm): self.pio_unexpected_exception = exc +def get_available_filters(): + return sorted(miniterm.TRANSFORMATIONS.keys()) + + def start_terminal(options): retries = 0 is_port_valid = False @@ -116,7 +120,7 @@ def print_terminal_settings(terminal): ) click.echo( "--- Available filters and text transformations: %s" - % ", ".join(sorted(miniterm.TRANSFORMATIONS.keys())) + % ", ".join(get_available_filters()) ) click.echo("--- More details at https://bit.ly/pio-monitor-filters") click.echo(