mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-01 18:50:34 +03:00
change(tools): Unified outputs of various standalone scripts (esp-pylib)
This commit is contained in:
@@ -1,71 +1,62 @@
|
||||
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
import sys
|
||||
from collections.abc import Callable
|
||||
from typing import Any
|
||||
from typing import Callable
|
||||
from typing import cast
|
||||
|
||||
from rich.markup import escape
|
||||
from utils import conf
|
||||
|
||||
try:
|
||||
# The ESP-IDF virtual environment hasn't been verified yet, so see if the rich library
|
||||
# The ESP-IDF virtual environment hasn't been verified yet, so see if esp-pylib
|
||||
# can be imported to display error and status messages nicely.
|
||||
from rich.console import Console
|
||||
from esp_pylib.logger import EspLog
|
||||
from esp_pylib.logger import Verbosity
|
||||
from esp_pylib.logger import log
|
||||
except ImportError as e:
|
||||
sys.exit(f'error: Unable to import the rich module: {e}. Please execute the install script.')
|
||||
|
||||
CONSOLE_STDERR = Console(stderr=True, width=255)
|
||||
CONSOLE_STDOUT = Console(width=255)
|
||||
sys.exit(f'error: Unable to import esp-pylib: {e}. Please execute the install script.')
|
||||
|
||||
|
||||
def status_message(msg: str, msg_result: str='', rv_on_ok: bool=False, die_on_err: bool=True) -> Callable:
|
||||
def configure_output(*, no_color: bool = False, quiet: bool = False, debug: bool = False) -> None:
|
||||
# log is typed as EspLogBase; console options live on the default EspLog singleton.
|
||||
# Only pass no_color=True when requested. False would override Rich's NO_COLOR detection.
|
||||
options: dict[str, Any] = {'quiet': quiet}
|
||||
if no_color:
|
||||
options['no_color'] = True
|
||||
cast(EspLog, log).set_console_options(**options)
|
||||
if quiet:
|
||||
log.set_verbosity(Verbosity.SILENT)
|
||||
elif debug:
|
||||
log.set_verbosity(Verbosity.VERBOSE)
|
||||
else:
|
||||
log.set_verbosity(Verbosity.NORMAL)
|
||||
|
||||
|
||||
def status_message(msg: str, msg_result: str = '', rv_on_ok: bool = False, die_on_err: bool = True) -> Callable:
|
||||
def inner(func: Callable) -> Callable:
|
||||
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
||||
eprint(f'[dark_orange]*[/dark_orange] {msg} ... ', end='')
|
||||
log.print(f'[dark_orange]*[/dark_orange] {escape(msg)} ... ', file=sys.stderr, end='')
|
||||
|
||||
try:
|
||||
rv = func(*args, **kwargs)
|
||||
except Exception as e:
|
||||
eprint('[red]FAILED[/red]')
|
||||
if conf.ARGS.debug:
|
||||
log.print('[red]FAILED[/red]', file=sys.stderr)
|
||||
if conf.ARGS and conf.ARGS.debug:
|
||||
raise
|
||||
if not die_on_err:
|
||||
return None
|
||||
die(str(e))
|
||||
log.die(escape(str(e)))
|
||||
|
||||
if rv_on_ok:
|
||||
eprint(f'[green]{rv}[/green]')
|
||||
log.print(f'[green]{escape(str(rv))}[/green]', file=sys.stderr)
|
||||
elif msg_result:
|
||||
eprint(f'[green]{msg_result}[/green]')
|
||||
log.print(f'[green]{escape(msg_result)}[/green]', file=sys.stderr)
|
||||
else:
|
||||
eprint('[green]OK[/green]')
|
||||
log.print('[green]OK[/green]', file=sys.stderr)
|
||||
|
||||
return rv
|
||||
|
||||
return wrapper
|
||||
|
||||
return inner
|
||||
|
||||
|
||||
def err(*args: Any, **kwargs: Any) -> None:
|
||||
CONSOLE_STDERR.print('[red]error[/red]: ', *args, **kwargs) # type: ignore
|
||||
|
||||
|
||||
def warn(*args: Any, **kwargs: Any) -> None:
|
||||
CONSOLE_STDERR.print('[yellow]warning[/yellow]: ', *args, **kwargs) # type: ignore
|
||||
|
||||
|
||||
def debug(*args: Any, **kwargs: Any) -> None:
|
||||
if not conf.ARGS.debug:
|
||||
return
|
||||
CONSOLE_STDERR.print('[green_yellow]debug[/green_yellow]: ', *args, **kwargs) # type: ignore
|
||||
|
||||
|
||||
def die(*args: Any, **kwargs: Any) -> None:
|
||||
err(*args, **kwargs)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def eprint(*args: Any, **kwargs: Any) -> None:
|
||||
CONSOLE_STDERR.print(*args, **kwargs) # type: ignore
|
||||
|
||||
|
||||
def oprint(*args: Any, **kwargs: Any) -> None:
|
||||
CONSOLE_STDOUT.print(*args, **kwargs) # type: ignore
|
||||
|
||||
Reference in New Issue
Block a user