summaryrefslogtreecommitdiffstats
path: root/Lib/_bootlocale.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-10-11 22:13:50 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-10-11 22:13:50 (GMT)
commitfd4722cacf4885c29d358b8de6718b51a8149fa3 (patch)
treeb6868d551a73bdc223a1263483f61072e41eb932 /Lib/_bootlocale.py
parent73abc527eb3e4b88f30b70e5404365ed24f545c9 (diff)
downloadcpython-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.py34
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