You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
1 year ago
|
"""
|
||
|
Unopinionated display configuration.
|
||
|
"""
|
||
|
|
||
|
from __future__ import annotations
|
||
|
|
||
|
import locale
|
||
|
import sys
|
||
|
|
||
|
from pandas._config import config as cf
|
||
|
|
||
|
# -----------------------------------------------------------------------------
|
||
|
# Global formatting options
|
||
|
_initial_defencoding: str | None = None
|
||
|
|
||
|
|
||
|
def detect_console_encoding() -> str:
|
||
|
"""
|
||
|
Try to find the most capable encoding supported by the console.
|
||
|
slightly modified from the way IPython handles the same issue.
|
||
|
"""
|
||
|
global _initial_defencoding
|
||
|
|
||
|
encoding = None
|
||
|
try:
|
||
|
encoding = sys.stdout.encoding or sys.stdin.encoding
|
||
|
except (AttributeError, OSError):
|
||
|
pass
|
||
|
|
||
|
# try again for something better
|
||
|
if not encoding or "ascii" in encoding.lower():
|
||
|
try:
|
||
|
encoding = locale.getpreferredencoding()
|
||
|
except locale.Error:
|
||
|
# can be raised by locale.setlocale(), which is
|
||
|
# called by getpreferredencoding
|
||
|
# (on some systems, see stdlib locale docs)
|
||
|
pass
|
||
|
|
||
|
# when all else fails. this will usually be "ascii"
|
||
|
if not encoding or "ascii" in encoding.lower():
|
||
|
encoding = sys.getdefaultencoding()
|
||
|
|
||
|
# GH#3360, save the reported defencoding at import time
|
||
|
# MPL backends may change it. Make available for debugging.
|
||
|
if not _initial_defencoding:
|
||
|
_initial_defencoding = sys.getdefaultencoding()
|
||
|
|
||
|
return encoding
|
||
|
|
||
|
|
||
|
pc_encoding_doc = """
|
||
|
: str/unicode
|
||
|
Defaults to the detected encoding of the console.
|
||
|
Specifies the encoding to be used for strings returned by to_string,
|
||
|
these are generally strings meant to be displayed on the console.
|
||
|
"""
|
||
|
|
||
|
with cf.config_prefix("display"):
|
||
|
cf.register_option(
|
||
|
"encoding", detect_console_encoding(), pc_encoding_doc, validator=cf.is_text
|
||
|
)
|