mirror of
https://github.com/esphome/esphome.git
synced 2024-12-25 23:14:54 +01:00
Bugfix/1077 decode called on str fetching platformio stacktrace (#991)
* Remove decode from str result, add type annotations
This commit is contained in:
parent
3c68348868
commit
aff4f1e9e2
2 changed files with 21 additions and 5 deletions
|
@ -1,4 +1,6 @@
|
|||
import json
|
||||
from typing import Union
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
|
@ -62,7 +64,7 @@ FILTER_PLATFORMIO_LINES = [
|
|||
]
|
||||
|
||||
|
||||
def run_platformio_cli(*args, **kwargs):
|
||||
def run_platformio_cli(*args, **kwargs) -> Union[str, int]:
|
||||
os.environ["PLATFORMIO_FORCE_COLOR"] = "true"
|
||||
os.environ["PLATFORMIO_BUILD_DIR"] = os.path.abspath(CORE.relative_pioenvs_path())
|
||||
os.environ["PLATFORMIO_LIBDEPS_DIR"] = os.path.abspath(CORE.relative_piolibdeps_path())
|
||||
|
@ -80,7 +82,7 @@ def run_platformio_cli(*args, **kwargs):
|
|||
*cmd, **kwargs)
|
||||
|
||||
|
||||
def run_platformio_cli_run(config, verbose, *args, **kwargs):
|
||||
def run_platformio_cli_run(config, verbose, *args, **kwargs) -> Union[str, int]:
|
||||
command = ['run', '-d', CORE.build_path]
|
||||
if verbose:
|
||||
command += ['-v']
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from typing import Union
|
||||
|
||||
import collections
|
||||
import io
|
||||
import logging
|
||||
|
@ -151,7 +153,21 @@ class RedirectText:
|
|||
return True
|
||||
|
||||
|
||||
def run_external_command(func, *cmd, **kwargs):
|
||||
def run_external_command(func, *cmd,
|
||||
capture_stdout: bool = False,
|
||||
filter_lines: str = None) -> Union[int, str]:
|
||||
"""
|
||||
Run a function from an external package that acts like a main method.
|
||||
|
||||
Temporarily replaces stdin/stderr/stdout, sys.argv and sys.exit handler during the run.
|
||||
|
||||
:param func: Function to execute
|
||||
:param cmd: Command to run as (eg first element of sys.argv)
|
||||
:param capture_stdout: Capture text from stdout and return that.
|
||||
:param filter_lines: Regular expression used to filter captured output.
|
||||
:return: str if `capture_stdout` is set else int exit code.
|
||||
|
||||
"""
|
||||
def mock_exit(return_code):
|
||||
raise SystemExit(return_code)
|
||||
|
||||
|
@ -160,13 +176,11 @@ def run_external_command(func, *cmd, **kwargs):
|
|||
full_cmd = ' '.join(shlex_quote(x) for x in cmd)
|
||||
_LOGGER.info("Running: %s", full_cmd)
|
||||
|
||||
filter_lines = kwargs.get('filter_lines')
|
||||
orig_stdout = sys.stdout
|
||||
sys.stdout = RedirectText(sys.stdout, filter_lines=filter_lines)
|
||||
orig_stderr = sys.stderr
|
||||
sys.stderr = RedirectText(sys.stderr, filter_lines=filter_lines)
|
||||
|
||||
capture_stdout = kwargs.get('capture_stdout', False)
|
||||
if capture_stdout:
|
||||
cap_stdout = sys.stdout = io.StringIO()
|
||||
|
||||
|
|
Loading…
Reference in a new issue