From b0c3e22a525c340c86c0a2cbb1aa691c64339acb Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Fri, 19 Mar 2021 12:30:16 +0200 Subject: [PATCH] Configure a custom pattern to determine when debugging server is started with a new debug_server_ready_pattern option --- HISTORY.rst | 1 + docs | 2 +- platformio/__main__.py | 4 ++-- platformio/debug/config/base.py | 4 +++- platformio/debug/process/server.py | 9 ++++++++- platformio/project/options.py | 8 ++++++++ 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index d3f412fd..59edd6de 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -15,6 +15,7 @@ PlatformIO Core 5 - Boosted `PlatformIO Debugging `__ performance thanks to migrating the codebase to the pure Python 3 Asynchronous I/O stack - Support debugging on Windows using Windows CMD/CLI (`pio debug `__) (`issue #3793 `_) + - Configure a custom pattern to determine when debugging server is started with a new `debug_server_ready_pattern `__ option 5.1.1 (2021-03-17) ~~~~~~~~~~~~~~~~~~ diff --git a/docs b/docs index 0487c24f..b76e3d53 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 0487c24f930e3b1f45d594b6564148dc5324f263 +Subproject commit b76e3d53bbe10c945e1dbe302fe7f0b07005447a diff --git a/platformio/__main__.py b/platformio/__main__.py index ae6413d1..0cc7dca3 100644 --- a/platformio/__main__.py +++ b/platformio/__main__.py @@ -22,7 +22,7 @@ import click from platformio import __version__, exception from platformio.commands import PlatformioCLI -from platformio.compat import IS_CYGWIN, PY2, ensure_python3 +from platformio.compat import IS_CYGWIN, ensure_python3 try: import click_completion # pylint: disable=import-error @@ -118,7 +118,7 @@ def main(argv=None): exit_code = int(e.code) except Exception as e: # pylint: disable=broad-except if not isinstance(e, exception.ReturnErrorCode): - if not PY2: + if sys.version_info.major != 2: from platformio import maintenance maintenance.on_platformio_exception(e) diff --git a/platformio/debug/config/base.py b/platformio/debug/config/base.py index 25c295c2..d3d07c96 100644 --- a/platformio/debug/config/base.py +++ b/platformio/debug/config/base.py @@ -130,7 +130,9 @@ class DebugConfigBase: # pylint: disable=too-many-instance-attributes @property def server_ready_pattern(self): - return (self.server or {}).get("ready_pattern") + return self.env_options.get( + "debug_server_ready_pattern", (self.server or {}).get("ready_pattern") + ) def _load_build_data(self): data = load_project_ide_data(self.project_config.path, self.env_name) diff --git a/platformio/debug/process/server.py b/platformio/debug/process/server.py index 4e1645e2..d1fe5e7d 100644 --- a/platformio/debug/process/server.py +++ b/platformio/debug/process/server.py @@ -14,6 +14,7 @@ import asyncio import os +import re import time from platformio import fs @@ -120,7 +121,13 @@ class DebugServerProcess(DebugBaseProcess): return self._ready ready_pattern = self.debug_config.server_ready_pattern if ready_pattern: - self._ready = ready_pattern.encode() in data + if ready_pattern.startswith("^"): + self._ready = re.match( + ready_pattern, + data.decode("utf-8", "ignore"), + ) + else: + self._ready = ready_pattern.encode() in data return self._ready def stdout_data_received(self, data): diff --git a/platformio/project/options.py b/platformio/project/options.py index 213a2104..480ab4ac 100644 --- a/platformio/project/options.py +++ b/platformio/project/options.py @@ -695,6 +695,14 @@ ProjectOptions = OrderedDict( ), type=click.Path(exists=True, file_okay=True, dir_okay=False), ), + ConfigEnvOption( + group="debug", + name="debug_server_ready_pattern", + description=( + "A pattern to determine when debugging server is ready " + "for an incoming connection" + ), + ), # Advanced ConfigEnvOption( group="advanced",