From 98121455e509dea80382a1f34d115dac22151be3 Mon Sep 17 00:00:00 2001 From: pandula12 Date: Mon, 13 May 2024 15:52:42 +0930 Subject: [PATCH 1/2] added new terminal formatters using PYTEST_THEME for style --- AUTHORS | 1 + changelog/11666.improvement.rst | 5 +++++ src/_pytest/_io/terminalwriter.py | 19 +++++++++++++++---- 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 changelog/11666.improvement.rst diff --git a/AUTHORS b/AUTHORS index 54ed85fc7..d8c173ac1 100644 --- a/AUTHORS +++ b/AUTHORS @@ -308,6 +308,7 @@ Omar Kohl Omer Hadari Ondřej Súkup Oscar Benjamin +Pandula Gajadeera Parth Patel Patrick Hayes Patrick Lannigan diff --git a/changelog/11666.improvement.rst b/changelog/11666.improvement.rst new file mode 100644 index 000000000..b5cdf863b --- /dev/null +++ b/changelog/11666.improvement.rst @@ -0,0 +1,5 @@ +Improved the terminal writer to be able to use Terminal256Formatter and TerminalTrueColorFormatter. + +These are newer versions of TerminalFormmater from the pygments library that is currently in use. + +These style of these formatters are set by the users through the environmental variable PYTEST_THEME. \ No newline at end of file diff --git a/src/_pytest/_io/terminalwriter.py b/src/_pytest/_io/terminalwriter.py index 5bcd05927..c499161dd 100644 --- a/src/_pytest/_io/terminalwriter.py +++ b/src/_pytest/_io/terminalwriter.py @@ -218,13 +218,24 @@ class TerminalWriter: return source else: try: + # Import new more rich color formatters from the pygments library + from pygments.formatters.terminal256 import TerminalTrueColorFormatter + from pygments.formatters.terminal256 import Terminal256Formatter + + # Use terminal formatters depending on user environment variables + if os.environ.get('COLORTERM','') in ('truecolor', '24bit'): + # Style determined by user set environment variable, if none then use default style + terminal_formatter = TerminalTrueColorFormatter(style=os.getenv("PYTEST_THEME","default")) + elif '256' in os.environ.get('TERM', ''): + terminal_formatter = Terminal256Formatter(style=os.getenv("PYTEST_THEME","default")) + else: + terminal_formatter = TerminalFormatter( + bg=os.getenv("PYTEST_THEME_MODE", "dark"), + style=os.getenv("PYTEST_THEME"), + ) highlighted: str = highlight( source, Lexer(), - TerminalFormatter( - bg=os.getenv("PYTEST_THEME_MODE", "dark"), - style=os.getenv("PYTEST_THEME"), - ), ) # pygments terminal formatter may add a newline when there wasn't one. # We don't want this, remove. From fa32525f4c2b4e3eb62de1fc05e1c803968ab3df Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 06:30:00 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- changelog/11666.improvement.rst | 2 +- src/_pytest/_io/terminalwriter.py | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/changelog/11666.improvement.rst b/changelog/11666.improvement.rst index b5cdf863b..9cb3a3b7f 100644 --- a/changelog/11666.improvement.rst +++ b/changelog/11666.improvement.rst @@ -2,4 +2,4 @@ Improved the terminal writer to be able to use Terminal256Formatter and Terminal These are newer versions of TerminalFormmater from the pygments library that is currently in use. -These style of these formatters are set by the users through the environmental variable PYTEST_THEME. \ No newline at end of file +These style of these formatters are set by the users through the environmental variable PYTEST_THEME. diff --git a/src/_pytest/_io/terminalwriter.py b/src/_pytest/_io/terminalwriter.py index c499161dd..f21a38059 100644 --- a/src/_pytest/_io/terminalwriter.py +++ b/src/_pytest/_io/terminalwriter.py @@ -219,20 +219,24 @@ class TerminalWriter: else: try: # Import new more rich color formatters from the pygments library - from pygments.formatters.terminal256 import TerminalTrueColorFormatter from pygments.formatters.terminal256 import Terminal256Formatter + from pygments.formatters.terminal256 import TerminalTrueColorFormatter # Use terminal formatters depending on user environment variables - if os.environ.get('COLORTERM','') in ('truecolor', '24bit'): + if os.environ.get("COLORTERM", "") in ("truecolor", "24bit"): # Style determined by user set environment variable, if none then use default style - terminal_formatter = TerminalTrueColorFormatter(style=os.getenv("PYTEST_THEME","default")) - elif '256' in os.environ.get('TERM', ''): - terminal_formatter = Terminal256Formatter(style=os.getenv("PYTEST_THEME","default")) + terminal_formatter = TerminalTrueColorFormatter( + style=os.getenv("PYTEST_THEME", "default") + ) + elif "256" in os.environ.get("TERM", ""): + terminal_formatter = Terminal256Formatter( + style=os.getenv("PYTEST_THEME", "default") + ) else: terminal_formatter = TerminalFormatter( - bg=os.getenv("PYTEST_THEME_MODE", "dark"), - style=os.getenv("PYTEST_THEME"), - ) + bg=os.getenv("PYTEST_THEME_MODE", "dark"), + style=os.getenv("PYTEST_THEME"), + ) highlighted: str = highlight( source, Lexer(),