From 98121455e509dea80382a1f34d115dac22151be3 Mon Sep 17 00:00:00 2001 From: pandula12 Date: Mon, 13 May 2024 15:52:42 +0930 Subject: [PATCH] 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.