mirror of
https://github.com/MervinPraison/PraisonAIUI.git
synced 2026-11-07 17:33:35 -10:00
Add examples/python/_shared/console.py with safe_print/icon helpers that degrade emoji to ASCII on legacy Windows code pages (cp1252) instead of crashing, mirroring the CLI _supports_unicode/_icon pattern. Wire the helper into the high-severity gateway (16, 17, 18) and channel (20-23) examples so they start on default Windows PowerShell without PYTHONUTF8. Co-authored-by: Mervin Praison <[email protected]>
41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
"""Cross-platform console output for examples.
|
|
|
|
Legacy Windows consoles default stdout to a non-UTF code page (cp1252/cp437)
|
|
that cannot encode emoji such as U+1F680. Calling ``print`` with those
|
|
characters raises ``UnicodeEncodeError`` and crashes the example before the
|
|
server starts. These helpers mirror the ``_supports_unicode``/``_icon`` pattern
|
|
in ``praisonaiui.cli`` so examples degrade to ASCII instead of crashing while
|
|
preserving emoji on UTF-aware terminals.
|
|
|
|
Usage:
|
|
from _shared.console import safe_print, icon
|
|
|
|
safe_print(f"{icon('🚀', '[START]')} Starting gateway...")
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from typing import Any
|
|
|
|
|
|
def supports_unicode() -> bool:
|
|
try:
|
|
encoding = sys.stdout.encoding or ""
|
|
except Exception:
|
|
return False
|
|
return "utf" in encoding.lower()
|
|
|
|
|
|
def icon(symbol: str, fallback: str) -> str:
|
|
return symbol if supports_unicode() else fallback
|
|
|
|
|
|
def safe_print(*args: Any, **kwargs: Any) -> None:
|
|
sep = kwargs.pop("sep", " ")
|
|
text = sep.join(str(a) for a in args)
|
|
try:
|
|
print(text, **kwargs)
|
|
except UnicodeEncodeError:
|
|
print(text.encode("ascii", errors="replace").decode("ascii"), **kwargs)
|