forked from public/pysim
pySim.log: apply cmd2 colors through _style()
The color scheme takes either - a raw escape sequence like "\033[33m" (pySim-read, pySim-prog, contrib/csv-to-pgsql.py) - a cmd2 color object (pySim-shell) Color of cmd2 >= 3.0.0 is a StrEnum, which led to pySim-shell warnings like yellowWARNING: EF.DIR seems to be empty! with a stray reset at the end. Fixed by exclusing Enum from the raw sequence branch. Change-Id: I8bae9fc3c54f1dab481d743d3b68e32e9d09267a
This commit is contained in:
+2
-1
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user