]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-118761: Always lazy import `re` in `locale` (#129860)
authorSemyon Moroz <donbarbos@proton.me>
Thu, 27 Mar 2025 13:47:08 +0000 (17:47 +0400)
committerGitHub <noreply@github.com>
Thu, 27 Mar 2025 13:47:08 +0000 (15:47 +0200)
Lib/locale.py
Misc/NEWS.d/next/Library/2025-02-08-21-37-05.gh-issue-118761.EtqxeB.rst [new file with mode: 0644]

index 213d5e93418cfb556d158b7e918b04c8d07bb2d5..2feb10e59c96a38592c28c33845ff335237e6cb1 100644 (file)
@@ -13,7 +13,6 @@ also includes default encodings for all supported locale names.
 import sys
 import encodings
 import encodings.aliases
-import re
 import _collections_abc
 from builtins import str as _builtin_str
 import functools
@@ -177,8 +176,7 @@ def _strip_padding(s, amount):
         amount -= 1
     return s[lpos:rpos+1]
 
-_percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?'
-                         r'(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
+_percent_re = None
 
 def _format(percent, value, grouping=False, monetary=False, *additional):
     if additional:
@@ -217,6 +215,13 @@ def format_string(f, val, grouping=False, monetary=False):
     Grouping is applied if the third parameter is true.
     Conversion uses monetary thousands separator and grouping strings if
     forth parameter monetary is true."""
+    global _percent_re
+    if _percent_re is None:
+        import re
+
+        _percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?(?P<modifiers'
+                                 r'>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
+
     percents = list(_percent_re.finditer(f))
     new_f = _percent_re.sub('%s', f)
 
diff --git a/Misc/NEWS.d/next/Library/2025-02-08-21-37-05.gh-issue-118761.EtqxeB.rst b/Misc/NEWS.d/next/Library/2025-02-08-21-37-05.gh-issue-118761.EtqxeB.rst
new file mode 100644 (file)
index 0000000..b35275b
--- /dev/null
@@ -0,0 +1,2 @@
+Improve import time of :mod:`locale` using lazy import ``re``. Patch by
+Semyon Moroz.