diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2013-10-11 22:13:50 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2013-10-11 22:13:50 (GMT) |
commit | fd4722cacf4885c29d358b8de6718b51a8149fa3 (patch) | |
tree | b6868d551a73bdc223a1263483f61072e41eb932 /Lib/_bootlocale.py | |
parent | 73abc527eb3e4b88f30b70e5404365ed24f545c9 (diff) | |
download | cpython-fd4722cacf4885c29d358b8de6718b51a8149fa3.zip cpython-fd4722cacf4885c29d358b8de6718b51a8149fa3.tar.gz cpython-fd4722cacf4885c29d358b8de6718b51a8149fa3.tar.bz2 |
Issue #9548: Add a minimal "_bootlocale" module that is imported by the _io module instead of the full locale module.
Diffstat (limited to 'Lib/_bootlocale.py')
-rw-r--r-- | Lib/_bootlocale.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Lib/_bootlocale.py b/Lib/_bootlocale.py new file mode 100644 index 0000000..efe4023 --- /dev/null +++ b/Lib/_bootlocale.py @@ -0,0 +1,34 @@ +"""A minimal subset of the locale module used at interpreter startup +(imported by the _io module), in order to reduce startup time. + +Don't import directly from third-party code; use the `locale` module instead! +""" + +import sys +import _locale + +if sys.platform.startswith("win"): + def getpreferredencoding(do_setlocale=True): + return _locale._getdefaultlocale()[1] +else: + try: + _locale.CODESET + except ImportError: + def getpreferredencoding(do_setlocale=True): + # This path for legacy systems needs the more complex + # getdefaultlocale() function, import the full locale module. + import locale + return locale.getpreferredencoding(do_setlocale) + else: + def getpreferredencoding(do_setlocale=True): + assert not do_setlocale + result = _locale.nl_langinfo(_locale.CODESET) + if not result and sys.platform == 'darwin': + # nl_langinfo can return an empty string + # when the setting has an invalid value. + # Default to UTF-8 in that case because + # UTF-8 is the default charset on OSX and + # returning nothing will crash the + # interpreter. + result = 'UTF-8' + return result |