diff --git a/pySim/log.py b/pySim/log.py index 3fad90ba..5aeeed4e 100644 --- a/pySim/log.py +++ b/pySim/log.py @@ -24,6 +24,7 @@ # import logging +import enum import cmd2 from packaging import version @@ -126,7 +127,7 @@ class PySimLogger: formatted_message = logging.Formatter.format(PySimLogger.__formatter, record) color = PySimLogger.colors.get(record.levelno) if color: - if isinstance(color, str): + if isinstance(color, str) and not isinstance(color, enum.Enum): PySimLogger.print_callback(color + formatted_message + "\033[0m") else: PySimLogger.print_callback(_style(formatted_message, fg = color)) diff --git a/tests/unittests/test_log.py b/tests/unittests/test_log.py index ac651ae7..a43fe412 100755 --- a/tests/unittests/test_log.py +++ b/tests/unittests/test_log.py @@ -20,11 +20,20 @@ import unittest import logging +import cmd2 +from packaging import version from pySim.log import PySimLogger import io import sys from inspect import currentframe, getframeinfo +if version.parse(cmd2.__version__) >= version.parse("3.0.0"): + from cmd2 import Color # pylint: disable=no-name-in-module + YELLOW = Color.YELLOW +else: # cmd2>=2.6.2 + from cmd2 import Fg # pylint: disable=no-name-in-module + YELLOW = Fg.YELLOW + log = PySimLogger.get(__name__) TEST_MSG_DEBUG = "this is a debug message" @@ -128,5 +137,18 @@ class PySimLogger_Test(unittest.TestCase): expected_message = "CRITICAL: " + TEST_MSG_CRITICAL log.critical(TEST_MSG_CRITICAL) + def test_05_color(self): + # A color is either + # - raw escape sequence + # - cmd2 color object + global expected_message + expected_message = "\033[33mWARNING: " + TEST_MSG_WARNING + "\033[0m" + + PySimLogger.setup(self._test_print_callback, {logging.WARN: "\033[33m"}) + log.warning(TEST_MSG_WARNING) + + PySimLogger.setup(self._test_print_callback, {logging.WARN: YELLOW}) + log.warning(TEST_MSG_WARNING) # don't leak cmd2 Color StrEnum + if __name__ == '__main__': unittest.main()