diff --git a/sanic/log.py b/sanic/log.py index 468796452b..f2e1ccf2cb 100644 --- a/sanic/log.py +++ b/sanic/log.py @@ -8,6 +8,16 @@ from sanic.compat import is_atty +# Python 3.11 changed the way Enum formatting works for mixed-in types. +if sys.version_info < (3, 11, 0): + + class StrEnum(str, Enum): + pass + +else: + from enum import StrEnum + + LOGGING_CONFIG_DEFAULTS: Dict[str, Any] = dict( # no cov version=1, disable_existing_loggers=False, @@ -68,7 +78,7 @@ """ -class Colors(str, Enum): # no cov +class Colors(StrEnum): # no cov END = "\033[0m" BOLD = "\033[1m" BLUE = "\033[34m" diff --git a/tests/test_logging.py b/tests/test_logging.py index 63611f34ff..23a7d9a336 100644 --- a/tests/test_logging.py +++ b/tests/test_logging.py @@ -10,6 +10,7 @@ import sanic from sanic import Sanic +from sanic.log import Colors from sanic.log import LOGGING_CONFIG_DEFAULTS, logger from sanic.response import text @@ -250,3 +251,14 @@ def log_info(request): if app_verbosity == 0: assert ("sanic.root", logging.INFO, "DEFAULT") in caplog.record_tuples + + +def test_colors_enum_format(): + assert f'{Colors.END}' == Colors.END.value + assert f'{Colors.BOLD}' == Colors.BOLD.value + assert f'{Colors.BLUE}' == Colors.BLUE.value + assert f'{Colors.GREEN}' == Colors.GREEN.value + assert f'{Colors.PURPLE}' == Colors.PURPLE.value + assert f'{Colors.RED}' == Colors.RED.value + assert f'{Colors.SANIC}' == Colors.SANIC.value + assert f'{Colors.YELLOW}' == Colors.YELLOW.value