88from rich .text import Text
99from rich_toolkit import RichToolkit
1010from rich_toolkit .element import Element
11- from rich_toolkit .styles import BaseStyle
11+ from rich_toolkit .styles import BaseStyle , MinimalStyle
1212from uvicorn .logging import DefaultFormatter
1313
1414logger = logging .getLogger (__name__ )
@@ -108,6 +108,30 @@ def _get_bullet_prefix(self, emoji: str) -> Text:
108108 return prefix
109109
110110
111+ class MinimalEmojiStyle (MinimalStyle ):
112+ """Minimal style that keeps the ``emoji=`` bullet as an inline prefix, so
113+ the same ``toolkit.print(..., emoji=...)`` calls read as ``🐍 App: …``
114+ outside a TTY, where ``MinimalStyle`` would otherwise drop the emoji."""
115+
116+ def render_element (
117+ self ,
118+ element : Any ,
119+ is_active : bool = False ,
120+ done : bool = False ,
121+ parent : Element | None = None ,
122+ ** kwargs : Any ,
123+ ) -> RenderableType :
124+ rendered = super ().render_element (
125+ element = element , is_active = is_active , done = done , parent = parent , ** kwargs
126+ )
127+
128+ emoji = kwargs .get ("emoji" , "" )
129+ if emoji and isinstance (rendered , str ):
130+ return f"{ emoji } { rendered } "
131+
132+ return rendered
133+
134+
111135LOG_LEVEL_COLORS = {
112136 "debug" : "blue" ,
113137 "info" : "cyan" ,
@@ -130,7 +154,7 @@ def _get_log_bullet(level: str) -> str:
130154class CustomFormatter (DefaultFormatter ):
131155 def __init__ (self , * args : Any , ** kwargs : Any ) -> None :
132156 super ().__init__ (* args , ** kwargs )
133- self .toolkit = get_rich_toolkit ()
157+ self .toolkit = get_rich_toolkit (use_rich = True )
134158
135159 def formatMessage (self , record : logging .LogRecord ) -> str :
136160 message = record .getMessage ()
@@ -186,5 +210,7 @@ def get_uvicorn_log_config() -> dict[str, Any]:
186210 }
187211
188212
189- def get_rich_toolkit () -> RichToolkit :
190- return RichToolkit (style = FastAPIStyle ())
213+ def get_rich_toolkit (* , use_rich : bool ) -> RichToolkit :
214+ style : BaseStyle = FastAPIStyle () if use_rich else MinimalEmojiStyle ()
215+
216+ return RichToolkit (style = style )
0 commit comments